@tanstack/react-query-devtools 5.0.0-alpha.1 → 5.0.0-alpha.11
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 +2 -1
- package/build/lib/Explorer.esm.js.map +1 -1
- package/build/lib/Explorer.js +2 -1
- package/build/lib/Explorer.js.map +1 -1
- package/build/lib/Explorer.mjs +1 -0
- package/build/lib/Explorer.mjs.map +1 -1
- package/build/lib/devtools.d.ts +20 -2
- package/build/lib/devtools.esm.js +162 -34
- package/build/lib/devtools.esm.js.map +1 -1
- package/build/lib/devtools.js +161 -34
- package/build/lib/devtools.js.map +1 -1
- package/build/lib/devtools.mjs +106 -9
- package/build/lib/devtools.mjs.map +1 -1
- package/build/lib/index.esm.js +1 -0
- package/build/lib/index.esm.js.map +1 -1
- package/build/lib/index.js +1 -0
- package/build/lib/index.js.map +1 -1
- package/build/lib/index.mjs +1 -0
- package/build/lib/index.mjs.map +1 -1
- package/build/lib/index.prod.esm.js +165 -36
- package/build/lib/index.prod.esm.js.map +1 -1
- package/build/lib/index.prod.js +164 -36
- package/build/lib/index.prod.js.map +1 -1
- package/build/lib/index.prod.mjs +108 -10
- package/build/lib/index.prod.mjs.map +1 -1
- package/build/lib/styledComponents.d.ts +0 -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/lib/theme.esm.js +1 -0
- package/build/lib/theme.esm.js.map +1 -1
- package/build/lib/theme.js +1 -0
- package/build/lib/theme.js.map +1 -1
- package/build/lib/theme.mjs +1 -0
- package/build/lib/theme.mjs.map +1 -1
- package/build/umd/index.development.js +107 -10
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +4 -4
- package/src/__tests__/Explorer.test.tsx +3 -2
- package/src/__tests__/devtools.test.tsx +183 -9
- package/src/devtools.tsx +151 -3
- package/src/index.ts +2 -0
- 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, {
|
|
@@ -1079,6 +1087,7 @@ const ReactQueryDevtoolsPanel$1 = /*#__PURE__*/React.forwardRef(function ReactQu
|
|
|
1079
1087
|
} else {
|
|
1080
1088
|
onlineManager.setOnline(false);
|
|
1081
1089
|
setMockOffline(true);
|
|
1090
|
+
window.dispatchEvent(new Event('offline'));
|
|
1082
1091
|
}
|
|
1083
1092
|
},
|
|
1084
1093
|
"aria-label": isMockOffline ? 'Restore offline mock' : 'Mock offline behavior',
|
|
@@ -1147,7 +1156,8 @@ const ReactQueryDevtoolsPanel$1 = /*#__PURE__*/React.forwardRef(function ReactQu
|
|
|
1147
1156
|
}))), activeQueryHash && isOpen ? /*#__PURE__*/React.createElement(ActiveQuery, {
|
|
1148
1157
|
activeQueryHash: activeQueryHash,
|
|
1149
1158
|
queryCache: queryCache,
|
|
1150
|
-
queryClient: client
|
|
1159
|
+
queryClient: client,
|
|
1160
|
+
errorTypes: errorTypes
|
|
1151
1161
|
}) : null, showCloseButton ? /*#__PURE__*/React.createElement(Button, _extends({
|
|
1152
1162
|
type: "button",
|
|
1153
1163
|
"aria-controls": "ReactQueryDevtoolsPanel",
|
|
@@ -1164,26 +1174,67 @@ const ReactQueryDevtoolsPanel$1 = /*#__PURE__*/React.forwardRef(function ReactQu
|
|
|
1164
1174
|
},
|
|
1165
1175
|
onClick: e => {
|
|
1166
1176
|
setIsOpen(false);
|
|
1167
|
-
onCloseClick
|
|
1177
|
+
onCloseClick == null ? void 0 : onCloseClick(e);
|
|
1168
1178
|
}
|
|
1169
1179
|
}), "Close") : null));
|
|
1170
1180
|
});
|
|
1171
1181
|
const ActiveQuery = ({
|
|
1172
1182
|
queryCache,
|
|
1173
1183
|
activeQueryHash,
|
|
1174
|
-
queryClient
|
|
1184
|
+
queryClient,
|
|
1185
|
+
errorTypes
|
|
1175
1186
|
}) => {
|
|
1187
|
+
var _useSubscribeToQueryC, _useSubscribeToQueryC2;
|
|
1176
1188
|
const activeQuery = useSubscribeToQueryCache(queryCache, () => queryCache.getAll().find(query => query.queryHash === activeQueryHash));
|
|
1177
|
-
const activeQueryState = useSubscribeToQueryCache(queryCache, () =>
|
|
1178
|
-
|
|
1179
|
-
|
|
1189
|
+
const activeQueryState = useSubscribeToQueryCache(queryCache, () => {
|
|
1190
|
+
var _queryCache$getAll$fi;
|
|
1191
|
+
return (_queryCache$getAll$fi = queryCache.getAll().find(query => query.queryHash === activeQueryHash)) == null ? void 0 : _queryCache$getAll$fi.state;
|
|
1192
|
+
});
|
|
1193
|
+
const isStale = (_useSubscribeToQueryC = useSubscribeToQueryCache(queryCache, () => {
|
|
1194
|
+
var _queryCache$getAll$fi2;
|
|
1195
|
+
return (_queryCache$getAll$fi2 = queryCache.getAll().find(query => query.queryHash === activeQueryHash)) == null ? void 0 : _queryCache$getAll$fi2.isStale();
|
|
1196
|
+
})) != null ? _useSubscribeToQueryC : false;
|
|
1197
|
+
const observerCount = (_useSubscribeToQueryC2 = useSubscribeToQueryCache(queryCache, () => {
|
|
1198
|
+
var _queryCache$getAll$fi3;
|
|
1199
|
+
return (_queryCache$getAll$fi3 = queryCache.getAll().find(query => query.queryHash === activeQueryHash)) == null ? void 0 : _queryCache$getAll$fi3.getObserversCount();
|
|
1200
|
+
})) != null ? _useSubscribeToQueryC2 : 0;
|
|
1180
1201
|
const handleRefetch = () => {
|
|
1181
|
-
const promise = activeQuery
|
|
1182
|
-
promise
|
|
1202
|
+
const promise = activeQuery == null ? void 0 : activeQuery.fetch();
|
|
1203
|
+
promise == null ? void 0 : promise.catch(noop);
|
|
1183
1204
|
};
|
|
1205
|
+
const currentErrorTypeName = useMemo(() => {
|
|
1206
|
+
if (activeQuery && activeQueryState != null && activeQueryState.error) {
|
|
1207
|
+
const errorType = errorTypes.find(type => {
|
|
1208
|
+
var _activeQueryState$err;
|
|
1209
|
+
return type.initializer(activeQuery).toString() === ((_activeQueryState$err = activeQueryState.error) == null ? void 0 : _activeQueryState$err.toString());
|
|
1210
|
+
});
|
|
1211
|
+
return errorType == null ? void 0 : errorType.name;
|
|
1212
|
+
}
|
|
1213
|
+
return undefined;
|
|
1214
|
+
}, [activeQuery, activeQueryState == null ? void 0 : activeQueryState.error, errorTypes]);
|
|
1184
1215
|
if (!activeQuery || !activeQueryState) {
|
|
1185
1216
|
return null;
|
|
1186
1217
|
}
|
|
1218
|
+
const triggerError = errorType => {
|
|
1219
|
+
var _errorType$initialize;
|
|
1220
|
+
const error = (_errorType$initialize = errorType == null ? void 0 : errorType.initializer(activeQuery)) != null ? _errorType$initialize : new Error('Unknown error from devtools');
|
|
1221
|
+
const __previousQueryOptions = activeQuery.options;
|
|
1222
|
+
activeQuery.setState({
|
|
1223
|
+
status: 'error',
|
|
1224
|
+
error,
|
|
1225
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
1226
|
+
fetchMeta: {
|
|
1227
|
+
...activeQuery.state.fetchMeta,
|
|
1228
|
+
__previousQueryOptions
|
|
1229
|
+
}
|
|
1230
|
+
});
|
|
1231
|
+
};
|
|
1232
|
+
const restoreQueryAfterLoadingOrError = () => {
|
|
1233
|
+
activeQuery.fetch(activeQuery.state.fetchMeta.__previousQueryOptions, {
|
|
1234
|
+
// Make sure this fetch will cancel the previous one
|
|
1235
|
+
cancelRefetch: true
|
|
1236
|
+
});
|
|
1237
|
+
};
|
|
1187
1238
|
return /*#__PURE__*/React.createElement(ActiveQueryPanel, null, /*#__PURE__*/React.createElement("div", {
|
|
1188
1239
|
style: {
|
|
1189
1240
|
padding: '.5em',
|
|
@@ -1200,7 +1251,7 @@ const ActiveQuery = ({
|
|
|
1200
1251
|
style: {
|
|
1201
1252
|
marginBottom: '.5em',
|
|
1202
1253
|
display: 'flex',
|
|
1203
|
-
alignItems: '
|
|
1254
|
+
alignItems: 'flex-start',
|
|
1204
1255
|
justifyContent: 'space-between'
|
|
1205
1256
|
}
|
|
1206
1257
|
}, /*#__PURE__*/React.createElement(Code, {
|
|
@@ -1250,7 +1301,11 @@ const ActiveQuery = ({
|
|
|
1250
1301
|
}
|
|
1251
1302
|
}, "Actions"), /*#__PURE__*/React.createElement("div", {
|
|
1252
1303
|
style: {
|
|
1253
|
-
padding: '0.5em'
|
|
1304
|
+
padding: '0.5em',
|
|
1305
|
+
display: 'flex',
|
|
1306
|
+
flexWrap: 'wrap',
|
|
1307
|
+
gap: '0.5em',
|
|
1308
|
+
alignItems: 'flex-end'
|
|
1254
1309
|
}
|
|
1255
1310
|
}, /*#__PURE__*/React.createElement(Button, {
|
|
1256
1311
|
type: "button",
|
|
@@ -1278,7 +1333,65 @@ const ActiveQuery = ({
|
|
|
1278
1333
|
style: {
|
|
1279
1334
|
background: defaultTheme.danger
|
|
1280
1335
|
}
|
|
1281
|
-
}, "Remove")
|
|
1336
|
+
}, "Remove"), ' ', /*#__PURE__*/React.createElement(Button, {
|
|
1337
|
+
type: "button",
|
|
1338
|
+
onClick: () => {
|
|
1339
|
+
if (activeQuery.state.data === undefined) {
|
|
1340
|
+
restoreQueryAfterLoadingOrError();
|
|
1341
|
+
} else {
|
|
1342
|
+
const __previousQueryOptions = activeQuery.options;
|
|
1343
|
+
// Trigger a fetch in order to trigger suspense as well.
|
|
1344
|
+
activeQuery.fetch({
|
|
1345
|
+
...__previousQueryOptions,
|
|
1346
|
+
queryFn: () => {
|
|
1347
|
+
return new Promise(() => {
|
|
1348
|
+
// Never resolve
|
|
1349
|
+
});
|
|
1350
|
+
},
|
|
1351
|
+
gcTime: -1
|
|
1352
|
+
});
|
|
1353
|
+
activeQuery.setState({
|
|
1354
|
+
data: undefined,
|
|
1355
|
+
status: 'pending',
|
|
1356
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
1357
|
+
fetchMeta: {
|
|
1358
|
+
...activeQuery.state.fetchMeta,
|
|
1359
|
+
__previousQueryOptions
|
|
1360
|
+
}
|
|
1361
|
+
});
|
|
1362
|
+
}
|
|
1363
|
+
},
|
|
1364
|
+
style: {
|
|
1365
|
+
background: defaultTheme.paused
|
|
1366
|
+
}
|
|
1367
|
+
}, activeQuery.state.status === 'pending' ? 'Restore' : 'Trigger', ' ', "loading"), ' ', errorTypes.length === 0 || activeQuery.state.status === 'error' ? /*#__PURE__*/React.createElement(Button, {
|
|
1368
|
+
type: "button",
|
|
1369
|
+
onClick: () => {
|
|
1370
|
+
if (!activeQuery.state.error) {
|
|
1371
|
+
triggerError();
|
|
1372
|
+
} else {
|
|
1373
|
+
queryClient.resetQueries(activeQuery);
|
|
1374
|
+
}
|
|
1375
|
+
},
|
|
1376
|
+
style: {
|
|
1377
|
+
background: defaultTheme.danger
|
|
1378
|
+
}
|
|
1379
|
+
}, activeQuery.state.status === 'error' ? 'Restore' : 'Trigger', " error") : /*#__PURE__*/React.createElement("label", null, "Trigger error:", /*#__PURE__*/React.createElement(Select, {
|
|
1380
|
+
value: currentErrorTypeName != null ? currentErrorTypeName : '',
|
|
1381
|
+
style: {
|
|
1382
|
+
marginInlineStart: '.5em'
|
|
1383
|
+
},
|
|
1384
|
+
onChange: e => {
|
|
1385
|
+
const errorType = errorTypes.find(t => t.name === e.target.value);
|
|
1386
|
+
triggerError(errorType);
|
|
1387
|
+
}
|
|
1388
|
+
}, /*#__PURE__*/React.createElement("option", {
|
|
1389
|
+
key: "",
|
|
1390
|
+
value: ""
|
|
1391
|
+
}), errorTypes.map(errorType => /*#__PURE__*/React.createElement("option", {
|
|
1392
|
+
key: errorType.name,
|
|
1393
|
+
value: errorType.name
|
|
1394
|
+
}, errorType.name))))), /*#__PURE__*/React.createElement("div", {
|
|
1282
1395
|
style: {
|
|
1283
1396
|
background: defaultTheme.backgroundAlt,
|
|
1284
1397
|
padding: '.5em',
|
|
@@ -1358,21 +1471,37 @@ const QueryRow = /*#__PURE__*/React.memo(({
|
|
|
1358
1471
|
activeQueryHash,
|
|
1359
1472
|
queryCache
|
|
1360
1473
|
}) => {
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1474
|
+
var _useSubscribeToQueryC3, _useSubscribeToQueryC4, _useSubscribeToQueryC5, _useSubscribeToQueryC6;
|
|
1475
|
+
const queryHash = (_useSubscribeToQueryC3 = useSubscribeToQueryCache(queryCache, () => {
|
|
1476
|
+
var _queryCache$find;
|
|
1477
|
+
return (_queryCache$find = queryCache.find({
|
|
1478
|
+
queryKey
|
|
1479
|
+
})) == null ? void 0 : _queryCache$find.queryHash;
|
|
1480
|
+
})) != null ? _useSubscribeToQueryC3 : '';
|
|
1481
|
+
const queryState = useSubscribeToQueryCache(queryCache, () => {
|
|
1482
|
+
var _queryCache$find2;
|
|
1483
|
+
return (_queryCache$find2 = queryCache.find({
|
|
1484
|
+
queryKey
|
|
1485
|
+
})) == null ? void 0 : _queryCache$find2.state;
|
|
1486
|
+
});
|
|
1487
|
+
const isStale = (_useSubscribeToQueryC4 = useSubscribeToQueryCache(queryCache, () => {
|
|
1488
|
+
var _queryCache$find3;
|
|
1489
|
+
return (_queryCache$find3 = queryCache.find({
|
|
1490
|
+
queryKey
|
|
1491
|
+
})) == null ? void 0 : _queryCache$find3.isStale();
|
|
1492
|
+
})) != null ? _useSubscribeToQueryC4 : false;
|
|
1493
|
+
const isDisabled = (_useSubscribeToQueryC5 = useSubscribeToQueryCache(queryCache, () => {
|
|
1494
|
+
var _queryCache$find4;
|
|
1495
|
+
return (_queryCache$find4 = queryCache.find({
|
|
1496
|
+
queryKey
|
|
1497
|
+
})) == null ? void 0 : _queryCache$find4.isDisabled();
|
|
1498
|
+
})) != null ? _useSubscribeToQueryC5 : false;
|
|
1499
|
+
const observerCount = (_useSubscribeToQueryC6 = useSubscribeToQueryCache(queryCache, () => {
|
|
1500
|
+
var _queryCache$find5;
|
|
1501
|
+
return (_queryCache$find5 = queryCache.find({
|
|
1502
|
+
queryKey
|
|
1503
|
+
})) == null ? void 0 : _queryCache$find5.getObserversCount();
|
|
1504
|
+
})) != null ? _useSubscribeToQueryC6 : 0;
|
|
1376
1505
|
if (!queryState) {
|
|
1377
1506
|
return null;
|
|
1378
1507
|
}
|