Skip to content

Commit caa4195

Browse files
committed
Toast position fixed
1 parent 8d709c7 commit caa4195

6 files changed

Lines changed: 77 additions & 80 deletions

File tree

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,14 @@ import { styles } from "./style";
88
interface Props {
99
selectedQueryData: any;
1010
searchTerm: string;
11+
onSelectedToCopy: (node: any) => void;
1112
onSelectedNode: (nodeTitle: string, node: any) => void;
1213
}
1314

1415
const DataExplorer: React.FC<Props> = ({
1516
selectedQueryData,
1617
searchTerm,
18+
onSelectedToCopy,
1719
onSelectedNode,
1820
}) => {
1921
if (!selectedQueryData) return null;
@@ -23,6 +25,7 @@ const DataExplorer: React.FC<Props> = ({
2325
<JSONTreeData
2426
data={selectedQueryData}
2527
searchTerm={searchTerm}
28+
onSelectedToCopy={onSelectedToCopy}
2629
onSelectedNode={onSelectedNode}
2730
/>
2831
</View>

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

Lines changed: 41 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import CloseButton from "../CloseButton";
99
import DataExplorer from "../DataExplorer";
1010
import QueryRow from "../QueryRow";
1111
import Searchbar from "../Searchbar";
12+
import Toast from "../Toast";
1213
import useDevtoolData from "./useDevtoolData";
1314

1415
import { styles } from "./styles";
@@ -22,11 +23,13 @@ const Devtool: React.FC<QueryDevtoolProps> = (props) => {
2223
searchRef,
2324
searchStringQueries,
2425
searchStringData,
26+
dataToLookup,
27+
showToast,
2528
setSearchStringQueries,
2629
handleChangeSearchQueryData,
2730
handleSelectedRow,
2831
handleOnselectedNode,
29-
dataToLookup,
32+
handleSelectedToCopy,
3033
} = useDevtoolData(props);
3134

3235
const renderHeader = () => (
@@ -70,48 +73,52 @@ const Devtool: React.FC<QueryDevtoolProps> = (props) => {
7073
<DataExplorer
7174
searchTerm={searchStringData}
7275
selectedQueryData={filteredData ?? selectedQuery?.data}
76+
onSelectedToCopy={handleSelectedToCopy}
7377
onSelectedNode={handleOnselectedNode}
7478
/>
7579
</View>
7680
);
7781
};
7882

7983
return (
80-
<ActionsheetScrollview
81-
nestedScrollEnabled
82-
stickyHeaderIndices={[0, 2]}
83-
style={styles.actionScrollviewContainer}
84-
>
85-
{renderHeader()}
86-
<ScrollView
87-
horizontal
88-
scrollEnabled={false}
89-
style={[
90-
selectedQuery ? styles.collapsedFlatlist : styles.expandedFlatlist,
91-
]}
84+
<React.Fragment>
85+
{showToast && <Toast message="Value was printed in your terminal" />}
86+
<ActionsheetScrollview
87+
nestedScrollEnabled
88+
stickyHeaderIndices={[0, 2]}
89+
style={styles.actionScrollviewContainer}
9290
>
93-
<FlatList
94-
ref={flalistRef}
95-
data={filteredQueries}
96-
style={[styles.queriesFlatlist]}
97-
renderItem={({ item, index }) => (
98-
<QueryRow
99-
index={index}
100-
item={item}
101-
isSelected={item.queryKey === selectedQuery?.queryKey}
102-
handleSelectedRow={handleSelectedRow}
103-
/>
104-
)}
105-
ItemSeparatorComponent={() => <View style={styles.separator} />}
106-
ListEmptyComponent={
107-
<Text style={styles.flatlistEmptyMessage}>No queries found</Text>
108-
}
109-
/>
110-
</ScrollView>
91+
{renderHeader()}
92+
<ScrollView
93+
horizontal
94+
scrollEnabled={false}
95+
style={[
96+
selectedQuery ? styles.collapsedFlatlist : styles.expandedFlatlist,
97+
]}
98+
>
99+
<FlatList
100+
ref={flalistRef}
101+
data={filteredQueries}
102+
style={[styles.queriesFlatlist]}
103+
renderItem={({ item, index }) => (
104+
<QueryRow
105+
index={index}
106+
item={item}
107+
isSelected={item.queryKey === selectedQuery?.queryKey}
108+
handleSelectedRow={handleSelectedRow}
109+
/>
110+
)}
111+
ItemSeparatorComponent={() => <View style={styles.separator} />}
112+
ListEmptyComponent={
113+
<Text style={styles.flatlistEmptyMessage}>No queries found</Text>
114+
}
115+
/>
116+
</ScrollView>
111117

112-
{renderDataExplorerHeader()}
113-
{renderDataExplorer()}
114-
</ActionsheetScrollview>
118+
{renderDataExplorerHeader()}
119+
{renderDataExplorer()}
120+
</ActionsheetScrollview>
121+
</React.Fragment>
115122
);
116123
};
117124

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

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ const useDevtoolData = (props: QueryDevtoolProps) => {
2929

3030
const [searchStringQueries, setSearchStringQueries] = useState("");
3131
const [searchStringData, setSearchStringData] = useState("");
32+
const [showToast, setShowToast] = useState(false);
3233

3334
// State to determine where to search (2nd Searchbar)
3435
const [dataToLookup, setDataToLookup] = useState<{
@@ -75,15 +76,15 @@ const useDevtoolData = (props: QueryDevtoolProps) => {
7576

7677
setQueries((prevData) => {
7778
const queryKeyIndex = prevData.findIndex(
78-
(item) => item.queryKey === queryKey,
79+
(item) => item.queryKey === queryKey
7980
);
8081

8182
return handleQueryDevtoolData(
8283
version,
8384
listenerType,
8485
queryKeyIndex,
8586
query,
86-
[...prevData],
87+
[...prevData]
8788
);
8889
});
8990
});
@@ -97,9 +98,9 @@ const useDevtoolData = (props: QueryDevtoolProps) => {
9798
() =>
9899
queries.find(
99100
(query) =>
100-
JSON.stringify(query?.queryKey) === JSON.stringify(selectedQueryKey),
101+
JSON.stringify(query?.queryKey) === JSON.stringify(selectedQueryKey)
101102
),
102-
[selectedQueryKey, queries],
103+
[selectedQueryKey, queries]
103104
);
104105

105106
const filteredQueries = useMemo(
@@ -108,9 +109,9 @@ const useDevtoolData = (props: QueryDevtoolProps) => {
108109
query.queryKey
109110
?.toString()
110111
.toLowerCase()
111-
.includes(searchStringQueries.toLowerCase()),
112+
.includes(searchStringQueries.toLowerCase())
112113
),
113-
[queries, searchStringQueries],
114+
[queries, searchStringQueries]
114115
);
115116

116117
const handleSelectedRow = useCallback(
@@ -138,9 +139,17 @@ const useDevtoolData = (props: QueryDevtoolProps) => {
138139
});
139140
}, 200);
140141
},
141-
[queries, filteredQueries, searchStringQueries],
142+
[queries, filteredQueries, searchStringQueries]
142143
);
143144

