@tanstack/react-query-devtools 5.0.0-alpha.5 → 5.0.0-alpha.6

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.
@@ -40,7 +40,8 @@ function ReactQueryDevtools({
40
40
  containerElement: Container = 'aside',
41
41
  queryClient,
42
42
  styleNonce,
43
- panelPosition: initialPanelPosition = 'bottom'
43
+ panelPosition: initialPanelPosition = 'bottom',
44
+ errorTypes = []
44
45
  }) {
45
46
  const rootRef = React__namespace.useRef(null);
46
47
  const panelRef = React__namespace.useRef(null);
@@ -93,7 +94,7 @@ function ReactQueryDevtools({
93
94
  document.addEventListener('mouseup', unsub, false);
94
95
  };
95
96
  React__namespace.useEffect(() => {
96
- setIsResolvedOpen(isOpen ?? false);
97
+ setIsResolvedOpen(isOpen != null ? isOpen : false);
97
98
  }, [isOpen, isResolvedOpen, setIsResolvedOpen]);
98
99
 
99
100
  // Toggle panel visibility before/after transition (depending on direction).
@@ -121,7 +122,8 @@ function ReactQueryDevtools({
121
122
  return;
122
123
  }, [isResolvedOpen]);
123
124
  React__namespace.useEffect(() => {
124
- if (isResolvedOpen && rootRef.current?.parentElement) {
125
+ var _rootRef$current;
126
+ if (isResolvedOpen && (_rootRef$current = rootRef.current) != null && _rootRef$current.parentElement) {
125
127
  const {
126
128
  parentElement
127
129
  } = rootRef.current;
@@ -205,7 +207,8 @@ function ReactQueryDevtools({
205
207
  style: style,
206
208
  isOpen: isResolvedOpen,
207
209
  setIsOpen: setIsOpen,
208
- onDragStart: e => handleDragStart(panelRef.current, e)
210
+ onDragStart: e => handleDragStart(panelRef.current, e),
211
+ errorTypes: errorTypes
209
212
  }))), !isResolvedOpen ? /*#__PURE__*/React__namespace.createElement("button", _rollupPluginBabelHelpers.extends({
210
213
  type: "button"
211
214
  }, otherToggleButtonProps, {
@@ -215,7 +218,7 @@ function ReactQueryDevtools({
215
218
  "aria-expanded": "false",
216
219
  onClick: e => {
217
220
  setIsOpen(true);
218
- onToggleClick?.(e);
221
+ onToggleClick == null ? void 0 : onToggleClick(e);
219
222
  },
220
223
  style: {
221
224
  background: 'none',
@@ -268,6 +271,7 @@ const ReactQueryDevtoolsPanel = /*#__PURE__*/React__namespace.forwardRef(functio
268
271
  showCloseButton,
269
272
  position,
270
273
  closeButtonProps = {},
274
+ errorTypes = [],
271
275
  ...panelProps
272
276
  } = props;
273
277
  const {
@@ -401,19 +405,20 @@ const ReactQueryDevtoolsPanel = /*#__PURE__*/React__namespace.forwardRef(functio
401
405
  }, "Bottom")) : null), /*#__PURE__*/React__namespace.createElement("div", {
402
406
  style: {
403
407
  display: 'flex',
404
- alignItems: 'center'
408
+ alignItems: 'center',
409
+ flexWrap: 'wrap',
410
+ gap: '0.5em'
405
411
  }
406
412
  }, /*#__PURE__*/React__namespace.createElement(styledComponents.Input, {
407
413
  placeholder: "Filter",
408
414
  "aria-label": "Filter by queryhash",
409
- value: filter ?? '',
415
+ value: filter != null ? filter : '',
410
416
  onChange: e => setFilter(e.target.value),
411
417
  onKeyDown: e => {
412
418
  if (e.key === 'Escape') setFilter('');
413
419
  },
414
420
  style: {
415
421
  flex: '1',
416
- marginRight: '.5em',
417
422
  width: '100%'
418
423
  }
419
424
  }), /*#__PURE__*/React__namespace.createElement(styledComponents.Select, {
@@ -513,7 +518,8 @@ const ReactQueryDevtoolsPanel = /*#__PURE__*/React__namespace.forwardRef(functio
513
518
  }))), activeQueryHash && isOpen ? /*#__PURE__*/React__namespace.createElement(ActiveQuery, {
514
519
  activeQueryHash: activeQueryHash,
515
520
  queryCache: queryCache,
516
- queryClient: client
521
+ queryClient: client,
522
+ errorTypes: errorTypes
517
523
  }) : null, showCloseButton ? /*#__PURE__*/React__namespace.createElement(styledComponents.Button, _rollupPluginBabelHelpers.extends({
518
524
  type: "button",
519
525
  "aria-controls": "ReactQueryDevtoolsPanel",
@@ -530,26 +536,67 @@ const ReactQueryDevtoolsPanel = /*#__PURE__*/React__namespace.forwardRef(functio
530
536
  },
531
537
  onClick: e => {
532
538
  setIsOpen(false);
533
- onCloseClick?.(e);
539
+ onCloseClick == null ? void 0 : onCloseClick(e);
534
540
  }
535
541
  }), "Close") : null));
536
542
  });
537
543
  const ActiveQuery = ({
538
544
  queryCache,
539
545
  activeQueryHash,
540
- queryClient
546
+ queryClient,
547
+ errorTypes
541
548
  }) => {
549
+ var _useSubscribeToQueryC, _useSubscribeToQueryC2;
542
550
  const activeQuery = useSubscribeToQueryCache(queryCache, () => queryCache.getAll().find(query => query.queryHash === activeQueryHash));
543
- const activeQueryState = useSubscribeToQueryCache(queryCache, () => queryCache.getAll().find(query => query.queryHash === activeQueryHash)?.state);
544
- const isStale = useSubscribeToQueryCache(queryCache, () => queryCache.getAll().find(query => query.queryHash === activeQueryHash)?.isStale()) ?? false;
545
- const observerCount = useSubscribeToQueryCache(queryCache, () => queryCache.getAll().find(query => query.queryHash === activeQueryHash)?.getObserversCount()) ?? 0;
551
+ const activeQueryState = useSubscribeToQueryCache(queryCache, () => {
552
+ var _queryCache$getAll$fi;
553
+ return (_queryCache$getAll$fi = queryCache.getAll().find(query => query.queryHash === activeQueryHash)) == null ? void 0 : _queryCache$getAll$fi.state;
554
+ });
555
+ const isStale = (_useSubscribeToQueryC = useSubscribeToQueryCache(queryCache, () => {
556
+ var _queryCache$getAll$fi2;
557
+ return (_queryCache$getAll$fi2 = queryCache.getAll().find(query => query.queryHash === activeQueryHash)) == null ? void 0 : _queryCache$getAll$fi2.isStale();
558
+ })) != null ? _useSubscribeToQueryC : false;
559
+ const observerCount = (_useSubscribeToQueryC2 = useSubscribeToQueryCache(queryCache, () => {
560
+ var _queryCache$getAll$fi3;
561
+ return (_queryCache$getAll$fi3 = queryCache.getAll().find(query => query.queryHash === activeQueryHash)) == null ? void 0 : _queryCache$getAll$fi3.getObserversCount();
562
+ })) != null ? _useSubscribeToQueryC2 : 0;
546
563
  const handleRefetch = () => {
547
- const promise = activeQuery?.fetch();
548
- promise?.catch(noop);
564
+ const promise = activeQuery == null ? void 0 : activeQuery.fetch();
565
+ promise == null ? void 0 : promise.catch(noop);
549
566
  };
567
+ const currentErrorTypeName = React.useMemo(() => {
568
+ if (activeQuery && activeQueryState != null && activeQueryState.error) {
569
+ const errorType = errorTypes.find(type => {
570
+ var _activeQueryState$err;
571
+ return type.initializer(activeQuery).toString() === ((_activeQueryState$err = activeQueryState.error) == null ? void 0 : _activeQueryState$err.toString());
572
+ });
573
+ return errorType == null ? void 0 : errorType.name;
574
+ }
575
+ return undefined;
576
+ }, [activeQuery, activeQueryState == null ? void 0 : activeQueryState.error, errorTypes]);
550
577
  if (!activeQuery || !activeQueryState) {
551
578
  return null;
552
579
  }
580
+ const triggerError = errorType => {
581
+ var _errorType$initialize;
582
+ const error = (_errorType$initialize = errorType == null ? void 0 : errorType.initializer(activeQuery)) != null ? _errorType$initialize : new Error('Unknown error from devtools');
583
+ const __previousQueryOptions = activeQuery.options;
584
+ activeQuery.setState({
585
+ status: 'error',
586
+ error,
587
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
588
+ fetchMeta: {
589
+ ...activeQuery.state.fetchMeta,
590
+ __previousQueryOptions
591
+ }
592
+ });
593
+ };
594
+ const restoreQueryAfterLoadingOrError = () => {
595
+ activeQuery.fetch(activeQuery.state.fetchMeta.__previousQueryOptions, {
596
+ // Make sure this fetch will cancel the previous one
597
+ cancelRefetch: true
598
+ });
599
+ };
553
600
  return /*#__PURE__*/React__namespace.createElement(styledComponents.ActiveQueryPanel, null, /*#__PURE__*/React__namespace.createElement("div", {
554
601
  style: {
555
602
  padding: '.5em',
@@ -616,7 +663,11 @@ const ActiveQuery = ({
616
663
  }
617
664
  }, "Actions"), /*#__PURE__*/React__namespace.createElement("div", {
618
665
  style: {
619
- padding: '0.5em'
666
+ padding: '0.5em',
667
+ display: 'flex',
668
+ flexWrap: 'wrap',
669
+ gap: '0.5em',
670
+ alignItems: 'flex-end'
620
671
  }
621
672
  }, /*#__PURE__*/React__namespace.createElement(styledComponents.Button, {
622
673
  type: "button",
@@ -644,7 +695,65 @@ const ActiveQuery = ({
644
695
  style: {
645
696
  background: theme.defaultTheme.danger
646
697
  }
647
- }, "Remove")), /*#__PURE__*/React__namespace.createElement("div", {
698
+ }, "Remove"), ' ', /*#__PURE__*/React__namespace.createElement(styledComponents.Button, {
699
+ type: "button",
700
+ onClick: () => {
701
+ if (activeQuery.state.data === undefined) {
702
+ restoreQueryAfterLoadingOrError();
703
+ } else {
704
+ const __previousQueryOptions = activeQuery.options;
705
+ // Trigger a fetch in order to trigger suspense as well.
706
+ activeQuery.fetch({
707
+ ...__previousQueryOptions,
708
+ queryFn: () => {
709
+ return new Promise(() => {
710
+ // Never resolve
711
+ });
712
+ },
713
+ gcTime: -1
714
+ });
715
+ activeQuery.setState({
716
+ data: undefined,
717
+ status: 'pending',
718
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
719
+ fetchMeta: {
720
+ ...activeQuery.state.fetchMeta,
721
+ __previousQueryOptions
722
+ }
723
+ });
724
+ }
725
+ },
726
+ style: {
727
+ background: theme.defaultTheme.paused
728
+ }
729
+ }, activeQuery.state.status === 'pending' ? 'Restore' : 'Trigger', ' ', "loading"), ' ', errorTypes.length === 0 || activeQuery.state.status === 'error' ? /*#__PURE__*/React__namespace.createElement(styledComponents.Button, {
730
+ type: "button",
731
+ onClick: () => {
732
+ if (!activeQuery.state.error) {
733
+ triggerError();
734
+ } else {
735
+ queryClient.resetQueries(activeQuery);
736
+ }
737
+ },
738
+ style: {
739
+ background: theme.defaultTheme.danger
740
+ }
741
+ }, activeQuery.state.status === 'error' ? 'Restore' : 'Trigger', " error") : /*#__PURE__*/React__namespace.createElement("label", null, "Trigger error:", /*#__PURE__*/React__namespace.createElement(styledComponents.Select, {
742
+ value: currentErrorTypeName != null ? currentErrorTypeName : '',
743
+ style: {
744
+ marginInlineStart: '.5em'
745
+ },
746
+ onChange: e => {
747
+ const errorType = errorTypes.find(t => t.name === e.target.value);
748
+ triggerError(errorType);
749
+ }
750
+ }, /*#__PURE__*/React__namespace.createElement("option", {
751
+ key: "",
752
+ value: ""
753
+ }), errorTypes.map(errorType => /*#__PURE__*/React__namespace.createElement("option", {
754
+ key: errorType.name,
755
+ value: errorType.name
756
+ }, errorType.name))))), /*#__PURE__*/React__namespace.createElement("div", {
648
757
  style: {
649
758
  background: theme.defaultTheme.backgroundAlt,
650
759
  padding: '.5em',
@@ -724,21 +833,37 @@ const QueryRow = /*#__PURE__*/React__namespace.memo(({
724
833
  activeQueryHash,
725
834
  queryCache
726
835
  }) => {
727
- const queryHash = useSubscribeToQueryCache(queryCache, () => queryCache.find({
728
- queryKey
729
- })?.queryHash) ?? '';
730
- const queryState = useSubscribeToQueryCache(queryCache, () => queryCache.find({
731
- queryKey
732
- })?.state);
733
- const isStale = useSubscribeToQueryCache(queryCache, () => queryCache.find({
734
- queryKey
735
- })?.isStale()) ?? false;
736
- const isDisabled = useSubscribeToQueryCache(queryCache, () => queryCache.find({
737
- queryKey
738
- })?.isDisabled()) ?? false;
739
- const observerCount = useSubscribeToQueryCache(queryCache, () => queryCache.find({
740
- queryKey
741
- })?.getObserversCount()) ?? 0;
836
+ var _useSubscribeToQueryC3, _useSubscribeToQueryC4, _useSubscribeToQueryC5, _useSubscribeToQueryC6;
837
+ const queryHash = (_useSubscribeToQueryC3 = useSubscribeToQueryCache(queryCache, () => {
838
+ var _queryCache$find;
839
+ return (_queryCache$find = queryCache.find({
840
+ queryKey
841
+ })) == null ? void 0 : _queryCache$find.queryHash;
842
+ })) != null ? _useSubscribeToQueryC3 : '';
843
+ const queryState = useSubscribeToQueryCache(queryCache, () => {
844
+ var _queryCache$find2;
845
+ return (_queryCache$find2 = queryCache.find({
846
+ queryKey
847
+ })) == null ? void 0 : _queryCache$find2.state;
848
+ });
849
+ const isStale = (_useSubscribeToQueryC4 = useSubscribeToQueryCache(queryCache, () => {
850
+ var _queryCache$find3;
851
+ return (_queryCache$find3 = queryCache.find({
852
+ queryKey
853
+ })) == null ? void 0 : _queryCache$find3.isStale();
854
+ })) != null ? _useSubscribeToQueryC4 : false;
855
+ const isDisabled = (_useSubscribeToQueryC5 = useSubscribeToQueryCache(queryCache, () => {
856
+ var _queryCache$find4;
857
+ return (_queryCache$find4 = queryCache.find({
858
+ queryKey
859
+ })) == null ? void 0 : _queryCache$find4.isDisabled();
860
+ })) != null ? _useSubscribeToQueryC5 : false;
861
+ const observerCount = (_useSubscribeToQueryC6 = useSubscribeToQueryCache(queryCache, () => {
862
+ var _queryCache$find5;
863
+ return (_queryCache$find5 = queryCache.find({
864
+ queryKey
865
+ })) == null ? void 0 : _queryCache$find5.getObserversCount();
866
+ })) != null ? _useSubscribeToQueryC6 : 0;
742
867
  if (!queryState) {
743
868
  return null;
744
869
  }