Skip to content

Commit 30d71d6

Browse files
committed
Fix Flatlist height issues and styling
1 parent 3b5b757 commit 30d71d6

5 files changed

Lines changed: 59 additions & 30 deletions

File tree

packages/react-native-query-devtool/src/components/Devtool/index.tsx

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
import React from "react";
22

3-
import { ScrollView, Text, View } from "react-native";
3+
import { ScrollView, Text, View, FlatList } from "react-native";
44

5-
import {
6-
ScrollView as ActionsheetScrollview,
7-
FlatList,
8-
} from "react-native-actions-sheet";
5+
import { ScrollView as ActionsheetScrollview } from "react-native-actions-sheet";
96

107
import { QueryDevtoolProps } from "../../types";
118
import CloseButton from "../CloseButton";
@@ -21,13 +18,18 @@ const Devtool: React.FC<QueryDevtoolProps> = (props) => {
2118
filteredQueries,
2219
selectedQuery,
2320
filter,
21+
flalistRef,
2422
setFilter,
2523
handleSelectedRow,
2624
} = useDevtoolData(props);
2725

2826
const renderHeader = () => (
2927
<View style={styles.searchbarContainer}>
30-
<Searchbar filter={filter} setFilter={setFilter} />
28+
<Searchbar
29+
filter={filter}
30+
setFilter={setFilter}
31+
placeholder={`${filteredQueries.length} Queries`}
32+
/>
3133
</View>
3234
);
3335

@@ -61,13 +63,17 @@ const Devtool: React.FC<QueryDevtoolProps> = (props) => {
6163
style={styles.actionScrollviewContainer}
6264
>
6365
{renderHeader()}
64-
<ScrollView horizontal scrollEnabled={false}>
66+
<ScrollView
67+
horizontal
68+
scrollEnabled={false}
69+
style={[
70+
selectedQuery ? styles.collapsedFlatlist : styles.expandedFlatlist,
71+
]}
72+
>
6573
<FlatList
74+
ref={flalistRef}
6675
data={filteredQueries}
67-
style={[
68-
styles.queriesFlatlist,
69-
selectedQuery ? styles.collapsedFlatlist : styles.expandedFlatlist,
70-
]}
76+
style={[styles.queriesFlatlist]}
7177
renderItem={({ item, index }) => (
7278
<QueryRow
7379
index={index}

packages/react-native-query-devtool/src/components/Devtool/styles.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ export const styles = StyleSheet.create({
3434
textAlign: "center",
3535
},
3636
expandedFlatlist: {
37-
height: 500,
37+
height: 400,
38+
marginBottom: 20,
3839
},
3940
collapsedFlatlist: {
4041
height: 250,

packages/react-native-query-devtool/src/components/Devtool/useDevtoolData.ts

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,28 @@
1-
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
1+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
2+
3+
import { FlatList } from "react-native";
24

35
import {
46
ListenerEventType,
57
QueryDevtoolData,
68
QueryDevtoolProps,
79
QueryKey,
8-
} from '../../types';
10+
} from "../../types";
911
import {
1012
getQueryDevtoolData,
1113
handleQueryDevtoolData,
12-
} from '../../utils/queryListener';
14+
} from "../../utils/queryListener";
1315

1416
const useDevtoolData = (props: QueryDevtoolProps) => {
15-
const { queryClient, version = 'v5' } = props;
17+
const { queryClient, version = "v5" } = props;
1618

1719
const isInitialized = useRef(false);
20+
const flalistRef = useRef<FlatList>();
21+
const timeoutRef = useRef<NodeJS.Timeout>();
1822

1923
const [queries, setQueries] = useState<QueryDevtoolData[]>([]);
2024
const [selectedQueryKey, setSelectedQueryKey] = useState<QueryKey>();
21-
const [filter, setFilter] = useState('');
25+
const [filter, setFilter] = useState("");
2226

2327
useEffect(() => {
2428
if (isInitialized.current) return;
@@ -31,6 +35,12 @@ const useDevtoolData = (props: QueryDevtoolProps) => {
3135
setQueries(allQueries);
3236

3337
isInitialized.current = true;
38+
39+
return () => {
40+
if (timeoutRef.current) {
41+
clearTimeout(timeoutRef.current);
42+
}
43+
};
3444
}, [version, queryClient]);
3545

3646
useEffect(() => {
@@ -79,19 +89,15 @@ const useDevtoolData = (props: QueryDevtoolProps) => {
7989

8090
const filteredQueries = useMemo(
8191
() =>
82-
queries.filter(
83-
(query) =>
84-
query.queryKey
85-
?.toString()
86-
.toLowerCase()
87-
.includes(filter.toLowerCase())
92+
queries.filter((query) =>
93+
query.queryKey?.toString().toLowerCase().includes(filter.toLowerCase())
8894
),
8995
[queries, filter]
9096
);
9197

9298
const handleSelectedRow = useCallback(
9399
(indexRow?: number) => {
94-
if (typeof indexRow !== 'number') {
100+
if (typeof indexRow !== "number") {
95101
setSelectedQueryKey(undefined);
96102
return;
97103
}
@@ -100,6 +106,16 @@ const useDevtoolData = (props: QueryDevtoolProps) => {
100106
const queryKey = queriesSource[indexRow].queryKey;
101107

102108
setSelectedQueryKey((prev) => (prev !== queryKey ? queryKey : undefined));
109+
110+
timeoutRef.current = setTimeout(
111+
() =>
112+
flalistRef.current.scrollToIndex({
113+
index: indexRow,
114+
animated: true,
115+
viewPosition: 1,
116+
}),
117+
200
118+
);
103119
},
104120
[queries, filteredQueries, filter]
105121
);
@@ -109,6 +125,7 @@ const useDevtoolData = (props: QueryDevtoolProps) => {
109125
selectedQuery,
110126
filter,
111127
filteredQueries,
128+
flalistRef,
112129
setFilter,
113130
handleSelectedRow,
114131
};

packages/react-native-query-devtool/src/components/Searchbar/index.tsx

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,22 @@
1-
import React from 'react';
1+
import React from "react";
22

3-
import { TextInput } from 'react-native';
3+
import { TextInput } from "react-native";
44

5-
import { styles } from './style';
6-
import SearchbarProps from './types';
5+
import { styles } from "./style";
6+
import SearchbarProps from "./types";
77

8-
const Searchbar: React.FC<SearchbarProps> = ({ filter, setFilter }) => {
8+
const Searchbar: React.FC<SearchbarProps> = ({
9+
filter,
10+
placeholder = "Filter",
11+
setFilter,
12+
}) => {
913
return (
1014
<TextInput
1115
style={styles.inputContainer}
1216
value={filter}
1317
onChangeText={setFilter}
1418
autoCapitalize="none"
15-
placeholder="Filter"
19+
placeholder={placeholder}
1620
placeholderTextColor="black"
1721
/>
1822
);

packages/react-native-query-devtool/src/components/Searchbar/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
interface SearchbarProps {
22
filter: string;
3+
placeholder?: string;
34
setFilter: (str: string) => void;
45
}
56

0 commit comments

Comments
 (0)