@buoy-gg/react-query 7.0.40 → 7.0.42
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.
- package/README.md +11 -69
- package/lib/commonjs/checkPeer.js +1 -0
- package/lib/commonjs/checkPeer.web.js +1 -0
- package/lib/commonjs/index.js +1 -736
- package/lib/commonjs/preset.js +1 -243
- package/lib/commonjs/react-query/components/DataEditorMode.js +1 -317
- package/lib/commonjs/react-query/components/FilterStatusBadge.js +1 -55
- package/lib/commonjs/react-query/components/MutationBrowserMode.js +1 -52
- package/lib/commonjs/react-query/components/MutationEditorMode.js +1 -276
- package/lib/commonjs/react-query/components/QueryBrowserMode.js +1 -99
- package/lib/commonjs/react-query/components/QueryDebugInfo.js +1 -107
- package/lib/commonjs/react-query/components/QueryFilterViewV3.js +1 -224
- package/lib/commonjs/react-query/components/QuerySelector.js +1 -209
- package/lib/commonjs/react-query/components/ReactQueryDevToolsModal.js +1 -91
- package/lib/commonjs/react-query/components/ReactQuerySection.js +1 -47
- package/lib/commonjs/react-query/components/ReactQueryTracker.js +1 -38
- package/lib/commonjs/react-query/components/WifiToggle.js +1 -51
- package/lib/commonjs/react-query/components/modals/DataEditorModal.js +1 -103
- package/lib/commonjs/react-query/components/modals/MutationBrowserFooter.js +1 -61
- package/lib/commonjs/react-query/components/modals/MutationBrowserModal.js +1 -164
- package/lib/commonjs/react-query/components/modals/MutationEditorModal.js +1 -106
- package/lib/commonjs/react-query/components/modals/QueryBrowserFooter.js +1 -56
- package/lib/commonjs/react-query/components/modals/QueryBrowserModal.js +1 -254
- package/lib/commonjs/react-query/components/modals/ReactQueryModal.js +1 -83
- package/lib/commonjs/react-query/components/modals/ReactQueryModalHeader.js +1 -194
- package/lib/commonjs/react-query/components/modals/SwipeIndicator.js +1 -204
- package/lib/commonjs/react-query/components/query-browser/ActionButton.js +1 -100
- package/lib/commonjs/react-query/components/query-browser/ClearCacheButton.js +1 -53
- package/lib/commonjs/react-query/components/query-browser/Explorer.js +1 -75
- package/lib/commonjs/react-query/components/query-browser/MutationButton.js +1 -190
- package/lib/commonjs/react-query/components/query-browser/MutationDetails.js +1 -124
- package/lib/commonjs/react-query/components/query-browser/MutationDetailsChips.js +1 -68
- package/lib/commonjs/react-query/components/query-browser/MutationInformation.js +1 -118
- package/lib/commonjs/react-query/components/query-browser/MutationStatusCount.js +1 -84
- package/lib/commonjs/react-query/components/query-browser/MutationsList.js +1 -220
- package/lib/commonjs/react-query/components/query-browser/NetworkToggleButton.js +1 -54
- package/lib/commonjs/react-query/components/query-browser/QueryActions.js +1 -124
- package/lib/commonjs/react-query/components/query-browser/QueryBrowser.js +1 -181
- package/lib/commonjs/react-query/components/query-browser/QueryDetails.js +1 -141
- package/lib/commonjs/react-query/components/query-browser/QueryDetailsChip.js +1 -78
- package/lib/commonjs/react-query/components/query-browser/QueryInformation.js +1 -95
- package/lib/commonjs/react-query/components/query-browser/QueryRow.js +1 -96
- package/lib/commonjs/react-query/components/query-browser/QueryStatus.js +1 -167
- package/lib/commonjs/react-query/components/query-browser/QueryStatusCount.js +1 -100
- package/lib/commonjs/react-query/components/query-browser/StorageStatusCount.js +1 -61
- package/lib/commonjs/react-query/components/query-browser/index.js +1 -170
- package/lib/commonjs/react-query/components/query-browser/svgs.js +1 -72
- package/lib/commonjs/react-query/hooks/useActionButtons.js +1 -51
- package/lib/commonjs/react-query/hooks/useAllMutations.js +1 -85
- package/lib/commonjs/react-query/hooks/useAllQueries.js +1 -117
- package/lib/commonjs/react-query/hooks/useModalManager.js +1 -178
- package/lib/commonjs/react-query/hooks/useModalPersistence.js +1 -71
- package/lib/commonjs/react-query/hooks/useMutationActionButtons.js +1 -21
- package/lib/commonjs/react-query/hooks/useQueryStatusCounts.js +1 -114
- package/lib/commonjs/react-query/hooks/useReactQueryState.js +1 -24
- package/lib/commonjs/react-query/hooks/useSelectedMutation.js +1 -30
- package/lib/commonjs/react-query/hooks/useSelectedQuery.js +1 -96
- package/lib/commonjs/react-query/hooks/useStorageQueryCounts.js +1 -28
- package/lib/commonjs/react-query/hooks/useWifiState.js +1 -67
- package/lib/commonjs/react-query/stores/reactQueryEventStore.js +1 -302
- package/lib/commonjs/react-query/sync/dehydrate.js +1 -166
- package/lib/commonjs/react-query/sync/reactQuerySyncAdapter.js +1 -593
- package/lib/commonjs/react-query/sync/snapshotProvider.js +1 -289
- package/lib/commonjs/react-query/sync/useReactQuerySyncAdapter.js +1 -34
- package/lib/commonjs/react-query/types/types.js +1 -14
- package/lib/commonjs/react-query/utils/actions/deleteItem.js +1 -23
- package/lib/commonjs/react-query/utils/actions/emitDevToolsEvent.js +1 -40
- package/lib/commonjs/react-query/utils/actions/invalidate.js +1 -15
- package/lib/commonjs/react-query/utils/actions/refetch.js +1 -17
- package/lib/commonjs/react-query/utils/actions/remove.js +1 -15
- package/lib/commonjs/react-query/utils/actions/reset.js +1 -17
- package/lib/commonjs/react-query/utils/actions/triggerError.js +1 -33
- package/lib/commonjs/react-query/utils/actions/triggerLoading.js +1 -54
- package/lib/commonjs/react-query/utils/deleteNestedDataByPath.js +1 -56
- package/lib/commonjs/react-query/utils/getQueryStatusColor.js +1 -16
- package/lib/commonjs/react-query/utils/getQueryStatusLabel.js +1 -23
- package/lib/commonjs/react-query/utils/getStorageQueryCounts.js +1 -35
- package/lib/commonjs/react-query/utils/modalStorageOperations.js +1 -127
- package/lib/commonjs/react-query/utils/storageQueryUtils.js +1 -149
- package/lib/commonjs/react-query/utils/testIDs.js +1 -61
- package/lib/commonjs/react-query/utils/updateNestedDataByPath.js +1 -61
- package/lib/module/checkPeer.js +1 -0
- package/lib/module/checkPeer.web.js +1 -0
- package/lib/module/index.js +1 -135
- package/lib/module/preset.js +1 -239
- package/lib/module/react-query/components/DataEditorMode.js +1 -311
- package/lib/module/react-query/components/FilterStatusBadge.js +1 -51
- package/lib/module/react-query/components/MutationBrowserMode.js +1 -47
- package/lib/module/react-query/components/MutationEditorMode.js +1 -270
- package/lib/module/react-query/components/QueryBrowserMode.js +1 -94
- package/lib/module/react-query/components/QueryDebugInfo.js +1 -104
- package/lib/module/react-query/components/QueryFilterViewV3.js +1 -221
- package/lib/module/react-query/components/QuerySelector.js +1 -205
- package/lib/module/react-query/components/ReactQueryDevToolsModal.js +1 -87
- package/lib/module/react-query/components/ReactQuerySection.js +1 -43
- package/lib/module/react-query/components/ReactQueryTracker.js +1 -35
- package/lib/module/react-query/components/WifiToggle.js +1 -48
- package/lib/module/react-query/components/modals/DataEditorModal.js +1 -99
- package/lib/module/react-query/components/modals/MutationBrowserFooter.js +1 -56
- package/lib/module/react-query/components/modals/MutationBrowserModal.js +1 -161
- package/lib/module/react-query/components/modals/MutationEditorModal.js +1 -102
- package/lib/module/react-query/components/modals/QueryBrowserFooter.js +1 -51
- package/lib/module/react-query/components/modals/QueryBrowserModal.js +1 -250
- package/lib/module/react-query/components/modals/ReactQueryModal.js +1 -79
- package/lib/module/react-query/components/modals/ReactQueryModalHeader.js +1 -190
- package/lib/module/react-query/components/modals/SwipeIndicator.js +1 -201
- package/lib/module/react-query/components/query-browser/ActionButton.js +1 -96
- package/lib/module/react-query/components/query-browser/ClearCacheButton.js +1 -49
- package/lib/module/react-query/components/query-browser/Explorer.js +1 -70
- package/lib/module/react-query/components/query-browser/MutationButton.js +1 -186
- package/lib/module/react-query/components/query-browser/MutationDetails.js +1 -119
- package/lib/module/react-query/components/query-browser/MutationDetailsChips.js +1 -64
- package/lib/module/react-query/components/query-browser/MutationInformation.js +1 -113
- package/lib/module/react-query/components/query-browser/MutationStatusCount.js +1 -79
- package/lib/module/react-query/components/query-browser/MutationsList.js +1 -215
- package/lib/module/react-query/components/query-browser/NetworkToggleButton.js +1 -50
- package/lib/module/react-query/components/query-browser/QueryActions.js +1 -119
- package/lib/module/react-query/components/query-browser/QueryBrowser.js +1 -176
- package/lib/module/react-query/components/query-browser/QueryDetails.js +1 -136
- package/lib/module/react-query/components/query-browser/QueryDetailsChip.js +1 -74
- package/lib/module/react-query/components/query-browser/QueryInformation.js +1 -90
- package/lib/module/react-query/components/query-browser/QueryRow.js +1 -92
- package/lib/module/react-query/components/query-browser/QueryStatus.js +1 -163
- package/lib/module/react-query/components/query-browser/QueryStatusCount.js +1 -95
- package/lib/module/react-query/components/query-browser/StorageStatusCount.js +1 -56
- package/lib/module/react-query/components/query-browser/index.js +1 -22
- package/lib/module/react-query/components/query-browser/svgs.js +1 -64
- package/lib/module/react-query/hooks/useActionButtons.js +1 -46
- package/lib/module/react-query/hooks/useAllMutations.js +1 -82
- package/lib/module/react-query/hooks/useAllQueries.js +1 -114
- package/lib/module/react-query/hooks/useModalManager.js +1 -175
- package/lib/module/react-query/hooks/useModalPersistence.js +1 -67
- package/lib/module/react-query/hooks/useMutationActionButtons.js +1 -17
- package/lib/module/react-query/hooks/useQueryStatusCounts.js +1 -112
- package/lib/module/react-query/hooks/useReactQueryState.js +1 -20
- package/lib/module/react-query/hooks/useSelectedMutation.js +1 -27
- package/lib/module/react-query/hooks/useSelectedQuery.js +1 -92
- package/lib/module/react-query/hooks/useStorageQueryCounts.js +1 -25
- package/lib/module/react-query/hooks/useWifiState.js +1 -64
- package/lib/module/react-query/stores/reactQueryEventStore.js +1 -293
- package/lib/module/react-query/sync/dehydrate.js +1 -156
- package/lib/module/react-query/sync/reactQuerySyncAdapter.js +1 -589
- package/lib/module/react-query/sync/snapshotProvider.js +1 -284
- package/lib/module/react-query/sync/useReactQuerySyncAdapter.js +1 -31
- package/lib/module/react-query/types/types.js +1 -10
- package/lib/module/react-query/utils/actions/deleteItem.js +1 -19
- package/lib/module/react-query/utils/actions/emitDevToolsEvent.js +1 -36
- package/lib/module/react-query/utils/actions/invalidate.js +1 -11
- package/lib/module/react-query/utils/actions/refetch.js +1 -13
- package/lib/module/react-query/utils/actions/remove.js +1 -11
- package/lib/module/react-query/utils/actions/reset.js +1 -13
- package/lib/module/react-query/utils/actions/triggerError.js +1 -29
- package/lib/module/react-query/utils/actions/triggerLoading.js +1 -50
- package/lib/module/react-query/utils/deleteNestedDataByPath.js +1 -51
- package/lib/module/react-query/utils/getQueryStatusColor.js +1 -12
- package/lib/module/react-query/utils/getQueryStatusLabel.js +1 -19
- package/lib/module/react-query/utils/getStorageQueryCounts.js +1 -31
- package/lib/module/react-query/utils/modalStorageOperations.js +1 -117
- package/lib/module/react-query/utils/storageQueryUtils.js +1 -140
- package/lib/module/react-query/utils/testIDs.js +1 -54
- package/lib/module/react-query/utils/updateNestedDataByPath.js +1 -56
- package/lib/typescript/checkPeer.d.ts +1 -0
- package/lib/typescript/checkPeer.web.d.ts +2 -0
- package/lib/typescript/index.d.ts +1 -0
- package/lib/web/index.mjs +11 -0
- package/package.json +36 -12
- package/lib/typescript/index.d.ts.map +0 -1
- package/lib/typescript/preset.d.ts.map +0 -1
- package/lib/typescript/react-query/components/DataEditorMode.d.ts.map +0 -1
- package/lib/typescript/react-query/components/FilterStatusBadge.d.ts.map +0 -1
- package/lib/typescript/react-query/components/MutationBrowserMode.d.ts.map +0 -1
- package/lib/typescript/react-query/components/MutationEditorMode.d.ts.map +0 -1
- package/lib/typescript/react-query/components/QueryBrowserMode.d.ts.map +0 -1
- package/lib/typescript/react-query/components/QueryDebugInfo.d.ts.map +0 -1
- package/lib/typescript/react-query/components/QueryFilterViewV3.d.ts.map +0 -1
- package/lib/typescript/react-query/components/QuerySelector.d.ts.map +0 -1
- package/lib/typescript/react-query/components/ReactQueryDevToolsModal.d.ts.map +0 -1
- package/lib/typescript/react-query/components/ReactQuerySection.d.ts.map +0 -1
- package/lib/typescript/react-query/components/ReactQueryTracker.d.ts.map +0 -1
- package/lib/typescript/react-query/components/WifiToggle.d.ts.map +0 -1
- package/lib/typescript/react-query/components/modals/DataEditorModal.d.ts.map +0 -1
- package/lib/typescript/react-query/components/modals/MutationBrowserFooter.d.ts.map +0 -1
- package/lib/typescript/react-query/components/modals/MutationBrowserModal.d.ts.map +0 -1
- package/lib/typescript/react-query/components/modals/MutationEditorModal.d.ts.map +0 -1
- package/lib/typescript/react-query/components/modals/QueryBrowserFooter.d.ts.map +0 -1
- package/lib/typescript/react-query/components/modals/QueryBrowserModal.d.ts.map +0 -1
- package/lib/typescript/react-query/components/modals/ReactQueryModal.d.ts.map +0 -1
- package/lib/typescript/react-query/components/modals/ReactQueryModalHeader.d.ts.map +0 -1
- package/lib/typescript/react-query/components/modals/SwipeIndicator.d.ts.map +0 -1
- package/lib/typescript/react-query/components/query-browser/ActionButton.d.ts.map +0 -1
- package/lib/typescript/react-query/components/query-browser/ClearCacheButton.d.ts.map +0 -1
- package/lib/typescript/react-query/components/query-browser/Explorer.d.ts.map +0 -1
- package/lib/typescript/react-query/components/query-browser/MutationButton.d.ts.map +0 -1
- package/lib/typescript/react-query/components/query-browser/MutationDetails.d.ts.map +0 -1
- package/lib/typescript/react-query/components/query-browser/MutationDetailsChips.d.ts.map +0 -1
- package/lib/typescript/react-query/components/query-browser/MutationInformation.d.ts.map +0 -1
- package/lib/typescript/react-query/components/query-browser/MutationStatusCount.d.ts.map +0 -1
- package/lib/typescript/react-query/components/query-browser/MutationsList.d.ts.map +0 -1
- package/lib/typescript/react-query/components/query-browser/NetworkToggleButton.d.ts.map +0 -1
- package/lib/typescript/react-query/components/query-browser/QueryActions.d.ts.map +0 -1
- package/lib/typescript/react-query/components/query-browser/QueryBrowser.d.ts.map +0 -1
- package/lib/typescript/react-query/components/query-browser/QueryDetails.d.ts.map +0 -1
- package/lib/typescript/react-query/components/query-browser/QueryDetailsChip.d.ts.map +0 -1
- package/lib/typescript/react-query/components/query-browser/QueryInformation.d.ts.map +0 -1
- package/lib/typescript/react-query/components/query-browser/QueryRow.d.ts.map +0 -1
- package/lib/typescript/react-query/components/query-browser/QueryStatus.d.ts.map +0 -1
- package/lib/typescript/react-query/components/query-browser/QueryStatusCount.d.ts.map +0 -1
- package/lib/typescript/react-query/components/query-browser/StorageStatusCount.d.ts.map +0 -1
- package/lib/typescript/react-query/components/query-browser/index.d.ts.map +0 -1
- package/lib/typescript/react-query/components/query-browser/svgs.d.ts.map +0 -1
- package/lib/typescript/react-query/hooks/useActionButtons.d.ts.map +0 -1
- package/lib/typescript/react-query/hooks/useAllMutations.d.ts.map +0 -1
- package/lib/typescript/react-query/hooks/useAllQueries.d.ts.map +0 -1
- package/lib/typescript/react-query/hooks/useModalManager.d.ts.map +0 -1
- package/lib/typescript/react-query/hooks/useModalPersistence.d.ts.map +0 -1
- package/lib/typescript/react-query/hooks/useMutationActionButtons.d.ts.map +0 -1
- package/lib/typescript/react-query/hooks/useQueryStatusCounts.d.ts.map +0 -1
- package/lib/typescript/react-query/hooks/useReactQueryState.d.ts.map +0 -1
- package/lib/typescript/react-query/hooks/useSelectedMutation.d.ts.map +0 -1
- package/lib/typescript/react-query/hooks/useSelectedQuery.d.ts.map +0 -1
- package/lib/typescript/react-query/hooks/useStorageQueryCounts.d.ts.map +0 -1
- package/lib/typescript/react-query/hooks/useWifiState.d.ts.map +0 -1
- package/lib/typescript/react-query/stores/reactQueryEventStore.d.ts.map +0 -1
- package/lib/typescript/react-query/sync/dehydrate.d.ts.map +0 -1
- package/lib/typescript/react-query/sync/reactQuerySyncAdapter.d.ts.map +0 -1
- package/lib/typescript/react-query/sync/snapshotProvider.d.ts.map +0 -1
- package/lib/typescript/react-query/sync/useReactQuerySyncAdapter.d.ts.map +0 -1
- package/lib/typescript/react-query/types/types.d.ts.map +0 -1
- package/lib/typescript/react-query/utils/actions/deleteItem.d.ts.map +0 -1
- package/lib/typescript/react-query/utils/actions/emitDevToolsEvent.d.ts.map +0 -1
- package/lib/typescript/react-query/utils/actions/invalidate.d.ts.map +0 -1
- package/lib/typescript/react-query/utils/actions/refetch.d.ts.map +0 -1
- package/lib/typescript/react-query/utils/actions/remove.d.ts.map +0 -1
- package/lib/typescript/react-query/utils/actions/reset.d.ts.map +0 -1
- package/lib/typescript/react-query/utils/actions/triggerError.d.ts.map +0 -1
- package/lib/typescript/react-query/utils/actions/triggerLoading.d.ts.map +0 -1
- package/lib/typescript/react-query/utils/deleteNestedDataByPath.d.ts.map +0 -1
- package/lib/typescript/react-query/utils/getQueryStatusColor.d.ts.map +0 -1
- package/lib/typescript/react-query/utils/getQueryStatusLabel.d.ts.map +0 -1
- package/lib/typescript/react-query/utils/getStorageQueryCounts.d.ts.map +0 -1
- package/lib/typescript/react-query/utils/modalStorageOperations.d.ts.map +0 -1
- package/lib/typescript/react-query/utils/storageQueryUtils.d.ts.map +0 -1
- package/lib/typescript/react-query/utils/testIDs.d.ts.map +0 -1
- 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}});
|