@buoy-gg/react-query 7.0.41 → 7.0.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. package/README.md +11 -73
  2. package/lib/commonjs/checkPeer.js +1 -8
  3. package/lib/commonjs/checkPeer.web.js +1 -3
  4. package/lib/commonjs/index.js +1 -657
  5. package/lib/commonjs/preset.js +1 -243
  6. package/lib/commonjs/react-query/components/DataEditorMode.js +1 -317
  7. package/lib/commonjs/react-query/components/FilterStatusBadge.js +1 -55
  8. package/lib/commonjs/react-query/components/MutationBrowserMode.js +1 -52
  9. package/lib/commonjs/react-query/components/MutationEditorMode.js +1 -276
  10. package/lib/commonjs/react-query/components/QueryBrowserMode.js +1 -99
  11. package/lib/commonjs/react-query/components/QueryDebugInfo.js +1 -107
  12. package/lib/commonjs/react-query/components/QueryFilterViewV3.js +1 -224
  13. package/lib/commonjs/react-query/components/QuerySelector.js +1 -209
  14. package/lib/commonjs/react-query/components/ReactQueryDevToolsModal.js +1 -91
  15. package/lib/commonjs/react-query/components/ReactQuerySection.js +1 -47
  16. package/lib/commonjs/react-query/components/ReactQueryTracker.js +1 -38
  17. package/lib/commonjs/react-query/components/WifiToggle.js +1 -51
  18. package/lib/commonjs/react-query/components/modals/DataEditorModal.js +1 -103
  19. package/lib/commonjs/react-query/components/modals/MutationBrowserFooter.js +1 -61
  20. package/lib/commonjs/react-query/components/modals/MutationBrowserModal.js +1 -164
  21. package/lib/commonjs/react-query/components/modals/MutationEditorModal.js +1 -106
  22. package/lib/commonjs/react-query/components/modals/QueryBrowserFooter.js +1 -56
  23. package/lib/commonjs/react-query/components/modals/QueryBrowserModal.js +1 -254
  24. package/lib/commonjs/react-query/components/modals/ReactQueryModal.js +1 -83
  25. package/lib/commonjs/react-query/components/modals/ReactQueryModalHeader.js +1 -194
  26. package/lib/commonjs/react-query/components/modals/SwipeIndicator.js +1 -204
  27. package/lib/commonjs/react-query/components/query-browser/ActionButton.js +1 -100
  28. package/lib/commonjs/react-query/components/query-browser/ClearCacheButton.js +1 -53
  29. package/lib/commonjs/react-query/components/query-browser/Explorer.js +1 -75
  30. package/lib/commonjs/react-query/components/query-browser/MutationButton.js +1 -190
  31. package/lib/commonjs/react-query/components/query-browser/MutationDetails.js +1 -124
  32. package/lib/commonjs/react-query/components/query-browser/MutationDetailsChips.js +1 -68
  33. package/lib/commonjs/react-query/components/query-browser/MutationInformation.js +1 -118
  34. package/lib/commonjs/react-query/components/query-browser/MutationStatusCount.js +1 -84
  35. package/lib/commonjs/react-query/components/query-browser/MutationsList.js +1 -220
  36. package/lib/commonjs/react-query/components/query-browser/NetworkToggleButton.js +1 -54
  37. package/lib/commonjs/react-query/components/query-browser/QueryActions.js +1 -124
  38. package/lib/commonjs/react-query/components/query-browser/QueryBrowser.js +1 -181
  39. package/lib/commonjs/react-query/components/query-browser/QueryDetails.js +1 -141
  40. package/lib/commonjs/react-query/components/query-browser/QueryDetailsChip.js +1 -78
  41. package/lib/commonjs/react-query/components/query-browser/QueryInformation.js +1 -95
  42. package/lib/commonjs/react-query/components/query-browser/QueryRow.js +1 -96
  43. package/lib/commonjs/react-query/components/query-browser/QueryStatus.js +1 -167
  44. package/lib/commonjs/react-query/components/query-browser/QueryStatusCount.js +1 -100
  45. package/lib/commonjs/react-query/components/query-browser/StorageStatusCount.js +1 -61
  46. package/lib/commonjs/react-query/components/query-browser/index.js +1 -170
  47. package/lib/commonjs/react-query/components/query-browser/svgs.js +1 -72
  48. package/lib/commonjs/react-query/hooks/useActionButtons.js +1 -51
  49. package/lib/commonjs/react-query/hooks/useAllMutations.js +1 -85
  50. package/lib/commonjs/react-query/hooks/useAllQueries.js +1 -117
  51. package/lib/commonjs/react-query/hooks/useModalManager.js +1 -178
  52. package/lib/commonjs/react-query/hooks/useModalPersistence.js +1 -71
  53. package/lib/commonjs/react-query/hooks/useMutationActionButtons.js +1 -21
  54. package/lib/commonjs/react-query/hooks/useQueryStatusCounts.js +1 -114
  55. package/lib/commonjs/react-query/hooks/useReactQueryState.js +1 -24
  56. package/lib/commonjs/react-query/hooks/useSelectedMutation.js +1 -30
  57. package/lib/commonjs/react-query/hooks/useSelectedQuery.js +1 -96
  58. package/lib/commonjs/react-query/hooks/useStorageQueryCounts.js +1 -28
  59. package/lib/commonjs/react-query/hooks/useWifiState.js +1 -67
  60. package/lib/commonjs/react-query/stores/reactQueryEventStore.js +1 -302
  61. package/lib/commonjs/react-query/sync/dehydrate.js +1 -166
  62. package/lib/commonjs/react-query/sync/reactQuerySyncAdapter.js +1 -593
  63. package/lib/commonjs/react-query/sync/snapshotProvider.js +1 -289
  64. package/lib/commonjs/react-query/sync/useReactQuerySyncAdapter.js +1 -34
  65. package/lib/commonjs/react-query/types/types.js +1 -14
  66. package/lib/commonjs/react-query/utils/actions/deleteItem.js +1 -23
  67. package/lib/commonjs/react-query/utils/actions/emitDevToolsEvent.js +1 -40
  68. package/lib/commonjs/react-query/utils/actions/invalidate.js +1 -15
  69. package/lib/commonjs/react-query/utils/actions/refetch.js +1 -17
  70. package/lib/commonjs/react-query/utils/actions/remove.js +1 -15
  71. package/lib/commonjs/react-query/utils/actions/reset.js +1 -17
  72. package/lib/commonjs/react-query/utils/actions/triggerError.js +1 -33
  73. package/lib/commonjs/react-query/utils/actions/triggerLoading.js +1 -54
  74. package/lib/commonjs/react-query/utils/deleteNestedDataByPath.js +1 -56
  75. package/lib/commonjs/react-query/utils/getQueryStatusColor.js +1 -16
  76. package/lib/commonjs/react-query/utils/getQueryStatusLabel.js +1 -23
  77. package/lib/commonjs/react-query/utils/getStorageQueryCounts.js +1 -35
  78. package/lib/commonjs/react-query/utils/modalStorageOperations.js +1 -127
  79. package/lib/commonjs/react-query/utils/storageQueryUtils.js +1 -149
  80. package/lib/commonjs/react-query/utils/testIDs.js +1 -61
  81. package/lib/commonjs/react-query/utils/updateNestedDataByPath.js +1 -61
  82. package/lib/module/checkPeer.js +1 -8
  83. package/lib/module/checkPeer.web.js +1 -3
  84. package/lib/module/index.js +1 -130
  85. package/lib/module/preset.js +1 -239
  86. package/lib/module/react-query/components/DataEditorMode.js +1 -311
  87. package/lib/module/react-query/components/FilterStatusBadge.js +1 -51
  88. package/lib/module/react-query/components/MutationBrowserMode.js +1 -47
  89. package/lib/module/react-query/components/MutationEditorMode.js +1 -270
  90. package/lib/module/react-query/components/QueryBrowserMode.js +1 -94
  91. package/lib/module/react-query/components/QueryDebugInfo.js +1 -104
  92. package/lib/module/react-query/components/QueryFilterViewV3.js +1 -221
  93. package/lib/module/react-query/components/QuerySelector.js +1 -205
  94. package/lib/module/react-query/components/ReactQueryDevToolsModal.js +1 -87
  95. package/lib/module/react-query/components/ReactQuerySection.js +1 -43
  96. package/lib/module/react-query/components/ReactQueryTracker.js +1 -35
  97. package/lib/module/react-query/components/WifiToggle.js +1 -48
  98. package/lib/module/react-query/components/modals/DataEditorModal.js +1 -99
  99. package/lib/module/react-query/components/modals/MutationBrowserFooter.js +1 -56
  100. package/lib/module/react-query/components/modals/MutationBrowserModal.js +1 -161
  101. package/lib/module/react-query/components/modals/MutationEditorModal.js +1 -102
  102. package/lib/module/react-query/components/modals/QueryBrowserFooter.js +1 -51
  103. package/lib/module/react-query/components/modals/QueryBrowserModal.js +1 -250
  104. package/lib/module/react-query/components/modals/ReactQueryModal.js +1 -79
  105. package/lib/module/react-query/components/modals/ReactQueryModalHeader.js +1 -190
  106. package/lib/module/react-query/components/modals/SwipeIndicator.js +1 -201
  107. package/lib/module/react-query/components/query-browser/ActionButton.js +1 -96
  108. package/lib/module/react-query/components/query-browser/ClearCacheButton.js +1 -49
  109. package/lib/module/react-query/components/query-browser/Explorer.js +1 -70
  110. package/lib/module/react-query/components/query-browser/MutationButton.js +1 -186
  111. package/lib/module/react-query/components/query-browser/MutationDetails.js +1 -119
  112. package/lib/module/react-query/components/query-browser/MutationDetailsChips.js +1 -64
  113. package/lib/module/react-query/components/query-browser/MutationInformation.js +1 -113
  114. package/lib/module/react-query/components/query-browser/MutationStatusCount.js +1 -79
  115. package/lib/module/react-query/components/query-browser/MutationsList.js +1 -215
  116. package/lib/module/react-query/components/query-browser/NetworkToggleButton.js +1 -50
  117. package/lib/module/react-query/components/query-browser/QueryActions.js +1 -119
  118. package/lib/module/react-query/components/query-browser/QueryBrowser.js +1 -176
  119. package/lib/module/react-query/components/query-browser/QueryDetails.js +1 -136
  120. package/lib/module/react-query/components/query-browser/QueryDetailsChip.js +1 -74
  121. package/lib/module/react-query/components/query-browser/QueryInformation.js +1 -90
  122. package/lib/module/react-query/components/query-browser/QueryRow.js +1 -92
  123. package/lib/module/react-query/components/query-browser/QueryStatus.js +1 -163
  124. package/lib/module/react-query/components/query-browser/QueryStatusCount.js +1 -95
  125. package/lib/module/react-query/components/query-browser/StorageStatusCount.js +1 -56
  126. package/lib/module/react-query/components/query-browser/index.js +1 -22
  127. package/lib/module/react-query/components/query-browser/svgs.js +1 -64
  128. package/lib/module/react-query/hooks/useActionButtons.js +1 -46
  129. package/lib/module/react-query/hooks/useAllMutations.js +1 -82
  130. package/lib/module/react-query/hooks/useAllQueries.js +1 -114
  131. package/lib/module/react-query/hooks/useModalManager.js +1 -175
  132. package/lib/module/react-query/hooks/useModalPersistence.js +1 -67
  133. package/lib/module/react-query/hooks/useMutationActionButtons.js +1 -17
  134. package/lib/module/react-query/hooks/useQueryStatusCounts.js +1 -112
  135. package/lib/module/react-query/hooks/useReactQueryState.js +1 -20
  136. package/lib/module/react-query/hooks/useSelectedMutation.js +1 -27
  137. package/lib/module/react-query/hooks/useSelectedQuery.js +1 -92
  138. package/lib/module/react-query/hooks/useStorageQueryCounts.js +1 -25
  139. package/lib/module/react-query/hooks/useWifiState.js +1 -64
  140. package/lib/module/react-query/stores/reactQueryEventStore.js +1 -293
  141. package/lib/module/react-query/sync/dehydrate.js +1 -156
  142. package/lib/module/react-query/sync/reactQuerySyncAdapter.js +1 -589
  143. package/lib/module/react-query/sync/snapshotProvider.js +1 -284
  144. package/lib/module/react-query/sync/useReactQuerySyncAdapter.js +1 -31
  145. package/lib/module/react-query/types/types.js +1 -10
  146. package/lib/module/react-query/utils/actions/deleteItem.js +1 -19
  147. package/lib/module/react-query/utils/actions/emitDevToolsEvent.js +1 -36
  148. package/lib/module/react-query/utils/actions/invalidate.js +1 -11
  149. package/lib/module/react-query/utils/actions/refetch.js +1 -13
  150. package/lib/module/react-query/utils/actions/remove.js +1 -11
  151. package/lib/module/react-query/utils/actions/reset.js +1 -13
  152. package/lib/module/react-query/utils/actions/triggerError.js +1 -29
  153. package/lib/module/react-query/utils/actions/triggerLoading.js +1 -50
  154. package/lib/module/react-query/utils/deleteNestedDataByPath.js +1 -51
  155. package/lib/module/react-query/utils/getQueryStatusColor.js +1 -12
  156. package/lib/module/react-query/utils/getQueryStatusLabel.js +1 -19
  157. package/lib/module/react-query/utils/getStorageQueryCounts.js +1 -31
  158. package/lib/module/react-query/utils/modalStorageOperations.js +1 -117
  159. package/lib/module/react-query/utils/storageQueryUtils.js +1 -140
  160. package/lib/module/react-query/utils/testIDs.js +1 -54
  161. package/lib/module/react-query/utils/updateNestedDataByPath.js +1 -56
  162. package/lib/web/index.mjs +3 -4
  163. package/package.json +4 -7
  164. package/lib/typescript/checkPeer.d.ts.map +0 -1
  165. package/lib/typescript/checkPeer.web.d.ts.map +0 -1
  166. package/lib/typescript/index.d.ts.map +0 -1
  167. package/lib/typescript/preset.d.ts.map +0 -1
  168. package/lib/typescript/react-query/components/DataEditorMode.d.ts.map +0 -1
  169. package/lib/typescript/react-query/components/FilterStatusBadge.d.ts.map +0 -1
  170. package/lib/typescript/react-query/components/MutationBrowserMode.d.ts.map +0 -1
  171. package/lib/typescript/react-query/components/MutationEditorMode.d.ts.map +0 -1
  172. package/lib/typescript/react-query/components/QueryBrowserMode.d.ts.map +0 -1
  173. package/lib/typescript/react-query/components/QueryDebugInfo.d.ts.map +0 -1
  174. package/lib/typescript/react-query/components/QueryFilterViewV3.d.ts.map +0 -1
  175. package/lib/typescript/react-query/components/QuerySelector.d.ts.map +0 -1
  176. package/lib/typescript/react-query/components/ReactQueryDevToolsModal.d.ts.map +0 -1
  177. package/lib/typescript/react-query/components/ReactQuerySection.d.ts.map +0 -1
  178. package/lib/typescript/react-query/components/ReactQueryTracker.d.ts.map +0 -1
  179. package/lib/typescript/react-query/components/WifiToggle.d.ts.map +0 -1
  180. package/lib/typescript/react-query/components/modals/DataEditorModal.d.ts.map +0 -1
  181. package/lib/typescript/react-query/components/modals/MutationBrowserFooter.d.ts.map +0 -1
  182. package/lib/typescript/react-query/components/modals/MutationBrowserModal.d.ts.map +0 -1
  183. package/lib/typescript/react-query/components/modals/MutationEditorModal.d.ts.map +0 -1
  184. package/lib/typescript/react-query/components/modals/QueryBrowserFooter.d.ts.map +0 -1
  185. package/lib/typescript/react-query/components/modals/QueryBrowserModal.d.ts.map +0 -1
  186. package/lib/typescript/react-query/components/modals/ReactQueryModal.d.ts.map +0 -1
  187. package/lib/typescript/react-query/components/modals/ReactQueryModalHeader.d.ts.map +0 -1
  188. package/lib/typescript/react-query/components/modals/SwipeIndicator.d.ts.map +0 -1
  189. package/lib/typescript/react-query/components/query-browser/ActionButton.d.ts.map +0 -1
  190. package/lib/typescript/react-query/components/query-browser/ClearCacheButton.d.ts.map +0 -1
  191. package/lib/typescript/react-query/components/query-browser/Explorer.d.ts.map +0 -1
  192. package/lib/typescript/react-query/components/query-browser/MutationButton.d.ts.map +0 -1
  193. package/lib/typescript/react-query/components/query-browser/MutationDetails.d.ts.map +0 -1
  194. package/lib/typescript/react-query/components/query-browser/MutationDetailsChips.d.ts.map +0 -1
  195. package/lib/typescript/react-query/components/query-browser/MutationInformation.d.ts.map +0 -1
  196. package/lib/typescript/react-query/components/query-browser/MutationStatusCount.d.ts.map +0 -1
  197. package/lib/typescript/react-query/components/query-browser/MutationsList.d.ts.map +0 -1
  198. package/lib/typescript/react-query/components/query-browser/NetworkToggleButton.d.ts.map +0 -1
  199. package/lib/typescript/react-query/components/query-browser/QueryActions.d.ts.map +0 -1
  200. package/lib/typescript/react-query/components/query-browser/QueryBrowser.d.ts.map +0 -1
  201. package/lib/typescript/react-query/components/query-browser/QueryDetails.d.ts.map +0 -1
  202. package/lib/typescript/react-query/components/query-browser/QueryDetailsChip.d.ts.map +0 -1
  203. package/lib/typescript/react-query/components/query-browser/QueryInformation.d.ts.map +0 -1
  204. package/lib/typescript/react-query/components/query-browser/QueryRow.d.ts.map +0 -1
  205. package/lib/typescript/react-query/components/query-browser/QueryStatus.d.ts.map +0 -1
  206. package/lib/typescript/react-query/components/query-browser/QueryStatusCount.d.ts.map +0 -1
  207. package/lib/typescript/react-query/components/query-browser/StorageStatusCount.d.ts.map +0 -1
  208. package/lib/typescript/react-query/components/query-browser/index.d.ts.map +0 -1
  209. package/lib/typescript/react-query/components/query-browser/svgs.d.ts.map +0 -1
  210. package/lib/typescript/react-query/hooks/useActionButtons.d.ts.map +0 -1
  211. package/lib/typescript/react-query/hooks/useAllMutations.d.ts.map +0 -1
  212. package/lib/typescript/react-query/hooks/useAllQueries.d.ts.map +0 -1
  213. package/lib/typescript/react-query/hooks/useModalManager.d.ts.map +0 -1
  214. package/lib/typescript/react-query/hooks/useModalPersistence.d.ts.map +0 -1
  215. package/lib/typescript/react-query/hooks/useMutationActionButtons.d.ts.map +0 -1
  216. package/lib/typescript/react-query/hooks/useQueryStatusCounts.d.ts.map +0 -1
  217. package/lib/typescript/react-query/hooks/useReactQueryState.d.ts.map +0 -1
  218. package/lib/typescript/react-query/hooks/useSelectedMutation.d.ts.map +0 -1
  219. package/lib/typescript/react-query/hooks/useSelectedQuery.d.ts.map +0 -1
  220. package/lib/typescript/react-query/hooks/useStorageQueryCounts.d.ts.map +0 -1
  221. package/lib/typescript/react-query/hooks/useWifiState.d.ts.map +0 -1
  222. package/lib/typescript/react-query/stores/reactQueryEventStore.d.ts.map +0 -1
  223. package/lib/typescript/react-query/sync/dehydrate.d.ts.map +0 -1
  224. package/lib/typescript/react-query/sync/reactQuerySyncAdapter.d.ts.map +0 -1
  225. package/lib/typescript/react-query/sync/snapshotProvider.d.ts.map +0 -1
  226. package/lib/typescript/react-query/sync/useReactQuerySyncAdapter.d.ts.map +0 -1
  227. package/lib/typescript/react-query/types/types.d.ts.map +0 -1
  228. package/lib/typescript/react-query/utils/actions/deleteItem.d.ts.map +0 -1
  229. package/lib/typescript/react-query/utils/actions/emitDevToolsEvent.d.ts.map +0 -1
  230. package/lib/typescript/react-query/utils/actions/invalidate.d.ts.map +0 -1
  231. package/lib/typescript/react-query/utils/actions/refetch.d.ts.map +0 -1
  232. package/lib/typescript/react-query/utils/actions/remove.d.ts.map +0 -1
  233. package/lib/typescript/react-query/utils/actions/reset.d.ts.map +0 -1
  234. package/lib/typescript/react-query/utils/actions/triggerError.d.ts.map +0 -1
  235. package/lib/typescript/react-query/utils/actions/triggerLoading.d.ts.map +0 -1
  236. package/lib/typescript/react-query/utils/deleteNestedDataByPath.d.ts.map +0 -1
  237. package/lib/typescript/react-query/utils/getQueryStatusColor.d.ts.map +0 -1
  238. package/lib/typescript/react-query/utils/getQueryStatusLabel.d.ts.map +0 -1
  239. package/lib/typescript/react-query/utils/getStorageQueryCounts.d.ts.map +0 -1
  240. package/lib/typescript/react-query/utils/modalStorageOperations.d.ts.map +0 -1
  241. package/lib/typescript/react-query/utils/storageQueryUtils.d.ts.map +0 -1
  242. package/lib/typescript/react-query/utils/testIDs.d.ts.map +0 -1
  243. package/lib/typescript/react-query/utils/updateNestedDataByPath.d.ts.map +0 -1
