@tanstack/react-query-devtools 4.35.7 → 4.39.0

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 (78) hide show
  1. package/package.json +4 -11
  2. package/build/lib/Explorer.esm.js +0 -264
  3. package/build/lib/Explorer.esm.js.map +0 -1
  4. package/build/lib/Explorer.js +0 -302
  5. package/build/lib/Explorer.js.map +0 -1
  6. package/build/lib/Explorer.mjs +0 -264
  7. package/build/lib/Explorer.mjs.map +0 -1
  8. package/build/lib/Logo.esm.js +0 -32
  9. package/build/lib/Logo.esm.js.map +0 -1
  10. package/build/lib/Logo.js +0 -56
  11. package/build/lib/Logo.js.map +0 -1
  12. package/build/lib/Logo.mjs +0 -32
  13. package/build/lib/Logo.mjs.map +0 -1
  14. package/build/lib/_virtual/_rollupPluginBabelHelpers.esm.js +0 -19
  15. package/build/lib/_virtual/_rollupPluginBabelHelpers.esm.js.map +0 -1
  16. package/build/lib/_virtual/_rollupPluginBabelHelpers.js +0 -23
  17. package/build/lib/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
  18. package/build/lib/_virtual/_rollupPluginBabelHelpers.mjs +0 -19
  19. package/build/lib/_virtual/_rollupPluginBabelHelpers.mjs.map +0 -1
  20. package/build/lib/devtools.esm.js +0 -925
  21. package/build/lib/devtools.esm.js.map +0 -1
  22. package/build/lib/devtools.js +0 -949
  23. package/build/lib/devtools.js.map +0 -1
  24. package/build/lib/devtools.mjs +0 -925
  25. package/build/lib/devtools.mjs.map +0 -1
  26. package/build/lib/index.esm.js +0 -12
  27. package/build/lib/index.esm.js.map +0 -1
  28. package/build/lib/index.js +0 -17
  29. package/build/lib/index.js.map +0 -1
  30. package/build/lib/index.mjs +0 -12
  31. package/build/lib/index.mjs.map +0 -1
  32. package/build/lib/index.prod.d.ts +0 -4
  33. package/build/lib/index.prod.esm.js +0 -1604
  34. package/build/lib/index.prod.esm.js.map +0 -1
  35. package/build/lib/index.prod.js +0 -1631
  36. package/build/lib/index.prod.js.map +0 -1
  37. package/build/lib/index.prod.mjs +0 -1604
  38. package/build/lib/index.prod.mjs.map +0 -1
  39. package/build/lib/screenreader.esm.js +0 -17
  40. package/build/lib/screenreader.esm.js.map +0 -1
  41. package/build/lib/screenreader.js +0 -41
  42. package/build/lib/screenreader.js.map +0 -1
  43. package/build/lib/screenreader.mjs +0 -17
  44. package/build/lib/screenreader.mjs.map +0 -1
  45. package/build/lib/styledComponents.esm.js +0 -94
  46. package/build/lib/styledComponents.esm.js.map +0 -1
  47. package/build/lib/styledComponents.js +0 -105
  48. package/build/lib/styledComponents.js.map +0 -1
  49. package/build/lib/styledComponents.mjs +0 -94
  50. package/build/lib/styledComponents.mjs.map +0 -1
  51. package/build/lib/theme.esm.js +0 -33
  52. package/build/lib/theme.esm.js.map +0 -1
  53. package/build/lib/theme.js +0 -59
  54. package/build/lib/theme.js.map +0 -1
  55. package/build/lib/theme.mjs +0 -33
  56. package/build/lib/theme.mjs.map +0 -1
  57. package/build/lib/useLocalStorage.esm.js +0 -47
  58. package/build/lib/useLocalStorage.esm.js.map +0 -1
  59. package/build/lib/useLocalStorage.js +0 -71
  60. package/build/lib/useLocalStorage.js.map +0 -1
  61. package/build/lib/useLocalStorage.mjs +0 -47
  62. package/build/lib/useLocalStorage.mjs.map +0 -1
  63. package/build/lib/useMediaQuery.esm.js +0 -36
  64. package/build/lib/useMediaQuery.esm.js.map +0 -1
  65. package/build/lib/useMediaQuery.js +0 -60
  66. package/build/lib/useMediaQuery.js.map +0 -1
  67. package/build/lib/useMediaQuery.mjs +0 -36
  68. package/build/lib/useMediaQuery.mjs.map +0 -1
  69. package/build/lib/utils.esm.js +0 -186
  70. package/build/lib/utils.esm.js.map +0 -1
  71. package/build/lib/utils.js +0 -226
  72. package/build/lib/utils.js.map +0 -1
  73. package/build/lib/utils.mjs +0 -186
  74. package/build/lib/utils.mjs.map +0 -1
  75. package/build/umd/index.development.js +0 -3531
  76. package/build/umd/index.development.js.map +0 -1
  77. package/build/umd/index.production.js +0 -2
  78. package/build/umd/index.production.js.map +0 -1
