@tanstack/react-query-devtools 5.0.0-alpha.5 → 5.0.0-alpha.7
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/build/lib/Explorer.esm.js +1 -1
- package/build/lib/Explorer.esm.js.map +1 -1
- package/build/lib/Explorer.js +1 -1
- package/build/lib/Explorer.js.map +1 -1
- package/build/lib/devtools.d.ts +20 -2
- package/build/lib/devtools.esm.js +159 -33
- package/build/lib/devtools.esm.js.map +1 -1
- package/build/lib/devtools.js +158 -33
- package/build/lib/devtools.js.map +1 -1
- package/build/lib/devtools.mjs +103 -8
- package/build/lib/devtools.mjs.map +1 -1
- package/build/lib/index.prod.esm.js +163 -35
- package/build/lib/index.prod.esm.js.map +1 -1
- package/build/lib/index.prod.js +162 -35
- package/build/lib/index.prod.js.map +1 -1
- package/build/lib/index.prod.mjs +106 -9
- package/build/lib/index.prod.mjs.map +1 -1
- package/build/lib/styledComponents.esm.js +3 -1
- package/build/lib/styledComponents.esm.js.map +1 -1
- package/build/lib/styledComponents.js +3 -1
- package/build/lib/styledComponents.js.map +1 -1
- package/build/lib/styledComponents.mjs +3 -1
- package/build/lib/styledComponents.mjs.map +1 -1
- package/build/umd/index.development.js +105 -9
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +3 -3
- package/src/__tests__/devtools.test.tsx +148 -0
- package/src/devtools.tsx +149 -2
- package/src/styledComponents.ts +3 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
+
import { useMemo } from 'react';
|
|
2
3
|
import { useQueryClient, onlineManager, notifyManager } from '@tanstack/react-query';
|
|
3
4
|
import { rankItem } from '@tanstack/match-sorter-utils';
|
|
4
5
|
import SuperJSON from 'superjson';
|
|
@@ -330,7 +331,9 @@ const Button = styled('button', (props, theme) => ({
|
|
|
330
331
|
cursor: 'pointer'
|
|
331
332
|
}));
|
|
332
333
|
const QueryKeys = styled('span', {
|
|
333
|
-
display: '
|
|
334
|
+
display: 'flex',
|
|
335
|
+
flexWrap: 'wrap',
|
|
336
|
+
gap: '0.5em',
|
|
334
337
|
fontSize: '0.9em'
|
|
335
338
|
});
|
|
336
339
|
const QueryKey = styled('span', {
|
|
@@ -593,7 +596,7 @@ function Explorer({
|
|
|
593
596
|
const makeProperty = sub => {
|
|
594
597
|
const subDefaultExpanded = defaultExpanded === true ? {
|
|
595
598
|
[sub.label]: true
|
|
596
|
-
} : defaultExpanded
|
|
599
|
+
} : defaultExpanded == null ? void 0 : defaultExpanded[sub.label];
|
|
597
600
|
return {
|
|
598
601
|
...sub,
|
|
599
602
|
defaultExpanded: subDefaultExpanded
|
|
@@ -674,7 +677,8 @@ function ReactQueryDevtools$1({
|
|
|
674
677
|
containerElement: Container = 'aside',
|
|
675
678
|
queryClient,
|
|
676
679
|
styleNonce,
|
|
677
|
-
panelPosition: initialPanelPosition = 'bottom'
|
|
680
|
+
panelPosition: initialPanelPosition = 'bottom',
|
|
681
|
+
errorTypes = []
|
|
678
682
|
}) {
|
|
679
683
|
const rootRef = React.useRef(null);
|
|
680
684
|
const panelRef = React.useRef(null);
|
|
@@ -727,7 +731,7 @@ function ReactQueryDevtools$1({
|
|
|
727
731
|
document.addEventListener('mouseup', unsub, false);
|
|
728
732
|
};
|
|
729
733
|
React.useEffect(() => {
|
|
730
|
-
setIsResolvedOpen(isOpen
|
|
734
|
+
setIsResolvedOpen(isOpen != null ? isOpen : false);
|
|
731
735
|
}, [isOpen, isResolvedOpen, setIsResolvedOpen]);
|
|
732
736
|
|
|
733
737
|
// Toggle panel visibility before/after transition (depending on direction).
|
|
@@ -755,7 +759,8 @@ function ReactQueryDevtools$1({
|
|
|
755
759
|
return;
|
|
756
760
|
}, [isResolvedOpen]);
|
|
757
761
|
React.useEffect(() => {
|
|
758
|
-
|
|
762
|
+
var _rootRef$current;
|
|
763
|
+
if (isResolvedOpen && (_rootRef$current = rootRef.current) != null && _rootRef$current.parentElement) {
|
|
759
764
|
const {
|
|
760
765
|
parentElement
|
|
761
766
|
} = rootRef.current;
|
|
@@ -839,7 +844,8 @@ function ReactQueryDevtools$1({
|
|
|
839
844
|
style: style,
|
|
840
845
|
isOpen: isResolvedOpen,
|
|
841
846
|
setIsOpen: setIsOpen,
|
|
842
|
-
onDragStart: e => handleDragStart(panelRef.current, e)
|
|
847
|
+
onDragStart: e => handleDragStart(panelRef.current, e),
|
|
848
|
+
errorTypes: errorTypes
|
|
843
849
|
}))), !isResolvedOpen ? /*#__PURE__*/React.createElement("button", _extends({
|
|
844
850
|
type: "button"
|
|
845
851
|
}, otherToggleButtonProps, {
|
|
@@ -849,7 +855,7 @@ function ReactQueryDevtools$1({
|
|
|
849
855
|
"aria-expanded": "false",
|
|
850
856
|
onClick: e => {
|
|
851
857
|
setIsOpen(true);
|
|
852
|
-
onToggleClick
|
|
858
|
+
onToggleClick == null ? void 0 : onToggleClick(e);
|
|
853
859
|
},
|
|
854
860
|
style: {
|
|
855
861
|
background: 'none',
|
|
@@ -902,6 +908,7 @@ const ReactQueryDevtoolsPanel$1 = /*#__PURE__*/React.forwardRef(function ReactQu
|
|
|
902
908
|
showCloseButton,
|
|
903
909
|
position,
|
|
904
910
|
closeButtonProps = {},
|
|
911
|
+
errorTypes = [],
|
|
905
912
|
...panelProps
|
|
906
913
|
} = props;
|
|
907
914
|
const {
|
|
@@ -1035,19 +1042,20 @@ const ReactQueryDevtoolsPanel$1 = /*#__PURE__*/React.forwardRef(function ReactQu
|
|
|
1035
1042
|
}, "Bottom")) : null), /*#__PURE__*/React.createElement("div", {
|
|
1036
1043
|
style: {
|
|
1037
1044
|
display: 'flex',
|
|
1038
|
-
alignItems: 'center'
|
|
1045
|
+
alignItems: 'center',
|
|
1046
|
+
flexWrap: 'wrap',
|
|
1047
|
+
gap: '0.5em'
|
|
1039
1048
|
}
|
|
1040
1049
|
}, /*#__PURE__*/React.createElement(Input, {
|
|
1041
1050
|
placeholder: "Filter",
|
|
1042
1051
|
"aria-label": "Filter by queryhash",
|
|
1043
|
-
value: filter
|
|
1052
|
+
value: filter != null ? filter : '',
|
|
1044
1053
|
onChange: e => setFilter(e.target.value),
|
|
1045
1054
|
onKeyDown: e => {
|
|
1046
1055
|
if (e.key === 'Escape') setFilter('');
|
|
1047
1056
|
},
|
|
1048
1057
|
style: {
|
|
1049
1058
|
flex: '1',
|
|
1050
|
-
marginRight: '.5em',
|
|
1051
1059
|
width: '100%'
|
|
1052
1060
|
}
|
|
1053
1061
|
}), /*#__PURE__*/React.createElement(Select, {
|
|
@@ -1147,7 +1155,8 @@ const ReactQueryDevtoolsPanel$1 = /*#__PURE__*/React.forwardRef(function ReactQu
|
|
|
1147
1155
|
}))), activeQueryHash && isOpen ? /*#__PURE__*/React.createElement(ActiveQuery, {
|
|
1148
1156
|
activeQueryHash: activeQueryHash,
|
|
1149
1157
|
queryCache: queryCache,
|
|
1150
|
-
queryClient: client
|
|
1158
|
+
queryClient: client,
|
|
1159
|
+
errorTypes: errorTypes
|
|
1151
1160
|
}) : null, showCloseButton ? /*#__PURE__*/React.createElement(Button, _extends({
|
|
1152
1161
|
type: "button",
|
|
1153
1162
|
"aria-controls": "ReactQueryDevtoolsPanel",
|
|
@@ -1164,26 +1173,67 @@ const ReactQueryDevtoolsPanel$1 = /*#__PURE__*/React.forwardRef(function ReactQu
|
|
|
1164
1173
|
},
|
|
1165
1174
|
onClick: e => {
|
|
1166
1175
|
setIsOpen(false);
|
|
1167
|
-
onCloseClick
|
|
1176
|
+
onCloseClick == null ? void 0 : onCloseClick(e);
|
|
1168
1177
|
}
|
|
1169
1178
|
}), "Close") : null));
|
|
1170
1179
|
});
|
|
1171
1180
|
const ActiveQuery = ({
|
|
1172
1181
|
queryCache,
|
|
1173
1182
|
activeQueryHash,
|
|
1174
|
-
queryClient
|
|
1183
|
+
queryClient,
|
|
1184
|
+
errorTypes
|
|
1175
1185
|
}) => {
|
|
1186
|
+
var _useSubscribeToQueryC, _useSubscribeToQueryC2;
|
|
1176
1187
|
const activeQuery = useSubscribeToQueryCache(queryCache, () => queryCache.getAll().find(query => query.queryHash === activeQueryHash));
|
|
1177
|
-
const activeQueryState = useSubscribeToQueryCache(queryCache, () =>
|
|
1178
|
-
|
|
1179
|
-
|
|
1188
|
+
const activeQueryState = useSubscribeToQueryCache(queryCache, () => {
|
|
1189
|
+
var _queryCache$getAll$fi;
|
|
1190
|
+
return (_queryCache$getAll$fi = queryCache.getAll().find(query => query.queryHash === activeQueryHash)) == null ? void 0 : _queryCache$getAll$fi.state;
|
|
1191
|
+
});
|
|
1192
|
+
const isStale = (_useSubscribeToQueryC = useSubscribeToQueryCache(queryCache, () => {
|
|
1193
|
+
var _queryCache$getAll$fi2;
|
|
1194
|
+
return (_queryCache$getAll$fi2 = queryCache.getAll().find(query => query.queryHash === activeQueryHash)) == null ? void 0 : _queryCache$getAll$fi2.isStale();
|
|
1195
|
+
})) != null ? _useSubscribeToQueryC : false;
|
|
1196
|
+
const observerCount = (_useSubscribeToQueryC2 = useSubscribeToQueryCache(queryCache, () => {
|
|
1197
|
+
var _queryCache$getAll$fi3;
|
|
1198
|
+
return (_queryCache$getAll$fi3 = queryCache.getAll().find(query => query.queryHash === activeQueryHash)) == null ? void 0 : _queryCache$getAll$fi3.getObserversCount();
|
|
1199
|
+
})) != null ? _useSubscribeToQueryC2 : 0;
|
|
1180
1200
|
const handleRefetch = () => {
|
|
1181
|
-
const promise = activeQuery
|
|
1182
|
-
promise
|
|
1201
|
+
const promise = activeQuery == null ? void 0 : activeQuery.fetch();
|
|
1202
|
+
promise == null ? void 0 : promise.catch(noop);
|
|
1183
1203
|
};
|
|
1204
|
+
const currentErrorTypeName = useMemo(() => {
|
|
1205
|
+
if (activeQuery && activeQueryState != null && activeQueryState.error) {
|
|
1206
|
+
const errorType = errorTypes.find(type => {
|
|
1207
|
+
var _activeQueryState$err;
|
|
1208
|
+
return type.initializer(activeQuery).toString() === ((_activeQueryState$err = activeQueryState.error) == null ? void 0 : _activeQueryState$err.toString());
|
|
1209
|
+
});
|
|
1210
|
+
return errorType == null ? void 0 : errorType.name;
|
|
1211
|
+
}
|
|
1212
|
+
return undefined;
|
|
1213
|
+
}, [activeQuery, activeQueryState == null ? void 0 : activeQueryState.error, errorTypes]);
|
|
1184
1214
|
if (!activeQuery || !activeQueryState) {
|
|
1185
1215
|
return null;
|
|
1186
1216
|
}
|
|
1217
|
+
const triggerError = errorType => {
|
|
1218
|
+
var _errorType$initialize;
|
|
1219
|
+
const error = (_errorType$initialize = errorType == null ? void 0 : errorType.initializer(activeQuery)) != null ? _errorType$initialize : new Error('Unknown error from devtools');
|
|
1220
|
+
const __previousQueryOptions = activeQuery.options;
|
|
1221
|
+
activeQuery.setState({
|
|
1222
|
+
status: 'error',
|
|
1223
|
+
error,
|
|
1224
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
1225
|
+
fetchMeta: {
|
|
1226
|
+
...activeQuery.state.fetchMeta,
|
|
1227
|
+
__previousQueryOptions
|
|
1228
|
+
}
|
|
1229
|
+
});
|
|
1230
|
+
};
|
|
1231
|
+
const restoreQueryAfterLoadingOrError = () => {
|
|
1232
|
+
activeQuery.fetch(activeQuery.state.fetchMeta.__previousQueryOptions, {
|
|
1233
|
+
// Make sure this fetch will cancel the previous one
|
|
1234
|
+
cancelRefetch: true
|
|
1235
|
+
});
|
|
1236
|
+
};
|
|
1187
1237
|
return /*#__PURE__*/React.createElement(ActiveQueryPanel, null, /*#__PURE__*/React.createElement("div", {
|
|
1188
1238
|
style: {
|
|
1189
1239
|
padding: '.5em',
|
|
@@ -1250,7 +1300,11 @@ const ActiveQuery = ({
|
|
|
1250
1300
|
}
|
|
1251
1301
|
}, "Actions"), /*#__PURE__*/React.createElement("div", {
|
|
1252
1302
|
style: {
|
|
1253
|
-
padding: '0.5em'
|
|
1303
|
+
padding: '0.5em',
|
|
1304
|
+
display: 'flex',
|
|
1305
|
+
flexWrap: 'wrap',
|
|
1306
|
+
gap: '0.5em',
|
|
1307
|
+
alignItems: 'flex-end'
|
|
1254
1308
|
}
|
|
1255
1309
|
}, /*#__PURE__*/React.createElement(Button, {
|
|
1256
1310
|
type: "button",
|
|
@@ -1278,7 +1332,65 @@ const ActiveQuery = ({
|
|
|
1278
1332
|
style: {
|
|
1279
1333
|
background: defaultTheme.danger
|
|
1280
1334
|
}
|
|
1281
|
-
}, "Remove")
|
|
1335
|
+
}, "Remove"), ' ', /*#__PURE__*/React.createElement(Button, {
|
|
1336
|
+
type: "button",
|
|
1337
|
+
onClick: () => {
|
|
1338
|
+
if (activeQuery.state.data === undefined) {
|
|
1339
|
+
restoreQueryAfterLoadingOrError();
|
|
1340
|
+
} else {
|
|
1341
|
+
const __previousQueryOptions = activeQuery.options;
|
|
1342
|
+
// Trigger a fetch in order to trigger suspense as well.
|
|
1343
|
+
activeQuery.fetch({
|
|
1344
|
+
...__previousQueryOptions,
|
|
1345
|
+
queryFn: () => {
|
|
1346
|
+
return new Promise(() => {
|
|
1347
|
+
// Never resolve
|
|
1348
|
+
});
|
|
1349
|
+
},
|
|
1350
|
+
gcTime: -1
|
|
1351
|
+
});
|
|
1352
|
+
activeQuery.setState({
|
|
1353
|
+
data: undefined,
|
|
1354
|
+
status: 'pending',
|
|
1355
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
1356
|
+
fetchMeta: {
|
|
1357
|
+
...activeQuery.state.fetchMeta,
|
|
1358
|
+
__previousQueryOptions
|
|
1359
|
+
}
|
|
1360
|
+
});
|
|
1361
|
+
}
|
|
1362
|
+
},
|
|
1363
|
+
style: {
|
|
1364
|
+
background: defaultTheme.paused
|
|
1365
|
+
}
|
|
1366
|
+
}, activeQuery.state.status === 'pending' ? 'Restore' : 'Trigger', ' ', "loading"), ' ', errorTypes.length === 0 || activeQuery.state.status === 'error' ? /*#__PURE__*/React.createElement(Button, {
|
|
1367
|
+
type: "button",
|
|
1368
|
+
onClick: () => {
|
|
1369
|
+
if (!activeQuery.state.error) {
|
|
1370
|
+
triggerError();
|
|
1371
|
+
} else {
|
|
1372
|
+
queryClient.resetQueries(activeQuery);
|
|
1373
|
+
}
|
|
1374
|
+
},
|
|
1375
|
+
style: {
|
|
1376
|
+
background: defaultTheme.danger
|
|
1377
|
+
}
|
|
1378
|
+
}, activeQuery.state.status === 'error' ? 'Restore' : 'Trigger', " error") : /*#__PURE__*/React.createElement("label", null, "Trigger error:", /*#__PURE__*/React.createElement(Select, {
|
|
1379
|
+
value: currentErrorTypeName != null ? currentErrorTypeName : '',
|
|
1380
|
+
style: {
|
|
1381
|
+
marginInlineStart: '.5em'
|
|
1382
|
+
},
|
|
1383
|
+
onChange: e => {
|
|
1384
|
+
const errorType = errorTypes.find(t => t.name === e.target.value);
|
|
1385
|
+
triggerError(errorType);
|
|
1386
|
+
}
|
|
1387
|
+
}, /*#__PURE__*/React.createElement("option", {
|
|
1388
|
+
key: "",
|
|
1389
|
+
value: ""
|
|
1390
|
+
}), errorTypes.map(errorType => /*#__PURE__*/React.createElement("option", {
|
|
1391
|
+
key: errorType.name,
|
|
1392
|
+
value: errorType.name
|
|
1393
|
+
}, errorType.name))))), /*#__PURE__*/React.createElement("div", {
|
|
1282
1394
|
style: {
|
|
1283
1395
|
background: defaultTheme.backgroundAlt,
|
|
1284
1396
|
padding: '.5em',
|
|
@@ -1358,21 +1470,37 @@ const QueryRow = /*#__PURE__*/React.memo(({
|
|
|
1358
1470
|
activeQueryHash,
|
|
1359
1471
|
queryCache
|
|
1360
1472
|
}) => {
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1473
|
+
var _useSubscribeToQueryC3, _useSubscribeToQueryC4, _useSubscribeToQueryC5, _useSubscribeToQueryC6;
|
|
1474
|
+
const queryHash = (_useSubscribeToQueryC3 = useSubscribeToQueryCache(queryCache, () => {
|
|
1475
|
+
var _queryCache$find;
|
|
1476
|
+
return (_queryCache$find = queryCache.find({
|
|
1477
|
+
queryKey
|
|
1478
|
+
})) == null ? void 0 : _queryCache$find.queryHash;
|
|
1479
|
+
})) != null ? _useSubscribeToQueryC3 : '';
|
|
1480
|
+
const queryState = useSubscribeToQueryCache(queryCache, () => {
|
|
1481
|
+
var _queryCache$find2;
|
|
1482
|
+
return (_queryCache$find2 = queryCache.find({
|
|
1483
|
+
queryKey
|
|
1484
|
+
})) == null ? void 0 : _queryCache$find2.state;
|
|
1485
|
+
});
|
|
1486
|
+
const isStale = (_useSubscribeToQueryC4 = useSubscribeToQueryCache(queryCache, () => {
|
|
1487
|
+
var _queryCache$find3;
|
|
1488
|
+
return (_queryCache$find3 = queryCache.find({
|
|
1489
|
+
queryKey
|
|
1490
|
+
})) == null ? void 0 : _queryCache$find3.isStale();
|
|
1491
|
+
})) != null ? _useSubscribeToQueryC4 : false;
|
|
1492
|
+
const isDisabled = (_useSubscribeToQueryC5 = useSubscribeToQueryCache(queryCache, () => {
|
|
1493
|
+
var _queryCache$find4;
|
|
1494
|
+
return (_queryCache$find4 = queryCache.find({
|
|
1495
|
+
queryKey
|
|
1496
|
+
})) == null ? void 0 : _queryCache$find4.isDisabled();
|
|
1497
|
+
})) != null ? _useSubscribeToQueryC5 : false;
|
|
1498
|
+
const observerCount = (_useSubscribeToQueryC6 = useSubscribeToQueryCache(queryCache, () => {
|
|
1499
|
+
var _queryCache$find5;
|
|
1500
|
+
return (_queryCache$find5 = queryCache.find({
|
|
1501
|
+
queryKey
|
|
1502
|
+
})) == null ? void 0 : _queryCache$find5.getObserversCount();
|
|
1503
|
+
})) != null ? _useSubscribeToQueryC6 : 0;
|
|
1376
1504
|
if (!queryState) {
|
|
1377
1505
|
return null;
|
|
1378
1506
|
}
|