@@ -1,250 +1 @@
1
- "use strict";
2
-
3
- import { useQueryClient } from "@tanstack/react-query";
4
- import { JsModal, useSafeAreaInsets, ModalHeader, TabSelector } from "@buoy-gg/shared-ui";
5
- import { useGetQueryByQueryKey } from "../../hooks/useSelectedQuery";
6
- import { ReactQueryModalHeader } from "./ReactQueryModalHeader";
7
- import { QueryBrowserMode } from "../QueryBrowserMode";
8
- import { QueryBrowserFooter } from "./QueryBrowserFooter";
9
- import { QueryFilterViewV3 } from "../QueryFilterViewV3";
10
- import { useState, useCallback, useEffect } from "react";
11
- import { View, StyleSheet } from "react-native";
12
- import { devToolsStorageKeys, persistentStorage } from "@buoy-gg/shared-ui";
13
- import useAllQueries from "../../hooks/useAllQueries";
14
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
15
- /**
16
- * Specialized modal for query browsing following "Decompose by Responsibility"
17
- * Single purpose: Display query browser when no query is selected
18
- */
19
- export function QueryBrowserModal({
20
- visible,
21
- selectedQueryKey,
22
- onQuerySelect,
23
- onClose,
24
- onMinimize,
25
- activeFilter: externalActiveFilter,
26
- onFilterChange: externalOnFilterChange,
27
- enableSharedModalDimensions = false,
28
- onTabChange,
29
- searchText = "",
30
- onSearchChange
31
- }) {
32
- const queryClient = useQueryClient();
33
- const selectedQuery = useGetQueryByQueryKey(selectedQueryKey);
34
- const allQueries = useAllQueries();
35
-
36
- // Clear query cache handler
37
- const handleClearCache = useCallback(() => {
38
- queryClient.getQueryCache().clear();
39
- }, [queryClient]);
40
-
41
- // Use external filter state if provided (for persistence), otherwise use internal state
42
- const [internalActiveFilter, setInternalActiveFilter] = useState(null);
43
- const activeFilter = externalActiveFilter ?? internalActiveFilter;
44
- const setActiveFilter = externalOnFilterChange ?? setInternalActiveFilter;
45
-
46
- // Filter modal state
47
- const [showFilterView, setShowFilterView] = useState(false);
48
- const [ignoredPatterns, setIgnoredPatterns] = useState(new Set());
49
- const [includedPatterns, setIncludedPatterns] = useState(new Set());
50
-
51
- // Load ignored patterns from storage on mount
52
- useEffect(() => {
53
- const loadFilters = async () => {
54
- try {
55
- const stored = await persistentStorage.getItem(devToolsStorageKeys.reactQuery.ignoredPatterns());
56
- if (stored) {
57
- const patterns = JSON.parse(stored);
58
- if (Array.isArray(patterns)) {
59
- setIgnoredPatterns(new Set(patterns));
60
- }
61
- }
62
- } catch (error) {
63
- console.error("Failed to load ignored patterns:", error);
64
- }
65
- };
66
- loadFilters();
67
- }, []);
68
-
69
- // Load included patterns from storage on mount
70
- useEffect(() => {
71
- const loadFilters = async () => {
72
- try {
73
- const stored = await persistentStorage.getItem(devToolsStorageKeys.reactQuery.includedPatterns());
74
- if (stored) {
75
- const patterns = JSON.parse(stored);
76
- if (Array.isArray(patterns)) {
77
- setIncludedPatterns(new Set(patterns));
78
- }
79
- }
80
- } catch (error) {
81
- console.error("Failed to load included patterns:", error);
82
- }
83
- };
84
- loadFilters();
85
- }, []);
86
-
87
- // Save ignored patterns to storage when they change
88
- useEffect(() => {
89
- const saveFilters = async () => {
90
- try {
91
- const patterns = Array.from(ignoredPatterns);
92
- await persistentStorage.setItem(devToolsStorageKeys.reactQuery.ignoredPatterns(), JSON.stringify(patterns));
93
- } catch (error) {
94
- console.error("Failed to save ignored patterns:", error);
95
- }
96
- };
97
- saveFilters();
98
- }, [ignoredPatterns]);
99
-
100
- // Save included patterns to storage when they change
101
- useEffect(() => {
102
- const saveFilters = async () => {
103
- try {
104
- const patterns = Array.from(includedPatterns);
105
- await persistentStorage.setItem(devToolsStorageKeys.reactQuery.includedPatterns(), JSON.stringify(patterns));
106
- } catch (error) {
107
- console.error("Failed to save included patterns:", error);
108
- }
109
- };
110
- saveFilters();
111
- }, [includedPatterns]);
112
-
113
- // Toggle pattern in ignored set
114
- const handlePatternToggle = useCallback(pattern => {
115
- setIgnoredPatterns(prev => {
116
- const newSet = new Set(prev);
117
- if (newSet.has(pattern)) {
118
- newSet.delete(pattern);
119
- } else {
120
- newSet.add(pattern);
121
- }
122
- return newSet;
123
- });
124
- }, []);
125
-
126
- // Toggle pattern in included set
127
- const handleIncludedPatternToggle = useCallback(pattern => {
128
- setIncludedPatterns(prev => {
129
- const newSet = new Set(prev);
130
- if (newSet.has(pattern)) {
131
- newSet.delete(pattern);
132
- } else {
133
- newSet.add(pattern);
134
- }
135
- return newSet;
136
- });
137
- }, []);
138
-
139
- // Track modal mode for conditional styling
140
- const [modalMode, setModalMode] = useState("bottomSheet");
141
- const storagePrefix = enableSharedModalDimensions ? devToolsStorageKeys.reactQuery.modal() : devToolsStorageKeys.reactQuery.browserModal();
142
- const handleModeChange = useCallback(mode => {
143
- setModalMode(mode);
144
- }, []);
145
-
146
- // JsModal overlays the footer on the content and only reserves `footerHeight`
147
- // of padding beneath it. QueryBrowserFooter grows by the safe-area inset when
148
- // docked, so the reserve must track that or the list bottom hides behind the
149
- // footer.
150
- const insets = useSafeAreaInsets({
151
- minBottom: 16
152
- });
153
- const footerHeight = modalMode === "floating" ? 56 : 48 + insets.bottom;
154
- if (!visible) return null;
155
- const renderHeaderContent = () => {
156
- // Filter view header with back button
157
- if (showFilterView) {
158
- const tabs = [{
159
- key: "filters",
160
- label: "Filters"
161
- }];
162
- return /*#__PURE__*/_jsxs(ModalHeader, {
163
- children: [/*#__PURE__*/_jsx(ModalHeader.Navigation, {
164
- onBack: () => setShowFilterView(false)
165
- }), /*#__PURE__*/_jsx(ModalHeader.Content, {
166
- title: "",
167
- noMargin: true,
168
- children: /*#__PURE__*/_jsx(TabSelector, {
169
- tabs: tabs,
170
- activeTab: "filters",
171
- testIDPrefix: "buoy-rq-filterview-tab",
172
- onTabChange: () => {}
173
- })
174
- })]
175
- });
176
- }
177
-
178
- // Normal query browser header
179
- return /*#__PURE__*/_jsx(ReactQueryModalHeader, {
180
- selectedQuery: selectedQuery,
181
- activeTab: "queries",
182
- onTabChange: onTabChange,
183
- onBack: () => onQuerySelect(undefined),
184
- searchText: searchText,
185
- onSearchChange: onSearchChange,
186
- onFilterPress: () => setShowFilterView(true),
187
- hasActiveFilters: activeFilter !== null || ignoredPatterns.size > 0 || includedPatterns.size > 0,
188
- onClearCache: handleClearCache
189
- });
190
- };
191
- const footerNode = /*#__PURE__*/_jsx(QueryBrowserFooter, {
192
- activeFilter: activeFilter,
193
- onFilterChange: setActiveFilter,
194
- isFloatingMode: modalMode === "floating"
195
- });
196
- return /*#__PURE__*/_jsx(JsModal, {
197
- visible: visible,
198
- onClose: onClose,
199
- onMinimize: onMinimize,
200
- persistenceKey: storagePrefix,
201
- header: {
202
- customContent: renderHeaderContent(),
203
- showToggleButton: true
204
- },
205
- onModeChange: handleModeChange,
206
- enablePersistence: true,
207
- initialMode: "bottomSheet",
208
- enableGlitchEffects: true
209
- // The query list virtualizes itself (see QueryBrowser) — it must own
210
- // scrolling. The filter view keeps the wrapper.
211
- ,
212
- disableScrollWrapper: !showFilterView,
213
- styles: {},
214
- footer: !showFilterView ? footerNode : undefined,
215
- footerHeight: !showFilterView ? footerHeight : undefined,
216
- children: /*#__PURE__*/_jsx(View, {
217
- style: styles.container,
218
- children: showFilterView ?
219
- /*#__PURE__*/
220
- /* Show filter view */
221
- _jsx(QueryFilterViewV3, {
222
- queries: allQueries,
223
- activeFilter: activeFilter,
224
- onFilterChange: setActiveFilter,
225
- ignoredPatterns: ignoredPatterns,
226
- onPatternToggle: handlePatternToggle,
227
- includedPatterns: includedPatterns,
228
- onIncludedPatternToggle: handleIncludedPatternToggle
229
- }) :
230
- /*#__PURE__*/
231
- /* Show query browser */
232
- _jsx(QueryBrowserMode, {
233
- selectedQuery: selectedQuery,
234
- onQuerySelect: onQuerySelect,
235
- activeFilter: activeFilter,
236
- searchText: searchText,
237
- ignoredPatterns: ignoredPatterns,
238
- includedPatterns: includedPatterns,
239
- onFilterPress: () => setShowFilterView(true)
240
- })
241
- })
242
- });
243
- }
244
- const styles = StyleSheet.create({
245
- container: {
246
- flex: 1,
247
- // Transparent so JsModal's ToolBackground shows through (the modal paints opaque base beneath it).
248
- backgroundColor: "transparent"
249
- }
250
- });
1
+ "use strict";import{useQueryClient as D}from"@tanstack/react-query";import{JsModal as R,useSafeAreaInsets as W,ModalHeader as g,TabSelector as L}from"@buoy-gg/shared-ui";import{useGetQueryByQueryKey as U}from"../../hooks/useSelectedQuery";import{ReactQueryModalHeader as X}from"./ReactQueryModalHeader";import{QueryBrowserMode as Y}from"../QueryBrowserMode";import{QueryBrowserFooter as Z}from"./QueryBrowserFooter";import{QueryFilterViewV3 as $}from"../QueryFilterViewV3";import{useState as l,useCallback as d,useEffect as u}from"react";import{View as ee,StyleSheet as te}from"react-native";import{devToolsStorageKeys as n,persistentStorage as f}from"@buoy-gg/shared-ui";import re from"../../hooks/useAllQueries";import{jsx as o,jsxs as oe}from"react/jsx-runtime";export function QueryBrowserModal({visible:m,selectedQueryKey:b,onQuerySelect:h,onClose:v,onMinimize:M,activeFilter:A,onFilterChange:T,enableSharedModalDimensions:I=false,onTabChange:x,searchText:F="",onSearchChange:B}){const p=D();const w=U(b);const N=re();const k=d(()=>{p.getQueryCache().clear()},[p]);const[H,J]=l(null);const c=A??H;const S=T??J;const[s,y]=l(false);const[a,C]=l(new Set);const[i,P]=l(new Set);u(()=>{const t=async()=>{try{const e=await f.getItem(n.reactQuery.ignoredPatterns());if(e){const r=JSON.parse(e);if(Array.isArray(r)){C(new Set(r))}}}catch(e){console.error("Failed to load ignored patterns:",e)}};t()},[]);u(()=>{const t=async()=>{try{const e=await f.getItem(n.reactQuery.includedPatterns());if(e){const r=JSON.parse(e);if(Array.isArray(r)){P(new Set(r))}}}catch(e){console.error("Failed to load included patterns:",e)}};t()},[]);u(()=>{const t=async()=>{try{const e=Array.from(a);await f.setItem(n.reactQuery.ignoredPatterns(),JSON.stringify(e))}catch(e){console.error("Failed to save ignored patterns:",e)}};t()},[a]);u(()=>{const t=async()=>{try{const e=Array.from(i);await f.setItem(n.reactQuery.includedPatterns(),JSON.stringify(e))}catch(e){console.error("Failed to save included patterns:",e)}};t()},[i]);const V=d(t=>{C(e=>{const r=new Set(e);if(r.has(t)){r.delete(t)}else{r.add(t)}return r})},[]);const j=d(t=>{P(e=>{const r=new Set(e);if(r.has(t)){r.delete(t)}else{r.add(t)}return r})},[]);const[Q,q]=l("bottomSheet");const O=I?n.reactQuery.modal():n.reactQuery.browserModal();const z=d(t=>{q(t)},[]);const K=W({minBottom:16});const E=Q==="floating"?56:48+K.bottom;if(!m)return null;const G=()=>{if(s){const t=[{key:"filters",label:"Filters"}];return oe(g,{children:[o(g.Navigation,{onBack:()=>y(false)}),o(g.Content,{title:"",noMargin:true,children:o(L,{tabs:t,activeTab:"filters",testIDPrefix:"buoy-rq-filterview-tab",onTabChange:()=>{}})})]})}return o(X,{selectedQuery:w,activeTab:"queries",onTabChange:x,onBack:()=>h(void 0),searchText:F,onSearchChange:B,onFilterPress:()=>y(true),hasActiveFilters:c!==null||a.size>0||i.size>0,onClearCache:k})};const _=o(Z,{activeFilter:c,onFilterChange:S,isFloatingMode:Q==="floating"});return o(R,{visible:m,onClose:v,onMinimize:M,persistenceKey:O,header:{customContent:G(),showToggleButton:true},onModeChange:z,enablePersistence:true,initialMode:"bottomSheet",enableGlitchEffects:true,disableScrollWrapper:!s,styles:{},footer:!s?_:void 0,footerHeight:!s?E:void 0,children:o(ee,{style:ne.container,children:s?o($,{queries:N,activeFilter:c,onFilterChange:S,ignoredPatterns:a,onPatternToggle:V,includedPatterns:i,onIncludedPatternToggle:j}):o(Y,{selectedQuery:w,onQuerySelect:h,activeFilter:c,searchText:F,ignoredPatterns:a,includedPatterns:i,onFilterPress:()=>y(true)})})})}const ne=te.create({container:{flex:1,backgroundColor:"transparent"}});
@@ -1,79 +1 @@
1
- "use strict";
2
-
3
- import { QueryBrowserModal } from "./QueryBrowserModal";
4
- import { DataEditorModal } from "./DataEditorModal";
5
- import { MutationBrowserModal } from "./MutationBrowserModal";
6
- import { MutationEditorModal } from "./MutationEditorModal";
7
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
8
- /**
9
- * Refactored ReactQueryModal following composition principles
10
- *
11
- * Applied principles:
12
- * - Decompose by Responsibility: Separated query browser and data editor modals
13
- * - Prefer Composition over Configuration: Uses specialized modal components
14
- * - Extract Reusable Logic: Modal routing logic based on query selection
15
- * - Utilize Render Props: Each modal handles its own rendering responsibility
16
- */
17
- export function ReactQueryModal({
18
- visible,
19
- selectedQueryKey,
20
- selectedMutationId,
21
- onQuerySelect,
22
- onMutationSelect,
23
- onClose,
24
- onMinimize,
25
- activeFilter,
26
- onFilterChange,
27
- activeTab,
28
- onTabChange,
29
- enableSharedModalDimensions = false,
30
- searchText = "",
31
- onSearchChange
32
- }) {
33
- // Check if we have a key/id even if the query/mutation hasn't been found yet
34
- const inDetail = !!selectedQueryKey || !!selectedMutationId;
35
- const isQueryMode = activeTab === "queries";
36
- const isMutationMode = activeTab === "mutations";
37
- const commonProps = {
38
- onClose,
39
- onMinimize,
40
- activeFilter,
41
- onFilterChange,
42
- enableSharedModalDimensions
43
- };
44
- const showQueryBrowserModal = visible && !inDetail && isQueryMode;
45
- const showMutationBrowserModal = visible && !inDetail && isMutationMode;
46
- const showDataEditorModal = visible && inDetail && isQueryMode && !!selectedQueryKey;
47
- const showMutationEditorModal = visible && inDetail && isMutationMode && !!selectedMutationId;
48
- return /*#__PURE__*/_jsxs(_Fragment, {
49
- children: [/*#__PURE__*/_jsx(QueryBrowserModal, {
50
- visible: showQueryBrowserModal,
51
- selectedQueryKey: selectedQueryKey,
52
- onQuerySelect: onQuerySelect,
53
- onTabChange: onTabChange,
54
- searchText: searchText,
55
- onSearchChange: onSearchChange,
56
- ...commonProps
57
- }), /*#__PURE__*/_jsx(MutationBrowserModal, {
58
- visible: showMutationBrowserModal,
59
- selectedMutationId: selectedMutationId,
60
- onMutationSelect: onMutationSelect,
61
- onTabChange: onTabChange,
62
- searchText: searchText,
63
- onSearchChange: onSearchChange,
64
- ...commonProps
65
- }), /*#__PURE__*/_jsx(DataEditorModal, {
66
- visible: showDataEditorModal,
67
- selectedQueryKey: selectedQueryKey,
68
- onQuerySelect: onQuerySelect,
69
- onTabChange: onTabChange,
70
- ...commonProps
71
- }), /*#__PURE__*/_jsx(MutationEditorModal, {
72
- visible: showMutationEditorModal,
73
- selectedMutationId: selectedMutationId,
74
- onMutationSelect: onMutationSelect,
75
- onTabChange: onTabChange,
76
- ...commonProps
77
- })]
78
- });
79
- }
1
+ "use strict";import{QueryBrowserModal as Q}from"./QueryBrowserModal";import{DataEditorModal as y}from"./DataEditorModal";import{MutationBrowserModal as D}from"./MutationBrowserModal";import{MutationEditorModal as S}from"./MutationEditorModal";import{jsx as i,Fragment as _,jsxs as C}from"react/jsx-runtime";export function ReactQueryModal({visible:o,selectedQueryKey:t,selectedMutationId:r,onQuerySelect:e,onMutationSelect:M,onClose:h,onMinimize:w,activeFilter:f,onFilterChange:p,activeTab:m,onTabChange:s,enableSharedModalDimensions:x=false,searchText:c="",onSearchChange:u}){const a=!!t||!!r;const d=m==="queries";const l=m==="mutations";const n={onClose:h,onMinimize:w,activeFilter:f,onFilterChange:p,enableSharedModalDimensions:x};const g=o&&!a&&d;const j=o&&!a&&l;const B=o&&a&&d&&!!t;const E=o&&a&&l&&!!r;return C(_,{children:[i(Q,{visible:g,selectedQueryKey:t,onQuerySelect:e,onTabChange:s,searchText:c,onSearchChange:u,...n}),i(D,{visible:j,selectedMutationId:r,onMutationSelect:M,onTabChange:s,searchText:c,onSearchChange:u,...n}),i(y,{visible:B,selectedQueryKey:t,onQuerySelect:e,onTabChange:s,...n}),i(S,{visible:E,selectedMutationId:r,onMutationSelect:M,onTabChange:s,...n})]})}
@@ -1,190 +1 @@
1
- "use strict";
2
-
3
- import { ModalHeader, TabSelector, Search, Filter, Trash, night } from "@buoy-gg/shared-ui";
4
- import { useState, useRef, useEffect } from "react";
5
- import { View, TouchableOpacity, StyleSheet } from "react-native";
6
- import { WifiToggle } from "../WifiToggle";
7
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
- /**
9
- * Shared header for all React Query modals. Handles tab switching when browsing and presents
10
- * breadcrumbs when a specific query or mutation is selected.
11
- */
12
- export function ReactQueryModalHeader({
13
- selectedQuery,
14
- selectedMutation,
15
- activeTab,
16
- onTabChange,
17
- onBack,
18
- searchText = "",
19
- onSearchChange,
20
- onFilterPress,
21
- hasActiveFilters = false,
22
- onClearCache,
23
- showWifiToggle = false
24
- }) {
25
- const [isSearchActive, setIsSearchActive] = useState(false);
26
- // True while the header's clear ✕ is being pressed. With a mouse, pressing
27
- // the ✕ blurs the input FIRST, and the blur handler closes search — which
28
- // unmounts the ✕ before its own press can fire, so the query was never
29
- // cleared (desktop). Press-in lands before the blur, so the blur handler can
30
- // tell this dismissal apart from a click elsewhere.
31
- const clearPressRef = useRef(false);
32
- const searchInputRef = useRef(null);
33
-
34
- // Auto-focus search input when search becomes active
35
- useEffect(() => {
36
- if (isSearchActive && searchInputRef.current) {
37
- searchInputRef.current.focus();
38
- }
39
- }, [isSearchActive]);
40
- const handleSearchToggle = () => {
41
- setIsSearchActive(!isSearchActive);
42
- if (isSearchActive && onSearchChange) {
43
- onSearchChange("");
44
- }
45
- };
46
- const handleSearch = text => {
47
- if (onSearchChange) {
48
- onSearchChange(text);
49
- }
50
- };
51
- // Simple function to get query display text
52
- const getQueryText = query => {
53
- if (!query?.queryKey) return "Unknown Query";
54
- const keys = Array.isArray(query.queryKey) ? query.queryKey : [query.queryKey];
55
- return keys.filter(k => k != null).map(k => String(k)).join(" › ") || "Unknown Query";
56
- };
57
- const getItemText = item => {
58
- if ("queryKey" in item) {
59
- return getQueryText(item);
60
- } else {
61
- return item.options.mutationKey ? (Array.isArray(item.options.mutationKey) ? item.options.mutationKey : [item.options.mutationKey]).filter(k => k != null).map(k => String(k)).join(" › ") || `Mutation #${item.mutationId}` : `Mutation #${item.mutationId}`;
62
- }
63
- };
64
- const tabs = [{
65
- key: "queries",
66
- label: "Queries"
67
- }, {
68
- key: "mutations",
69
- label: "Mutations"
70
- }];
71
-
72
- // Show details view when an item is selected
73
- if (selectedQuery || selectedMutation) {
74
- return /*#__PURE__*/_jsxs(ModalHeader, {
75
- children: [/*#__PURE__*/_jsx(ModalHeader.Navigation, {
76
- onBack: onBack
77
- }), /*#__PURE__*/_jsx(ModalHeader.Content, {
78
- title: getItemText(selectedQuery ?? selectedMutation),
79
- testID: "buoy-rq-detail-title"
80
- })]
81
- });
82
- }
83
-
84
- // Show browser view with tabs when no item is selected
85
- return /*#__PURE__*/_jsxs(ModalHeader, {
86
- children: [/*#__PURE__*/_jsx(ModalHeader.Content, {
87
- title: "",
88
- noMargin: true,
89
- children: isSearchActive ? /*#__PURE__*/_jsx(ModalHeader.Search, {
90
- value: searchText,
91
- onChangeText: handleSearch,
92
- onCancel: () => {
93
- handleSearch("");
94
- setIsSearchActive(false);
95
- },
96
- onDismiss: () => setIsSearchActive(false),
97
- dismissOnBlur: true,
98
- clearOnlyWhenText: true,
99
- placeholder: "Search query keys...",
100
- accessibilityLabel: "Search queries and mutations",
101
- iconSize: 14
102
- // These handles predate the shared field and are the reverse of
103
- // its convention (container = "-field", input = bare); kept as-is
104
- // so the e2e suite keeps its targets.
105
- ,
106
- testID: "buoy-rq-search",
107
- containerTestID: "buoy-rq-search-field",
108
- clearTestID: "buoy-rq-search-clear",
109
- inputProps: {
110
- "sentry-label": "ignore react query search header"
111
- }
112
- }) : showWifiToggle ? /*#__PURE__*/_jsxs(View, {
113
- style: styles.tabRow,
114
- children: [/*#__PURE__*/_jsx(View, {
115
- style: styles.tabSelectorWrap,
116
- children: /*#__PURE__*/_jsx(TabSelector, {
117
- tabs: tabs,
118
- activeTab: activeTab,
119
- testIDPrefix: "buoy-rq-tab",
120
- onTabChange: tab => onTabChange(tab)
121
- })
122
- }), /*#__PURE__*/_jsx(WifiToggle, {
123
- size: 16,
124
- testID: "buoy-rq-wifi"
125
- })]
126
- }) : /*#__PURE__*/_jsx(TabSelector, {
127
- tabs: tabs,
128
- activeTab: activeTab,
129
- testIDPrefix: "buoy-rq-tab",
130
- onTabChange: tab => onTabChange(tab)
131
- })
132
- }), /*#__PURE__*/_jsxs(ModalHeader.Actions, {
133
- children: [/*#__PURE__*/_jsx(TouchableOpacity, {
134
- "sentry-label": "ignore open search",
135
- testID: "buoy-rq-search-open",
136
- accessibilityRole: "button",
137
- accessibilityLabel: "Search queries and mutations",
138
- onPress: handleSearchToggle,
139
- style: styles.headerActionButton,
140
- children: /*#__PURE__*/_jsx(Search, {
141
- size: 14,
142
- color: night.color.textSecondary
143
- })
144
- }), onFilterPress && /*#__PURE__*/_jsx(TouchableOpacity, {
145
- "sentry-label": "ignore open filter",
146
- testID: "buoy-rq-filters",
147
- accessibilityRole: "button",
148
- accessibilityLabel: hasActiveFilters ? "Filters, active" : "Filters",
149
- onPress: onFilterPress,
150
- style: [styles.headerActionButton, hasActiveFilters && styles.activeFilterButton],
151
- children: /*#__PURE__*/_jsx(Filter, {
152
- size: 14,
153
- color: hasActiveFilters ? night.color.accent : night.color.textSecondary
154
- })
155
- }), onClearCache && /*#__PURE__*/_jsx(TouchableOpacity, {
156
- "sentry-label": "ignore clear cache",
157
- testID: "buoy-rq-clear-cache",
158
- accessibilityRole: "button",
159
- onPress: onClearCache,
160
- style: [styles.headerActionButton, styles.clearCacheButton],
161
- accessibilityLabel: `Clear ${activeTab} cache`,
162
- children: /*#__PURE__*/_jsx(Trash, {
163
- size: 14,
164
- color: night.color.warning
165
- })
166
- })]
167
- })]
168
- });
169
- }
170
- const styles = StyleSheet.create({
171
- tabRow: {
172
- flex: 1,
173
- flexDirection: "row",
174
- alignItems: "center",
175
- gap: 12
176
- },
177
- tabSelectorWrap: {
178
- flex: 1
179
- },
180
- headerActionButton: {
181
- padding: 6,
182
- borderRadius: 4
183
- },
184
- activeFilterButton: {
185
- backgroundColor: night.color.accentSoft
186
- },
187
- clearCacheButton: {
188
- backgroundColor: night.color.warningSoft
189
- }
190
- });
1
+ "use strict";import{ModalHeader as r,TabSelector as I,Search as j,Filter as P,Trash as v,night as n}from"@buoy-gg/shared-ui";import{useState as z,useRef as D,useEffect as C}from"react";import{View as T,TouchableOpacity as f,StyleSheet as M}from"react-native";import{WifiToggle as L}from"../WifiToggle";import{jsx as t,jsxs as c}from"react/jsx-runtime";export function ReactQueryModalHeader({selectedQuery:h,selectedMutation:d,activeTab:l,onTabChange:p,onBack:B,searchText:R="",onSearchChange:s,onFilterPress:g,hasActiveFilters:u=false,onClearCache:S,showWifiToggle:k=false}){const[a,y]=z(false);const Q=D(false);const m=D(null);C(()=>{if(a&&m.current){m.current.focus()}},[a]);const w=()=>{y(!a);if(a&&s){s("")}};const q=e=>{if(s){s(e)}};const A=e=>{if(!e?.queryKey)return"Unknown Query";const i=Array.isArray(e.queryKey)?e.queryKey:[e.queryKey];return i.filter(b=>b!=null).map(b=>String(b)).join(" \u203A ")||"Unknown Query"};const K=e=>{if("queryKey"in e){return A(e)}else{return e.options.mutationKey?(Array.isArray(e.options.mutationKey)?e.options.mutationKey:[e.options.mutationKey]).filter(i=>i!=null).map(i=>String(i)).join(" \u203A ")||`Mutation #${e.mutationId}`:`Mutation #${e.mutationId}`}};const x=[{key:"queries",label:"Queries"},{key:"mutations",label:"Mutations"}];if(h||d){return c(r,{children:[t(r.Navigation,{onBack:B}),t(r.Content,{title:K(h??d),testID:"buoy-rq-detail-title"})]})}return c(r,{children:[t(r.Content,{title:"",noMargin:true,children:a?t(r.Search,{value:R,onChangeText:q,onCancel:()=>{q("");y(false)},onDismiss:()=>y(false),dismissOnBlur:true,clearOnlyWhenText:true,placeholder:"Search query keys...",accessibilityLabel:"Search queries and mutations",iconSize:14,testID:"buoy-rq-search",containerTestID:"buoy-rq-search-field",clearTestID:"buoy-rq-search-clear",inputProps:{"sentry-label":"ignore react query search header"}}):k?c(T,{style:o.tabRow,children:[t(T,{style:o.tabSelectorWrap,children:t(I,{tabs:x,activeTab:l,testIDPrefix:"buoy-rq-tab",onTabChange:e=>p(e)})}),t(L,{size:16,testID:"buoy-rq-wifi"})]}):t(I,{tabs:x,activeTab:l,testIDPrefix:"buoy-rq-tab",onTabChange:e=>p(e)})}),c(r.Actions,{children:[t(f,{"sentry-label":"ignore open search",testID:"buoy-rq-search-open",accessibilityRole:"button",accessibilityLabel:"Search queries and mutations",onPress:w,style:o.headerActionButton,children:t(j,{size:14,color:n.color.textSecondary})}),g&&t(f,{"sentry-label":"ignore open filter",testID:"buoy-rq-filters",accessibilityRole:"button",accessibilityLabel:u?"Filters, active":"Filters",onPress:g,style:[o.headerActionButton,u&&o.activeFilterButton],children:t(P,{size:14,color:u?n.color.accent:n.color.textSecondary})}),S&&t(f,{"sentry-label":"ignore clear cache",testID:"buoy-rq-clear-cache",accessibilityRole:"button",onPress:S,style:[o.headerActionButton,o.clearCacheButton],accessibilityLabel:`Clear ${l} cache`,children:t(v,{size:14,color:n.color.warning})})]})]})}const o=M.create({tabRow:{flex:1,flexDirection:"row",alignItems:"center",gap:12},tabSelectorWrap:{flex:1},headerActionButton:{padding:6,borderRadius:4},activeFilterButton:{backgroundColor:n.color.accentSoft},clearCacheButton:{backgroundColor:n.color.warningSoft}});