@@ -1,925 +0,0 @@
1
- 'use client';
2
- import { extends as _extends } from './_virtual/_rollupPluginBabelHelpers.esm.js';
3
- import * as React from 'react';
4
- import { useMemo } from 'react';
5
- import { useQueryClient, onlineManager, notifyManager } from '@tanstack/react-query';
6
- import { rankItem } from '@tanstack/match-sorter-utils';
7
- import useLocalStorage from './useLocalStorage.esm.js';
8
- import { defaultPanelSize, useIsMounted, getSidedProp, getSidePanelStyle, sortFns, getResizeHandleStyle, displayValue, getQueryStatusColor, getQueryStatusLabel, isVerticalSide, minPanelSize } from './utils.esm.js';
9
- import { Panel, Select, Input, Button, ActiveQueryPanel, Code, QueryKeys, QueryKey } from './styledComponents.esm.js';
10
- import ScreenReader from './screenreader.esm.js';
11
- import { defaultTheme, ThemeProvider } from './theme.esm.js';
12
- import Explorer from './Explorer.esm.js';
13
- import Logo from './Logo.esm.js';
14
- import { useSyncExternalStore } from 'use-sync-external-store/shim/index.js';
15
-
16
- function ReactQueryDevtools({
17
- initialIsOpen,
18
- panelProps = {},
19
- closeButtonProps = {},
20
- toggleButtonProps = {},
21
- position = 'bottom-left',
22
- containerElement: Container = 'aside',
23
- context,
24
- styleNonce,
25
- panelPosition: initialPanelPosition = 'bottom',
26
- errorTypes = []
27
- }) {
28
- const rootRef = React.useRef(null);
29
- const panelRef = React.useRef(null);
30
- const [isOpen, setIsOpen] = useLocalStorage('reactQueryDevtoolsOpen', initialIsOpen);
31
- const [devtoolsHeight, setDevtoolsHeight] = useLocalStorage('reactQueryDevtoolsHeight', defaultPanelSize);
32
- const [devtoolsWidth, setDevtoolsWidth] = useLocalStorage('reactQueryDevtoolsWidth', defaultPanelSize);
33
- const [panelPosition = 'bottom', setPanelPosition] = useLocalStorage('reactQueryDevtoolsPanelPosition', initialPanelPosition);
34
- const [isResolvedOpen, setIsResolvedOpen] = React.useState(false);
35
- const [isResizing, setIsResizing] = React.useState(false);
36
- const isMounted = useIsMounted();
37
-
38
- const handleDragStart = (panelElement, startEvent) => {
39
- if (!panelElement) return;
40
- if (startEvent.button !== 0) return; // Only allow left click for drag
41
-
42
- const isVertical = isVerticalSide(panelPosition);
43
- setIsResizing(true);
44
- const {
45
- height,
46
- width
47
- } = panelElement.getBoundingClientRect();
48
- const startX = startEvent.clientX;
49
- const startY = startEvent.clientY;
50
- let newSize = 0;
51
-
52
- const run = moveEvent => {
53
- // prevent mouse selecting stuff with mouse drag
54
- moveEvent.preventDefault(); // calculate the correct size based on mouse position and current panel position
55
- // hint: it is different formula for the opposite sides
56
-
57
- if (isVertical) {
58
- newSize = width + (panelPosition === 'right' ? startX - moveEvent.clientX : moveEvent.clientX - startX);
59
- setDevtoolsWidth(newSize);
60
- } else {
61
- newSize = height + (panelPosition === 'bottom' ? startY - moveEvent.clientY : moveEvent.clientY - startY);
62
- setDevtoolsHeight(newSize);
63
- }
64
-
65
- if (newSize < minPanelSize) {
66
- setIsOpen(false);
67
- } else {
68
- setIsOpen(true);
69
- }
70
- };
71
-
72
- const unsub = () => {
73
- if (isResizing) {
74
- setIsResizing(false);
75
- }
76
-
77
- document.removeEventListener('mousemove', run, false);
78
- document.removeEventListener('mouseUp', unsub, false);
79
- };
80
-
81
- document.addEventListener('mousemove', run, false);
82
- document.addEventListener('mouseup', unsub, false);
83
- };
84
-
85
- React.useEffect(() => {
86
- setIsResolvedOpen(isOpen != null ? isOpen : false);
87
- }, [isOpen, isResolvedOpen, setIsResolvedOpen]); // Toggle panel visibility before/after transition (depending on direction).
88
- // Prevents focusing in a closed panel.
89
-
90
- React.useEffect(() => {
91
- const ref = panelRef.current;
92
-
93
- if (ref) {
94
- const handlePanelTransitionStart = () => {
95
- if (isResolvedOpen) {
96
- ref.style.visibility = 'visible';
97
- }
98
- };
99
-
100
- const handlePanelTransitionEnd = () => {
101
- if (!isResolvedOpen) {
102
- ref.style.visibility = 'hidden';
103
- }
104
- };
105
-
106
- ref.addEventListener('transitionstart', handlePanelTransitionStart);
107
- ref.addEventListener('transitionend', handlePanelTransitionEnd);
108
- return () => {
109
- ref.removeEventListener('transitionstart', handlePanelTransitionStart);
110
- ref.removeEventListener('transitionend', handlePanelTransitionEnd);
111
- };
112
- }
113
-
114
- return;
115
- }, [isResolvedOpen]);
116
- React.useEffect(() => {
117
- var _rootRef$current;
118
-
119
- if (isResolvedOpen && (_rootRef$current = rootRef.current) != null && _rootRef$current.parentElement) {
120
- const {
121
- parentElement
122
- } = rootRef.current;
123
- const styleProp = getSidedProp('padding', panelPosition);
124
- const isVertical = isVerticalSide(panelPosition);
125
-
126
- const previousPaddings = (({
127
- padding,
128
- paddingTop,
129
- paddingBottom,
130
- paddingLeft,
131
- paddingRight
132
- }) => ({
133
- padding,
134
- paddingTop,
135
- paddingBottom,
136
- paddingLeft,
137
- paddingRight
138
- }))(parentElement.style);
139
-
140
- const run = () => {
141
- // reset the padding
142
- parentElement.style.padding = '0px';
143
- parentElement.style.paddingTop = '0px';
144
- parentElement.style.paddingBottom = '0px';
145
- parentElement.style.paddingLeft = '0px';
146
- parentElement.style.paddingRight = '0px'; // set the new padding based on the new panel position
147
-
148
- parentElement.style[styleProp] = (isVertical ? devtoolsWidth : devtoolsHeight) + "px";
149
- };
150
-
151
- run();
152
-
153
- if (typeof window !== 'undefined') {
154
- window.addEventListener('resize', run);
155
- return () => {
156
- window.removeEventListener('resize', run);
157
- Object.entries(previousPaddings).forEach(([property, previousValue]) => {
158
- parentElement.style[property] = previousValue;
159
- });
160
- };
161
- }
162
- }
163
-
164
- return;
165
- }, [isResolvedOpen, panelPosition, devtoolsHeight, devtoolsWidth]);
166
- const {
167
- style: panelStyle = {},
168
- ...otherPanelProps
169
- } = panelProps;
170
- const {
171
- style: toggleButtonStyle = {},
172
- onClick: onToggleClick,
173
- ...otherToggleButtonProps
174
- } = toggleButtonProps; // get computed style based on panel position
175
-
176
- const style = getSidePanelStyle({
177
- position: panelPosition,
178
- devtoolsTheme: defaultTheme,
179
- isOpen: isResolvedOpen,
180
- height: devtoolsHeight,
181
- width: devtoolsWidth,
182
- isResizing,
183
- panelStyle
184
- }); // Do not render on the server
185
-
186
- if (!isMounted()) return null;
187
- return /*#__PURE__*/React.createElement(Container, {
188
- ref: rootRef,
189
- className: "ReactQueryDevtools",
190
- "aria-label": "React Query Devtools"
191
- }, /*#__PURE__*/React.createElement(ThemeProvider, {
192
- theme: defaultTheme
193
- }, /*#__PURE__*/React.createElement(ReactQueryDevtoolsPanel, _extends({
194
- ref: panelRef,
195
- context: context,
196
- styleNonce: styleNonce,
197
- position: panelPosition,
198
- onPositionChange: setPanelPosition,
199
- showCloseButton: true,
200
- closeButtonProps: closeButtonProps
201
- }, otherPanelProps, {
202
- style: style,
203
- isOpen: isResolvedOpen,
204
- setIsOpen: setIsOpen,
205
- onDragStart: e => handleDragStart(panelRef.current, e),
206
- errorTypes: errorTypes
207
- }))), !isResolvedOpen ? /*#__PURE__*/React.createElement("button", _extends({
208
- type: "button"
209
- }, otherToggleButtonProps, {
210
- "aria-label": "Open React Query Devtools",
211
- "aria-controls": "ReactQueryDevtoolsPanel",
212
- "aria-haspopup": "true",
213
- "aria-expanded": "false",
214
- onClick: e => {
215
- setIsOpen(true);
216
- onToggleClick == null ? void 0 : onToggleClick(e);
217
- },
218
- style: {
219
- background: 'none',
220
- border: 0,
221
- padding: 0,
222
- position: 'fixed',
223
- zIndex: 99999,
224
- display: 'inline-flex',
225
- fontSize: '1.5em',
226
- margin: '.5em',
227
- cursor: 'pointer',
228
- width: 'fit-content',
229
- ...(position === 'top-right' ? {
230
- top: '0',
231
- right: '0'
232
- } : position === 'top-left' ? {
233
- top: '0',
234
- left: '0'
235
- } : position === 'bottom-right' ? {
236
- bottom: '0',
237
- right: '0'
238
- } : {
239
- bottom: '0',
240
- left: '0'
241
- }),
242
- ...toggleButtonStyle
243
- }
244
- }), /*#__PURE__*/React.createElement(Logo, {
245
- "aria-hidden": true
246
- }), /*#__PURE__*/React.createElement(ScreenReader, {
247
- text: "Open React Query Devtools"
248
- })) : null);
249
- }
250
-
251
- const useSubscribeToQueryCache = (queryCache, getSnapshot, skip = false) => {
252
- return useSyncExternalStore(React.useCallback(onStoreChange => {
253
- if (!skip) return queryCache.subscribe(notifyManager.batchCalls(onStoreChange));
254
- return () => {
255
- return;
256
- };
257
- }, [queryCache, skip]), getSnapshot, getSnapshot);
258
- };
259
-
260
- const ReactQueryDevtoolsPanel = /*#__PURE__*/React.forwardRef(function ReactQueryDevtoolsPanel(props, ref) {
261
- const {
262
- isOpen = true,
263
- styleNonce,
264
- setIsOpen,
265
- context,
266
- onDragStart,
267
- onPositionChange,
268
- showCloseButton,
269
- position,
270
- closeButtonProps = {},
271
- errorTypes = [],
272
- ...panelProps
273
- } = props;
274
- const {
275
- onClick: onCloseClick,
276
- ...otherCloseButtonProps
277
- } = closeButtonProps;
278
- const queryClient = useQueryClient({
279
- context
280
- });
281
- const queryCache = queryClient.getQueryCache();
282
- const [sort, setSort] = useLocalStorage('reactQueryDevtoolsSortFn', Object.keys(sortFns)[0]);
283
- const [filter, setFilter] = useLocalStorage('reactQueryDevtoolsFilter', '');
284
- const [baseSort, setBaseSort] = useLocalStorage('reactQueryDevtoolsBaseSort', 1);
285
- const sortFn = React.useMemo(() => sortFns[sort], [sort]);
286
- const queriesCount = useSubscribeToQueryCache(queryCache, () => queryCache.getAll().length, !isOpen);
287
- const [activeQueryHash, setActiveQueryHash] = useLocalStorage('reactQueryDevtoolsActiveQueryHash', '');
288
- const queries = React.useMemo(() => {
289
- const unsortedQueries = queryCache.getAll();
290
-
291
- if (queriesCount === 0) {
292
- return [];
293
- }
294
-
295
- const filtered = filter ? unsortedQueries.filter(item => rankItem(item.queryHash, filter).passed) : [...unsortedQueries];
296
- const sorted = sortFn ? filtered.sort((a, b) => sortFn(a, b) * baseSort) : filtered;
297
- return sorted;
298
- }, [baseSort, sortFn, filter, queriesCount, queryCache]);
299
- const [isMockOffline, setMockOffline] = React.useState(false);
300
- return /*#__PURE__*/React.createElement(ThemeProvider, {
301
- theme: defaultTheme
302
- }, /*#__PURE__*/React.createElement(Panel, _extends({
303
- ref: ref,
304
- className: "ReactQueryDevtoolsPanel",
305
- "aria-label": "React Query Devtools Panel",
306
- id: "ReactQueryDevtoolsPanel"
307
- }, panelProps, {
308
- style: {
309
- height: defaultPanelSize,
310
- position: 'relative',
311
- ...panelProps.style
312
- }
313
- }), /*#__PURE__*/React.createElement("style", {
314
- nonce: styleNonce,
315
- dangerouslySetInnerHTML: {
316
- __html: "\n .ReactQueryDevtoolsPanel * {\n scrollbar-color: " + defaultTheme.backgroundAlt + " " + defaultTheme.gray + ";\n }\n\n .ReactQueryDevtoolsPanel *::-webkit-scrollbar, .ReactQueryDevtoolsPanel scrollbar {\n width: 1em;\n height: 1em;\n }\n\n .ReactQueryDevtoolsPanel *::-webkit-scrollbar-track, .ReactQueryDevtoolsPanel scrollbar-track {\n background: " + defaultTheme.backgroundAlt + ";\n }\n\n .ReactQueryDevtoolsPanel *::-webkit-scrollbar-thumb, .ReactQueryDevtoolsPanel scrollbar-thumb {\n background: " + defaultTheme.gray + ";\n border-radius: .5em;\n border: 3px solid " + defaultTheme.backgroundAlt + ";\n }\n "
317
- }
318
- }), /*#__PURE__*/React.createElement("div", {
319
- style: getResizeHandleStyle(position),
320
- onMouseDown: onDragStart
321
- }), isOpen && /*#__PURE__*/React.createElement("div", {
322
- style: {
323
- flex: '1 1 500px',
324
- minHeight: '40%',
325
- maxHeight: '100%',
326
- overflow: 'auto',
327
- borderRight: "1px solid " + defaultTheme.grayAlt,
328
- display: 'flex',
329
- flexDirection: 'column'
330
- }
331
- }, /*#__PURE__*/React.createElement("div", {
332
- style: {
333
- padding: '.5em',
334
- background: defaultTheme.backgroundAlt,
335
- display: 'flex',
336
- justifyContent: 'space-between',
337
- alignItems: 'center'
338
- }
339
- }, /*#__PURE__*/React.createElement("button", {
340
- type: "button",
341
- "aria-label": "Close React Query Devtools",
342
- "aria-controls": "ReactQueryDevtoolsPanel",
343
- "aria-haspopup": "true",
344
- "aria-expanded": "true",
345
- onClick: () => setIsOpen(false),
346
- style: {
347
- display: 'inline-flex',
348
- background: 'none',
349
- border: 0,
350
- padding: 0,
351
- marginRight: '.5em',
352
- cursor: 'pointer'
353
- }
354
- }, /*#__PURE__*/React.createElement(Logo, {
355
- "aria-hidden": true
356
- }), /*#__PURE__*/React.createElement(ScreenReader, {
357
- text: "Close React Query Devtools"
358
- })), /*#__PURE__*/React.createElement("div", {
359
- style: {
360
- display: 'flex',
361
- flexDirection: 'column'
362
- }
363
- }, /*#__PURE__*/React.createElement("div", {
364
- style: {
365
- display: 'flex',
366
- justifyContent: 'space-between',
367
- alignItems: 'center',
368
- marginBottom: '.5em'
369
- }
370
- }, /*#__PURE__*/React.createElement(QueryStatusCount, {
371
- queryCache: queryCache
372
- }), position && onPositionChange ? /*#__PURE__*/React.createElement(Select, {
373
- "aria-label": "Panel position",
374
- value: position,
375
- style: {
376
- marginInlineStart: '.5em'
377
- },
378
- onChange: e => onPositionChange(e.target.value)
379
- }, /*#__PURE__*/React.createElement("option", {
380
- value: "left"
381
- }, "Left"), /*#__PURE__*/React.createElement("option", {
382
- value: "right"
383
- }, "Right"), /*#__PURE__*/React.createElement("option", {
384
- value: "top"
385
- }, "Top"), /*#__PURE__*/React.createElement("option", {
386
- value: "bottom"
387
- }, "Bottom")) : null), /*#__PURE__*/React.createElement("div", {
388
- style: {
389
- display: 'flex',
390
- alignItems: 'center',
391
- flexWrap: 'wrap',
392
- gap: '0.5em'
393
- }
394
- }, /*#__PURE__*/React.createElement(Input, {
395
- placeholder: "Filter",
396
- "aria-label": "Filter by queryhash",
397
- value: filter != null ? filter : '',
398
- onChange: e => setFilter(e.target.value),
399
- onKeyDown: e => {
400
- if (e.key === 'Escape') setFilter('');
401
- },
402
- style: {
403
- flex: '1',
404
- width: '100%'
405
- }
406
- }), /*#__PURE__*/React.createElement(Select, {
407
- "aria-label": "Sort queries",
408
- value: sort,
409
- onChange: e => setSort(e.target.value),
410
- style: {
411
- flex: '1',
412
- minWidth: 75,
413
- marginRight: '.5em'
414
- }
415
- }, Object.keys(sortFns).map(key => /*#__PURE__*/React.createElement("option", {
416
- key: key,
417
- value: key
418
- }, "Sort by ", key))), /*#__PURE__*/React.createElement(Button, {
419
- type: "button",
420
- onClick: () => setBaseSort(old => old * -1),
421
- style: {
422
- padding: '.3em .4em',
423
- marginRight: '.5em'
424
- }
425
- }, baseSort === 1 ? '⬆ Asc' : '⬇ Desc'), /*#__PURE__*/React.createElement(Button, {
426
- title: "Clear cache",
427
- "aria-label": "Clear cache",
428
- type: "button",
429
- onClick: () => queryCache.clear(),
430
- style: {
431
- padding: '.3em .4em',
432
- marginRight: '.5em'
433
- }
434
- }, "Clear"), /*#__PURE__*/React.createElement(Button, {
435
- type: "button",
436
- onClick: () => {
437
- if (isMockOffline) {
438
- onlineManager.setOnline(undefined);
439
- setMockOffline(false);
440
- window.dispatchEvent(new Event('online'));
441
- } else {
442
- onlineManager.setOnline(false);
443
- setMockOffline(true);
444
- }
445
- },
446
- "aria-label": isMockOffline ? 'Restore offline mock' : 'Mock offline behavior',
447
- title: isMockOffline ? 'Restore offline mock' : 'Mock offline behavior',
448
- style: {
449
- padding: '0',
450
- height: '2em'
451
- }
452
- }, /*#__PURE__*/React.createElement("svg", {
453
- xmlns: "http://www.w3.org/2000/svg",
454
- width: "2em",
455
- height: "2em",
456
- viewBox: "0 0 24 24",
457
- stroke: isMockOffline ? defaultTheme.danger : 'currentColor',
458
- fill: "none"
459
- }, isMockOffline ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("path", {
460
- stroke: "none",
461
- d: "M0 0h24v24H0z",
462
- fill: "none"
463
- }), /*#__PURE__*/React.createElement("line", {
464
- x1: "12",
465
- y1: "18",
466
- x2: "12.01",
467
- y2: "18"
468
- }), /*#__PURE__*/React.createElement("path", {
469
- d: "M9.172 15.172a4 4 0 0 1 5.656 0"
470
- }), /*#__PURE__*/React.createElement("path", {
471
- d: "M6.343 12.343a7.963 7.963 0 0 1 3.864 -2.14m4.163 .155a7.965 7.965 0 0 1 3.287 2"
472
- }), /*#__PURE__*/React.createElement("path", {
473
- d: "M3.515 9.515a12 12 0 0 1 3.544 -2.455m3.101 -.92a12 12 0 0 1 10.325 3.374"
474
- }), /*#__PURE__*/React.createElement("line", {
475
- x1: "3",
476
- y1: "3",
477
- x2: "21",
478
- y2: "21"
479
- })) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("path", {
480
- stroke: "none",
481
- d: "M0 0h24v24H0z",
482
- fill: "none"
483
- }), /*#__PURE__*/React.createElement("line", {
484
- x1: "12",
485
- y1: "18",
486
- x2: "12.01",
487
- y2: "18"
488
- }), /*#__PURE__*/React.createElement("path", {
489
- d: "M9.172 15.172a4 4 0 0 1 5.656 0"
490
- }), /*#__PURE__*/React.createElement("path", {
491
- d: "M6.343 12.343a8 8 0 0 1 11.314 0"
492
- }), /*#__PURE__*/React.createElement("path", {
493
- d: "M3.515 9.515c4.686 -4.687 12.284 -4.687 17 0"
494
- }))), /*#__PURE__*/React.createElement(ScreenReader, {
495
- text: isMockOffline ? 'Restore offline mock' : 'Mock offline behavior'
496
- }))))), /*#__PURE__*/React.createElement("div", {
497
- style: {
498
- overflowY: 'auto',
499
- flex: '1'
500
- }
501
- }, queries.map(query => {
502
- return /*#__PURE__*/React.createElement(QueryRow, {
503
- queryKey: query.queryKey,
504
- activeQueryHash: activeQueryHash,
505
- setActiveQueryHash: setActiveQueryHash,
506
- key: query.queryHash,
507
- queryCache: queryCache
508
- });
509
- }))), activeQueryHash && isOpen ? /*#__PURE__*/React.createElement(ActiveQuery, {
510
- activeQueryHash: activeQueryHash,
511
- queryCache: queryCache,
512
- queryClient: queryClient,
513
- errorTypes: errorTypes
514
- }) : null, showCloseButton ? /*#__PURE__*/React.createElement(Button, _extends({
515
- type: "button",
516
- "aria-controls": "ReactQueryDevtoolsPanel",
517
- "aria-haspopup": "true",
518
- "aria-expanded": "true"
519
- }, otherCloseButtonProps, {
520
- style: {
521
- position: 'absolute',
522
- zIndex: 99999,
523
- margin: '.5em',
524
- bottom: 0,
525
- left: 0,
526
- ...otherCloseButtonProps.style
527
- },
528
- onClick: e => {
529
- setIsOpen(false);
530
- onCloseClick == null ? void 0 : onCloseClick(e);
531
- }
532
- }), "Close") : null));
533
- });
534
-
535
- const ActiveQuery = ({
536
- queryCache,
537
- activeQueryHash,
538
- queryClient,
539
- errorTypes
540
- }) => {
541
- var _useSubscribeToQueryC, _useSubscribeToQueryC2;
542
-
543
- const activeQuery = useSubscribeToQueryCache(queryCache, () => queryCache.getAll().find(query => query.queryHash === activeQueryHash));
544
- const activeQueryState = useSubscribeToQueryCache(queryCache, () => {
545
- var _queryCache$getAll$fi;
546
-
547
- return (_queryCache$getAll$fi = queryCache.getAll().find(query => query.queryHash === activeQueryHash)) == null ? void 0 : _queryCache$getAll$fi.state;
548
- });
549
- const isStale = (_useSubscribeToQueryC = useSubscribeToQueryCache(queryCache, () => {
550
- var _queryCache$getAll$fi2;
551
-
552
- return (_queryCache$getAll$fi2 = queryCache.getAll().find(query => query.queryHash === activeQueryHash)) == null ? void 0 : _queryCache$getAll$fi2.isStale();
553
- })) != null ? _useSubscribeToQueryC : false;
554
- const observerCount = (_useSubscribeToQueryC2 = useSubscribeToQueryCache(queryCache, () => {
555
- var _queryCache$getAll$fi3;
556
-
557
- return (_queryCache$getAll$fi3 = queryCache.getAll().find(query => query.queryHash === activeQueryHash)) == null ? void 0 : _queryCache$getAll$fi3.getObserversCount();
558
- })) != null ? _useSubscribeToQueryC2 : 0;
559
-
560
- const handleRefetch = () => {
561
- const promise = activeQuery == null ? void 0 : activeQuery.fetch();
562
- promise == null ? void 0 : promise.catch(noop);
563
- };
564
-
565
- const currentErrorTypeName = useMemo(() => {
566
- if (activeQuery && activeQueryState != null && activeQueryState.error) {
567
- const errorType = errorTypes.find(type => {
568
- var _activeQueryState$err;
569
-
570
- return type.initializer(activeQuery).toString() === ((_activeQueryState$err = activeQueryState.error) == null ? void 0 : _activeQueryState$err.toString());
571
- });
572
- return errorType == null ? void 0 : errorType.name;
573
- }
574
-
575
- return undefined;
576
- }, [activeQuery, activeQueryState == null ? void 0 : activeQueryState.error, errorTypes]);
577
-
578
- if (!activeQuery || !activeQueryState) {
579
- return null;
580
- }
581
-
582
- const triggerError = errorType => {
583
- var _errorType$initialize;
584
-
585
- const error = (_errorType$initialize = errorType == null ? void 0 : errorType.initializer(activeQuery)) != null ? _errorType$initialize : new Error('Unknown error from devtools');
586
- const __previousQueryOptions = activeQuery.options;
587
- activeQuery.setState({
588
- status: 'error',
589
- error,
590
- fetchMeta: { ...activeQuery.state.fetchMeta,
591
- __previousQueryOptions
592
- }
593
- });
594
- };
595
-
596
- const restoreQueryAfterLoadingOrError = () => {
597
- activeQuery.fetch(activeQuery.state.fetchMeta.__previousQueryOptions, {
598
- // Make sure this fetch will cancel the previous one
599
- cancelRefetch: true
600
- });
601
- };
602
-
603
- return /*#__PURE__*/React.createElement(ActiveQueryPanel, null, /*#__PURE__*/React.createElement("div", {
604
- style: {
605
- padding: '.5em',
606
- background: defaultTheme.backgroundAlt,
607
- position: 'sticky',
608
- top: 0,
609
- zIndex: 1
610
- }
611
- }, "Query Details"), /*#__PURE__*/React.createElement("div", {
612
- style: {
613
- padding: '.5em'
614
- }
615
- }, /*#__PURE__*/React.createElement("div", {
616
- style: {
617
- marginBottom: '.5em',
618
- display: 'flex',
619
- alignItems: 'flex-start',
620
- justifyContent: 'space-between'
621
- }
622
- }, /*#__PURE__*/React.createElement(Code, {
623
- style: {
624
- lineHeight: '1.8em'
625
- }
626
- }, /*#__PURE__*/React.createElement("pre", {
627
- style: {
628
- margin: 0,
629
- padding: 0,
630
- overflow: 'auto'
631
- }
632
- }, displayValue(activeQuery.queryKey, true))), /*#__PURE__*/React.createElement("span", {
633
- style: {
634
- padding: '0.3em .6em',
635
- borderRadius: '0.4em',
636
- fontWeight: 'bold',
637
- textShadow: '0 2px 10px black',
638
- background: getQueryStatusColor({
639
- queryState: activeQueryState,
640
- isStale: isStale,
641
- observerCount: observerCount,
642
- theme: defaultTheme
643
- }),
644
- flexShrink: 0
645
- }
646
- }, getQueryStatusLabel(activeQuery))), /*#__PURE__*/React.createElement("div", {
647
- style: {
648
- marginBottom: '.5em',
649
- display: 'flex',
650
- alignItems: 'center',
651
- justifyContent: 'space-between'
652
- }
653
- }, "Observers: ", /*#__PURE__*/React.createElement(Code, null, observerCount)), /*#__PURE__*/React.createElement("div", {
654
- style: {
655
- display: 'flex',
656
- alignItems: 'center',
657
- justifyContent: 'space-between'
658
- }
659
- }, "Last Updated:", ' ', /*#__PURE__*/React.createElement(Code, null, new Date(activeQueryState.dataUpdatedAt).toLocaleTimeString()))), /*#__PURE__*/React.createElement("div", {
660
- style: {
661
- background: defaultTheme.backgroundAlt,
662
- padding: '.5em',
663
- position: 'sticky',
664
- top: 0,
665
- zIndex: 1
666
- }
667
- }, "Actions"), /*#__PURE__*/React.createElement("div", {
668
- style: {
669
- padding: '0.5em',
670
- display: 'flex',
671
- flexWrap: 'wrap',
672
- gap: '0.5em',
673
- alignItems: 'flex-end'
674
- }
675
- }, /*#__PURE__*/React.createElement(Button, {
676
- type: "button",
677
- onClick: handleRefetch,
678
- disabled: activeQueryState.fetchStatus === 'fetching',
679
- style: {
680
- background: defaultTheme.active
681
- }
682
- }, "Refetch"), ' ', /*#__PURE__*/React.createElement(Button, {
683
- type: "button",
684
- onClick: () => queryClient.invalidateQueries(activeQuery),
685
- style: {
686
- background: defaultTheme.warning,
687
- color: defaultTheme.inputTextColor
688
- }
689
- }, "Invalidate"), ' ', /*#__PURE__*/React.createElement(Button, {
690
- type: "button",
691
- onClick: () => queryClient.resetQueries(activeQuery),
692
- style: {
693
- background: defaultTheme.gray
694
- }
695
- }, "Reset"), ' ', /*#__PURE__*/React.createElement(Button, {
696
- type: "button",
697
- onClick: () => queryClient.removeQueries(activeQuery),
698
- style: {
699
- background: defaultTheme.danger
700
- }
701
- }, "Remove"), ' ', /*#__PURE__*/React.createElement(Button, {
702
- type: "button",
703
- onClick: () => {
704
- var _activeQuery$state$fe;
705
-
706
- // Return early if the query is already restoring
707
- if (activeQuery.state.fetchStatus === 'fetching' && typeof ((_activeQuery$state$fe = activeQuery.state.fetchMeta) == null ? void 0 : _activeQuery$state$fe.__previousQueryOptions) === 'undefined') {
708
- return;
709
- }
710
-
711
- if (activeQuery.state.data === undefined) {
712
- restoreQueryAfterLoadingOrError();
713
- } else {
714
- const __previousQueryOptions = activeQuery.options; // Trigger a fetch in order to trigger suspense as well.
715
-
716
- activeQuery.fetch({ ...__previousQueryOptions,
717
- queryFn: () => {
718
- return new Promise(() => {// Never resolve
719
- });
720
- },
721
- cacheTime: -1
722
- });
723
- activeQuery.setState({
724
- data: undefined,
725
- status: 'loading',
726
- fetchMeta: { ...activeQuery.state.fetchMeta,
727
- __previousQueryOptions
728
- }
729
- });
730
- }
731
- },
732
- style: {
733
- background: defaultTheme.paused
734
- }
735
- }, activeQuery.state.status === 'loading' ? 'Restore' : 'Trigger', ' ', "loading"), ' ', errorTypes.length === 0 || activeQuery.state.status === 'error' ? /*#__PURE__*/React.createElement(Button, {
736
- type: "button",
737
- onClick: () => {
738
- if (!activeQuery.state.error) {
739
- triggerError();
740
- } else {
741
- queryClient.resetQueries(activeQuery);
742
- }
743
- },
744
- style: {
745
- background: defaultTheme.danger
746
- }
747
- }, activeQuery.state.status === 'error' ? 'Restore' : 'Trigger', " error") : /*#__PURE__*/React.createElement("label", null, "Trigger error:", /*#__PURE__*/React.createElement(Select, {
748
- value: currentErrorTypeName != null ? currentErrorTypeName : '',
749
- style: {
750
- marginInlineStart: '.5em'
751
- },
752
- onChange: e => {
753
- const errorType = errorTypes.find(t => t.name === e.target.value);
754
- triggerError(errorType);
755
- }
756
- }, /*#__PURE__*/React.createElement("option", {
757
- key: "",
758
- value: ""
759
- }), errorTypes.map(errorType => /*#__PURE__*/React.createElement("option", {
760
- key: errorType.name,
761
- value: errorType.name
762
- }, errorType.name))))), /*#__PURE__*/React.createElement("div", {
763
- style: {
764
- background: defaultTheme.backgroundAlt,
765
- padding: '.5em',
766
- position: 'sticky',
767
- top: 0,
768
- zIndex: 1
769
- }
770
- }, "Data Explorer"), /*#__PURE__*/React.createElement("div", {
771
- style: {
772
- padding: '.5em'
773
- }
774
- }, /*#__PURE__*/React.createElement(Explorer, {
775
- label: "Data",
776
- value: activeQueryState.data,
777
- defaultExpanded: {},
778
- copyable: true
779
- })), /*#__PURE__*/React.createElement("div", {
780
- style: {
781
- background: defaultTheme.backgroundAlt,
782
- padding: '.5em',
783
- position: 'sticky',
784
- top: 0,
785
- zIndex: 1
786
- }
787
- }, "Query Explorer"), /*#__PURE__*/React.createElement("div", {
788
- style: {
789
- padding: '.5em'
790
- }
791
- }, /*#__PURE__*/React.createElement(Explorer, {
792
- label: "Query",
793
- value: activeQuery,
794
- defaultExpanded: {
795
- queryKey: true
796
- }
797
- })));
798
- };
799
-
800
- const QueryStatusCount = ({
801
- queryCache
802
- }) => {
803
- const hasFresh = useSubscribeToQueryCache(queryCache, () => queryCache.getAll().filter(q => getQueryStatusLabel(q) === 'fresh').length);
804
- const hasFetching = useSubscribeToQueryCache(queryCache, () => queryCache.getAll().filter(q => getQueryStatusLabel(q) === 'fetching').length);
805
- const hasPaused = useSubscribeToQueryCache(queryCache, () => queryCache.getAll().filter(q => getQueryStatusLabel(q) === 'paused').length);
806
- const hasStale = useSubscribeToQueryCache(queryCache, () => queryCache.getAll().filter(q => getQueryStatusLabel(q) === 'stale').length);
807
- const hasInactive = useSubscribeToQueryCache(queryCache, () => queryCache.getAll().filter(q => getQueryStatusLabel(q) === 'inactive').length);
808
- return /*#__PURE__*/React.createElement(QueryKeys, null, /*#__PURE__*/React.createElement(QueryKey, {
809
- style: {
810
- background: defaultTheme.success,
811
- opacity: hasFresh ? 1 : 0.3
812
- }
813
- }, "fresh ", /*#__PURE__*/React.createElement(Code, null, "(", hasFresh, ")")), ' ', /*#__PURE__*/React.createElement(QueryKey, {
814
- style: {
815
- background: defaultTheme.active,
816
- opacity: hasFetching ? 1 : 0.3
817
- }
818
- }, "fetching ", /*#__PURE__*/React.createElement(Code, null, "(", hasFetching, ")")), ' ', /*#__PURE__*/React.createElement(QueryKey, {
819
- style: {
820
- background: defaultTheme.paused,
821
- opacity: hasPaused ? 1 : 0.3
822
- }
823
- }, "paused ", /*#__PURE__*/React.createElement(Code, null, "(", hasPaused, ")")), ' ', /*#__PURE__*/React.createElement(QueryKey, {
824
- style: {
825
- background: defaultTheme.warning,
826
- color: 'black',
827
- textShadow: '0',
828
- opacity: hasStale ? 1 : 0.3
829
- }
830
- }, "stale ", /*#__PURE__*/React.createElement(Code, null, "(", hasStale, ")")), ' ', /*#__PURE__*/React.createElement(QueryKey, {
831
- style: {
832
- background: defaultTheme.gray,
833
- opacity: hasInactive ? 1 : 0.3
834
- }
835
- }, "inactive ", /*#__PURE__*/React.createElement(Code, null, "(", hasInactive, ")")));
836
- };
837
-
838
- const QueryRow = /*#__PURE__*/React.memo(({
839
- queryKey,
840
- setActiveQueryHash,
841
- activeQueryHash,
842
- queryCache
843
- }) => {
844
- var _useSubscribeToQueryC3, _useSubscribeToQueryC4, _useSubscribeToQueryC5, _useSubscribeToQueryC6;
845
-
846
- const queryHash = (_useSubscribeToQueryC3 = useSubscribeToQueryCache(queryCache, () => {
847
- var _queryCache$find;
848
-
849
- return (_queryCache$find = queryCache.find(queryKey)) == null ? void 0 : _queryCache$find.queryHash;
850
- })) != null ? _useSubscribeToQueryC3 : '';
851
- const queryState = useSubscribeToQueryCache(queryCache, () => {
852
- var _queryCache$find2;
853
-
854
- return (_queryCache$find2 = queryCache.find(queryKey)) == null ? void 0 : _queryCache$find2.state;
855
- });
856
- const isStale = (_useSubscribeToQueryC4 = useSubscribeToQueryCache(queryCache, () => {
857
- var _queryCache$find3;
858
-
859
- return (_queryCache$find3 = queryCache.find(queryKey)) == null ? void 0 : _queryCache$find3.isStale();
860
- })) != null ? _useSubscribeToQueryC4 : false;
861
- const isDisabled = (_useSubscribeToQueryC5 = useSubscribeToQueryCache(queryCache, () => {
862
- var _queryCache$find4;
863
-
864
- return (_queryCache$find4 = queryCache.find(queryKey)) == null ? void 0 : _queryCache$find4.isDisabled();
865
- })) != null ? _useSubscribeToQueryC5 : false;
866
- const observerCount = (_useSubscribeToQueryC6 = useSubscribeToQueryCache(queryCache, () => {
867
- var _queryCache$find5;
868
-
869
- return (_queryCache$find5 = queryCache.find(queryKey)) == null ? void 0 : _queryCache$find5.getObserversCount();
870
- })) != null ? _useSubscribeToQueryC6 : 0;
871
-
872
- if (!queryState) {
873
- return null;
874
- }
875
-
876
- return /*#__PURE__*/React.createElement("div", {
877
- role: "button",
878
- "aria-label": "Open query details for " + queryHash,
879
- onClick: () => setActiveQueryHash(activeQueryHash === queryHash ? '' : queryHash),
880
- style: {
881
- display: 'flex',
882
- borderBottom: "solid 1px " + defaultTheme.grayAlt,
883
- cursor: 'pointer',
884
- background: queryHash === activeQueryHash ? 'rgba(255,255,255,.1)' : undefined
885
- }
886
- }, /*#__PURE__*/React.createElement("div", {
887
- style: {
888
- flex: '0 0 auto',
889
- width: '2em',
890
- height: '2em',
891
- background: getQueryStatusColor({
892
- queryState,
893
- isStale,
894
- observerCount,
895
- theme: defaultTheme
896
- }),
897
- display: 'flex',
898
- alignItems: 'center',
899
- justifyContent: 'center',
900
- fontWeight: 'bold',
901
- textShadow: isStale ? '0' : '0 0 10px black',
902
- color: isStale ? 'black' : 'white'
903
- }
904
- }, observerCount), isDisabled ? /*#__PURE__*/React.createElement("div", {
905
- style: {
906
- flex: '0 0 auto',
907
- height: '2em',
908
- background: defaultTheme.gray,
909
- display: 'flex',
910
- alignItems: 'center',
911
- fontWeight: 'bold',
912
- padding: '0 0.5em'
913
- }
914
- }, "disabled") : null, /*#__PURE__*/React.createElement(Code, {
915
- style: {
916
- padding: '.5em'
917
- }
918
- }, "" + queryHash));
919
- });
920
- QueryRow.displayName = 'QueryRow'; // eslint-disable-next-line @typescript-eslint/no-empty-function
921
-
922
- function noop() {}
923
-
924
- export { ReactQueryDevtools, ReactQueryDevtoolsPanel };
925
- //# sourceMappingURL=devtools.esm.js.map