145+
const handleShowToast = () => {
146+
setShowToast(true);
147+
148+
setTimeout(() => {
149+
setShowToast(false);
150+
}, 3000);
151+
};
152+
144153
const handleSearch = useDebounce((term) => {
145154
const whereToSearch = dataToLookup?.nodeData
146155
? dataToLookup.nodeData
@@ -159,6 +168,11 @@ const useDevtoolData = (props: QueryDevtoolProps) => {
159168
}
160169
};
161170

171+
const handleSelectedToCopy = (node: any) => {
172+
console.log("📋", JSON.stringify(node));
173+
handleShowToast();
174+
};
175+
162176
const handleOnselectedNode = (nodeTitle: string, nodeData: any) => {
163177
setDataToLookup({ nodeTitle, nodeData });
164178
searchRef.current?.focus();
@@ -174,10 +188,12 @@ const useDevtoolData = (props: QueryDevtoolProps) => {
174188
searchStringData,
175189
filteredData,
176190
dataToLookup,
191+
showToast,
177192
setSearchStringQueries,
178193
handleChangeSearchQueryData,
179194
handleSelectedRow,
180195
handleOnselectedNode,
196+
handleSelectedToCopy,
181197
};
182198
};
183199

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

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
/* eslint-disable no-console */
21
import React, { ReactNode, useCallback } from "react";
32

43
import { ScrollView, Text, View } from "react-native";
@@ -8,25 +7,23 @@ import JSONTree from "react-native-json-tree";
87
import getNodeValue from "../../utils/getNodeValue";
98
import CopyButton from "../CopyButton";
109
import SearchButton from "../SearchButton";
11-
import Toast from "../Toast";
1210
import theme from "./treeTheme";
13-
import useJSONTreeData from "./useJSONTreeData";
1411

1512
import { styles } from "./styles";
1613

1714
interface Props {
1815
data: any;
1916
searchTerm: string;
17+
onSelectedToCopy: (node: any) => void;
2018
onSelectedNode: (nodeTitle: string, node: any) => void;
2119
}
2220

2321
const JSONTreeData: React.FC<Props> = ({
2422
data,
2523
searchTerm,
24+
onSelectedToCopy,
2625
onSelectedNode,
2726
}) => {
28-
const { showToast, handleShowToast } = useJSONTreeData();
29-
3027
/**
3128
* Returns a custom Text with the Copy Icon for Nodes
3229
* @param type - The type of the node.
@@ -40,7 +37,7 @@ const JSONTreeData: React.FC<Props> = ({
4037
type: any,
4138
dataRendered: any,
4239
itemType: ReactNode,
43-
itemString: string | number | undefined,
40+
itemString: string | number | undefined
4441
) => {
4542
return (
4643
<View style={styles.valueContainer}>
@@ -50,17 +47,12 @@ const JSONTreeData: React.FC<Props> = ({
5047
</Text>
5148

5249
{type === "Object" || type === "Array" || type === "Iterable" ? (
53-
<CopyButton
54-
onPress={() => {
55-
console.log("📋", JSON.stringify(dataRendered));
56-
handleShowToast();
57-
}}
58-
/>
50+
<CopyButton onPress={() => onSelectedToCopy(dataRendered)} />
5951
) : null}
6052
</View>
6153
);
6254
},
63-
[handleShowToast],
55+
[onSelectedToCopy]
6456
);
6557

6658
/**
@@ -92,16 +84,16 @@ const JSONTreeData: React.FC<Props> = ({
9284
nodeType !== "Iterable" && (
9385
<CopyButton
9486
onPress={() => {
95-
console.log("📋", getNodeValue(data, keyPath));
96-
handleShowToast();
87+
const value = getNodeValue(data, keyPath);
88+
onSelectedToCopy(value);
9789
}}
9890
/>
9991
)}
10092
<Text style={styles.textStyle}>{`${keyPath[0]}:`}</Text>
10193
</View>
10294
);
10395
},
104-
[data, handleShowToast, onSelectedNode],
96+
[data, onSelectedToCopy, onSelectedNode]
10597
);
10698

10799
/**
@@ -138,8 +130,6 @@ const JSONTreeData: React.FC<Props> = ({
138130
labelRenderer={labelRenderer}
139131
valueRenderer={valueRenderer}
140132
/>
141-
142-
{showToast && <Toast message="Value was printed in your terminal" />}
143133
</ScrollView>
144134
);
145135
};

packages/react-native-query-devtool/src/components/JSONTreeData/useJSONTreeData.ts

Lines changed: 0 additions & 20 deletions
This file was deleted.

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,13 @@ const Toast: React.FC<Props> = ({ message, duration = 5000 }) => {
4242
const styles = StyleSheet.create({
4343
container: {
4444
position: "absolute",
45-
top: 20,
45+
bottom: 50,
4646
left: 20,
4747
right: 20,
4848
backgroundColor: "rgba(0, 0, 0, 0.8)",
4949
borderRadius: 5,
5050
padding: 10,
51+
zIndex: 99,
5152
},
5253
message: {
5354
textAlign: "center",

0 commit comments

Comments
 (0)