@multiplatform.one/table 7.34.1 → 7.34.2
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/dist/cjs/components/ChildTable/index.native.js +1 -1
- package/dist/cjs/components/ChildTable/index.native.js.map +1 -1
- package/dist/cjs/components/ColumnHeaderFilter/index.native.js +1 -1
- package/dist/cjs/components/ColumnHeaderFilter/index.native.js.map +1 -1
- package/dist/cjs/components/DataTable/CellContent.native.js.map +1 -1
- package/dist/cjs/components/DataTable/DataTableCardControls.native.js +1 -1
- package/dist/cjs/components/DataTable/DataTableCardControls.native.js.map +1 -1
- package/dist/cjs/components/DataTable/DataTableContext.native.js.map +1 -1
- package/dist/cjs/components/DataTable/DataTableDocumentList.native.js.map +1 -1
- package/dist/cjs/components/DataTable/DataTableInfiniteTail.cjs +16 -0
- package/dist/cjs/components/DataTable/DataTableInfiniteTail.native.js +16 -0
- package/dist/cjs/components/DataTable/DataTableInfiniteTail.native.js.map +1 -1
- package/dist/cjs/components/DataTable/DataTableMobileCards.native.js.map +1 -1
- package/dist/cjs/components/DataTable/DataTableRoot.cjs +7 -6
- package/dist/cjs/components/DataTable/DataTableRoot.native.js +15 -14
- package/dist/cjs/components/DataTable/DataTableRoot.native.js.map +1 -1
- package/dist/cjs/components/DataTable/DataTableStateContext.native.js.map +1 -1
- package/dist/cjs/components/DataTable/DataTableVirtualized.native.js.map +1 -1
- package/dist/cjs/components/DataTable/NativeInfiniteSentinel.native.js.map +1 -1
- package/dist/cjs/components/DataTable/dataTableChrome.native.js.map +1 -1
- package/dist/cjs/components/DataTable/documentListSlots.native.js.map +1 -1
- package/dist/cjs/components/DataTable/index.native.js +16 -14
- package/dist/cjs/components/DataTable/index.native.js.map +1 -1
- package/dist/cjs/components/DataTable/rowStateChrome.native.js.map +1 -1
- package/dist/cjs/components/DataTableBulkActions/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableCell/CellOptionsEditor.native.js.map +1 -1
- package/dist/cjs/components/DataTableCell/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableColumnPinning/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableDateFilter/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableExport/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableFacetMenu/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableFilterButton/index.native.js +1 -1
- package/dist/cjs/components/DataTableFilterButton/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableFilterChips/FilterChip.native.js.map +1 -1
- package/dist/cjs/components/DataTableFilterChips/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableFilters/index.native.js +2 -2
- package/dist/cjs/components/DataTableFilters/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableGrouping/index.native.js.map +1 -1
- package/dist/cjs/components/DataTablePagination/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableSearch/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableToolbar/index.native.js +2 -2
- package/dist/cjs/components/DataTableToolbar/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableViewOptions/index.native.js.map +1 -1
- package/dist/cjs/components/FilterManager.native.js.map +1 -1
- package/dist/cjs/components/FilterOperatorValueEditor/index.native.js.map +1 -1
- package/dist/cjs/components/KnobDialog.native.js.map +1 -1
- package/dist/cjs/components/SavedFilterDropdown.native.js.map +1 -1
- package/dist/cjs/components/SimpleTable/index.native.js.map +1 -1
- package/dist/cjs/components/TableInput/RowDetailEditor.native.js +1 -1
- package/dist/cjs/components/TableInput/index.native.js +1 -1
- package/dist/cjs/components/TableInput/shared.native.js.map +1 -1
- package/dist/cjs/hooks/useDataTable.cjs +4 -0
- package/dist/cjs/hooks/useDataTable.native.js +4 -0
- package/dist/cjs/hooks/useDataTable.native.js.map +1 -1
- package/dist/cjs/hooks/useDataTableKeyboard.native.js.map +1 -1
- package/dist/cjs/hooks/useDragScroll.native.js.map +1 -1
- package/dist/cjs/hooks/useInfiniteRows.cjs +35 -3
- package/dist/cjs/hooks/useInfiniteRows.native.js +46 -3
- package/dist/cjs/hooks/useInfiniteRows.native.js.map +1 -1
- package/dist/cjs/hooks/useSavedFilters.native.js.map +1 -1
- package/dist/cjs/hooks/useTableColumnPinning.native.js.map +1 -1
- package/dist/cjs/hooks/useTableFiltering.native.js.map +1 -1
- package/dist/cjs/hooks/useTableGrouping.native.js.map +1 -1
- package/dist/cjs/hooks/useTableKeyboard.native.js.map +1 -1
- package/dist/cjs/hooks/useTablePagination.native.js.map +1 -1
- package/dist/cjs/hooks/useTableSearch.native.js.map +1 -1
- package/dist/cjs/hooks/useTableSelection.native.js.map +1 -1
- package/dist/cjs/hooks/useTableSorting.native.js.map +1 -1
- package/dist/cjs/hooks/useTableUrlSync.native.js.map +1 -1
- package/dist/cjs/hooks/useTableViews.native.js.map +1 -1
- package/dist/cjs/index.native.js +20 -20
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/shared/devWarn.native.js.map +1 -1
- package/dist/cjs/shared/t.native.js.map +1 -1
- package/dist/cjs/shims/primitives.native.js.map +1 -1
- package/dist/cjs/shims/tableCellContext.native.js.map +1 -1
- package/dist/cjs/types.native.js.map +1 -1
- package/dist/cjs/utils/chromeIcons.native.js.map +1 -1
- package/dist/cjs/utils/columnAlign.native.js.map +1 -1
- package/dist/cjs/utils/filterFields.native.js.map +1 -1
- package/dist/cjs/utils/filterUtils.native.js.map +1 -1
- package/dist/cjs/utils/money.native.js.map +1 -1
- package/dist/cjs/utils/paginationDefaults.native.js.map +1 -1
- package/dist/cjs/utils/rowAccumulator.native.js.map +1 -1
- package/dist/cjs/utils/rowPress.native.js.map +1 -1
- package/dist/cjs/utils/urlStateUtils.native.js.map +1 -1
- package/dist/cjs/utils/viewData.native.js.map +1 -1
- package/dist/cjs/utils/withInterp.native.js.map +1 -1
- package/dist/esm/components/ChildTable/index.native.js.map +1 -1
- package/dist/esm/components/ColumnHeaderFilter/index.native.js.map +1 -1
- package/dist/esm/components/DataTable/CellContent.native.js.map +1 -1
- package/dist/esm/components/DataTable/DataTableCardControls.native.js.map +1 -1
- package/dist/esm/components/DataTable/DataTableContext.native.js.map +1 -1
- package/dist/esm/components/DataTable/DataTableDocumentList.native.js.map +1 -1
- package/dist/esm/components/DataTable/DataTableInfiniteTail.mjs +17 -1
- package/dist/esm/components/DataTable/DataTableInfiniteTail.mjs.map +1 -1
- package/dist/esm/components/DataTable/DataTableInfiniteTail.native.js +17 -1
- package/dist/esm/components/DataTable/DataTableInfiniteTail.native.js.map +1 -1
- package/dist/esm/components/DataTable/DataTableMobileCards.native.js.map +1 -1
- package/dist/esm/components/DataTable/DataTableRoot.mjs +7 -6
- package/dist/esm/components/DataTable/DataTableRoot.mjs.map +1 -1
- package/dist/esm/components/DataTable/DataTableRoot.native.js +8 -7
- package/dist/esm/components/DataTable/DataTableRoot.native.js.map +1 -1
- package/dist/esm/components/DataTable/DataTableStateContext.native.js.map +1 -1
- package/dist/esm/components/DataTable/DataTableVirtualized.native.js.map +1 -1
- package/dist/esm/components/DataTable/NativeInfiniteSentinel.native.js.map +1 -1
- package/dist/esm/components/DataTable/dataTableChrome.native.js.map +1 -1
- package/dist/esm/components/DataTable/documentListSlots.native.js.map +1 -1
- package/dist/esm/components/DataTable/index.native.js +6 -4
- package/dist/esm/components/DataTable/index.native.js.map +1 -1
- package/dist/esm/components/DataTable/rowStateChrome.native.js.map +1 -1
- package/dist/esm/components/DataTableBulkActions/index.native.js.map +1 -1
- package/dist/esm/components/DataTableCell/CellOptionsEditor.native.js.map +1 -1
- package/dist/esm/components/DataTableCell/index.native.js.map +1 -1
- package/dist/esm/components/DataTableColumnPinning/index.native.js.map +1 -1
- package/dist/esm/components/DataTableDateFilter/index.native.js.map +1 -1
- package/dist/esm/components/DataTableExport/index.native.js.map +1 -1
- package/dist/esm/components/DataTableFacetMenu/index.native.js.map +1 -1
- package/dist/esm/components/DataTableFilterButton/index.native.js.map +1 -1
- package/dist/esm/components/DataTableFilterChips/FilterChip.native.js.map +1 -1
- package/dist/esm/components/DataTableFilterChips/index.native.js.map +1 -1
- package/dist/esm/components/DataTableFilters/index.native.js.map +1 -1
- package/dist/esm/components/DataTableGrouping/index.native.js.map +1 -1
- package/dist/esm/components/DataTablePagination/index.native.js.map +1 -1
- package/dist/esm/components/DataTableSearch/index.native.js.map +1 -1
- package/dist/esm/components/DataTableToolbar/index.native.js.map +1 -1
- package/dist/esm/components/DataTableViewOptions/index.native.js.map +1 -1
- package/dist/esm/components/FilterManager.native.js.map +1 -1
- package/dist/esm/components/FilterOperatorValueEditor/index.native.js.map +1 -1
- package/dist/esm/components/KnobDialog.native.js.map +1 -1
- package/dist/esm/components/SavedFilterDropdown.native.js.map +1 -1
- package/dist/esm/components/SimpleTable/index.native.js.map +1 -1
- package/dist/esm/components/TableInput/shared.native.js.map +1 -1
- package/dist/esm/hooks/useDataTable.mjs +4 -0
- package/dist/esm/hooks/useDataTable.mjs.map +1 -1
- package/dist/esm/hooks/useDataTable.native.js +4 -0
- package/dist/esm/hooks/useDataTable.native.js.map +1 -1
- package/dist/esm/hooks/useDataTableKeyboard.native.js.map +1 -1
- package/dist/esm/hooks/useDragScroll.native.js.map +1 -1
- package/dist/esm/hooks/useInfiniteRows.mjs +35 -3
- package/dist/esm/hooks/useInfiniteRows.mjs.map +1 -1
- package/dist/esm/hooks/useInfiniteRows.native.js +46 -3
- package/dist/esm/hooks/useInfiniteRows.native.js.map +1 -1
- package/dist/esm/hooks/useSavedFilters.native.js.map +1 -1
- package/dist/esm/hooks/useTableColumnPinning.native.js.map +1 -1
- package/dist/esm/hooks/useTableFiltering.native.js.map +1 -1
- package/dist/esm/hooks/useTableGrouping.native.js.map +1 -1
- package/dist/esm/hooks/useTableKeyboard.native.js.map +1 -1
- package/dist/esm/hooks/useTablePagination.native.js.map +1 -1
- package/dist/esm/hooks/useTableSearch.native.js.map +1 -1
- package/dist/esm/hooks/useTableSelection.native.js.map +1 -1
- package/dist/esm/hooks/useTableSorting.native.js.map +1 -1
- package/dist/esm/hooks/useTableUrlSync.native.js.map +1 -1
- package/dist/esm/hooks/useTableViews.native.js.map +1 -1
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/shared/devWarn.native.js.map +1 -1
- package/dist/esm/shared/t.native.js.map +1 -1
- package/dist/esm/shims/primitives.native.js.map +1 -1
- package/dist/esm/shims/tableCellContext.native.js.map +1 -1
- package/dist/esm/types.native.js.map +1 -1
- package/dist/esm/utils/chromeIcons.native.js.map +1 -1
- package/dist/esm/utils/columnAlign.native.js.map +1 -1
- package/dist/esm/utils/filterFields.native.js.map +1 -1
- package/dist/esm/utils/filterUtils.native.js.map +1 -1
- package/dist/esm/utils/money.native.js.map +1 -1
- package/dist/esm/utils/paginationDefaults.native.js.map +1 -1
- package/dist/esm/utils/rowAccumulator.native.js.map +1 -1
- package/dist/esm/utils/rowPress.native.js.map +1 -1
- package/dist/esm/utils/urlStateUtils.native.js.map +1 -1
- package/dist/esm/utils/viewData.native.js.map +1 -1
- package/dist/esm/utils/withInterp.native.js.map +1 -1
- package/dist/jsx/components/DataTable/DataTableInfiniteTail.mjs +17 -1
- package/dist/jsx/components/DataTable/DataTableInfiniteTail.mjs.map +1 -1
- package/dist/jsx/components/DataTable/DataTableInfiniteTail.native.js +16 -0
- package/dist/jsx/components/DataTable/DataTableInfiniteTail.native.js.map +1 -1
- package/dist/jsx/components/DataTable/DataTableRoot.mjs +7 -6
- package/dist/jsx/components/DataTable/DataTableRoot.mjs.map +1 -1
- package/dist/jsx/components/DataTable/DataTableRoot.native.js +8 -7
- package/dist/jsx/components/DataTable/DataTableRoot.native.js.map +1 -1
- package/dist/jsx/components/DataTable/index.native.js +6 -4
- package/dist/jsx/components/DataTable/index.native.js.map +1 -1
- package/dist/jsx/hooks/useDataTable.mjs +4 -0
- package/dist/jsx/hooks/useDataTable.mjs.map +1 -1
- package/dist/jsx/hooks/useDataTable.native.js +4 -0
- package/dist/jsx/hooks/useDataTable.native.js.map +1 -1
- package/dist/jsx/hooks/useInfiniteRows.mjs +35 -3
- package/dist/jsx/hooks/useInfiniteRows.mjs.map +1 -1
- package/dist/jsx/hooks/useInfiniteRows.native.js +46 -3
- package/dist/jsx/hooks/useInfiniteRows.native.js.map +1 -1
- package/package.json +15 -15
- package/src/components/DataTable/DataTableInfiniteTail.tsx +21 -3
- package/src/components/DataTable/DataTableRoot.tsx +7 -6
- package/src/components/DataTable/index.native.tsx +5 -4
- package/src/components/DataTable/infiniteMode.spec.tsx +91 -2
- package/src/hooks/useDataTable.ts +4 -0
- package/src/hooks/useInfiniteRows.spec.tsx +84 -0
- package/src/hooks/useInfiniteRows.ts +49 -3
- package/src/types.ts +9 -1
- package/types/components/DataTable/DataTableInfiniteTail.d.ts +3 -2
- package/types/components/DataTable/DataTableInfiniteTail.d.ts.map +1 -1
- package/types/components/DataTable/DataTableRoot.d.ts.map +1 -1
- package/types/components/DataTable/index.native.d.ts.map +1 -1
- package/types/hooks/useDataTable.d.ts.map +1 -1
- package/types/hooks/useInfiniteRows.d.ts +11 -0
- package/types/hooks/useInfiniteRows.d.ts.map +1 -1
- package/types/types.d.ts +9 -1
- package/types/types.d.ts.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@multiplatform.one/table",
|
|
3
|
-
"version": "7.34.
|
|
3
|
+
"version": "7.34.2",
|
|
4
4
|
"description": "Advanced table components with filtering, pagination, sorting, and URL state management",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cross-platform",
|
|
@@ -74,30 +74,30 @@
|
|
|
74
74
|
"access": "public"
|
|
75
75
|
},
|
|
76
76
|
"dependencies": {
|
|
77
|
-
"@multiplatform.one/components": "7.34.
|
|
78
|
-
"@multiplatform.one/forms": "7.34.
|
|
79
|
-
"@multiplatform.one/platform": "7.34.
|
|
80
|
-
"@multiplatform.one/rich-text": "7.34.
|
|
81
|
-
"@multiplatform.one/router": "7.34.
|
|
82
|
-
"@multiplatform.one/table-primitives": "7.34.
|
|
83
|
-
"@multiplatform.one/theme": "7.34.
|
|
77
|
+
"@multiplatform.one/components": "7.34.2",
|
|
78
|
+
"@multiplatform.one/forms": "7.34.2",
|
|
79
|
+
"@multiplatform.one/platform": "7.34.2",
|
|
80
|
+
"@multiplatform.one/rich-text": "7.34.2",
|
|
81
|
+
"@multiplatform.one/router": "7.34.2",
|
|
82
|
+
"@multiplatform.one/table-primitives": "7.34.2",
|
|
83
|
+
"@multiplatform.one/theme": "7.34.2",
|
|
84
84
|
"@phosphor-icons/react": "^2.1.10",
|
|
85
85
|
"@shopify/flash-list": "^2.3.1",
|
|
86
86
|
"@tamagui/roving-focus": "2.7.6",
|
|
87
87
|
"@tanstack/react-table": "^8.21.3",
|
|
88
|
-
"@tanstack/react-virtual": "^3.
|
|
88
|
+
"@tanstack/react-virtual": "^3.14.20",
|
|
89
89
|
"@tanstack/table-core": "^8.21.3",
|
|
90
90
|
"tamagui": "2.7.6"
|
|
91
91
|
},
|
|
92
92
|
"devDependencies": {
|
|
93
|
-
"@multiplatform.one/config": "7.34.
|
|
94
|
-
"@multiplatform.one/router": "7.34.
|
|
95
|
-
"@multiplatform.one/storybook": "7.34.
|
|
96
|
-
"@multiplatform.one/test-utils": "7.34.
|
|
93
|
+
"@multiplatform.one/config": "7.34.2",
|
|
94
|
+
"@multiplatform.one/router": "7.34.2",
|
|
95
|
+
"@multiplatform.one/storybook": "7.34.2",
|
|
96
|
+
"@multiplatform.one/test-utils": "7.34.2",
|
|
97
97
|
"@tamagui/build": "2.7.6",
|
|
98
|
-
"@testing-library/react": "^16.3.
|
|
98
|
+
"@testing-library/react": "^16.3.3",
|
|
99
99
|
"@types/react-dom": "^19.2.3",
|
|
100
|
-
"@vitejs/plugin-react": "^6.
|
|
100
|
+
"@vitejs/plugin-react": "^6.1.2",
|
|
101
101
|
"@vitest/coverage-v8": "^4.1.5",
|
|
102
102
|
"i18next": "^25.10.10",
|
|
103
103
|
"react": "19.2.5",
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Infinite mode tail, shared by the web and native roots: the load-more
|
|
3
3
|
* trigger each platform supplies, an append skeleton bounded by the actual
|
|
4
|
-
* load (no infinite spinner),
|
|
5
|
-
* (DG-ST-01/04)
|
|
4
|
+
* load (no infinite spinner), an honest, announced end-of-data state
|
|
5
|
+
* (DG-ST-01/04), and a failed append as a retryable error that keeps the
|
|
6
|
+
* loaded rows above it (LC-84).
|
|
6
7
|
*/
|
|
7
8
|
|
|
8
|
-
import { Skeleton } from "@multiplatform.one/components";
|
|
9
|
+
import { AsyncBoundary, Skeleton } from "@multiplatform.one/components";
|
|
9
10
|
import type { ReactNode } from "react";
|
|
10
11
|
import { useTranslation } from "react-i18next";
|
|
11
12
|
import { Text, View } from "tamagui";
|
|
@@ -35,6 +36,23 @@ export function DataTableInfiniteTail({
|
|
|
35
36
|
sentinel,
|
|
36
37
|
}: DataTableInfiniteTailProps) {
|
|
37
38
|
const { t } = useTranslation();
|
|
39
|
+
if (infinite.appendError) {
|
|
40
|
+
return (
|
|
41
|
+
<View
|
|
42
|
+
flexDirection="column"
|
|
43
|
+
width="100%"
|
|
44
|
+
paddingVertical="$2"
|
|
45
|
+
{...({ "data-testid": "infinite-append-error" } as any)}
|
|
46
|
+
>
|
|
47
|
+
<AsyncBoundary
|
|
48
|
+
error={infinite.appendError}
|
|
49
|
+
onRetry={infinite.retryAppend}
|
|
50
|
+
errorTitle={t("Couldn't load more rows")}
|
|
51
|
+
compact
|
|
52
|
+
/>
|
|
53
|
+
</View>
|
|
54
|
+
);
|
|
55
|
+
}
|
|
38
56
|
return (
|
|
39
57
|
<View flexDirection="column" width="100%">
|
|
40
58
|
{sentinel}
|
|
@@ -418,7 +418,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
418
418
|
// while the sentinel stays on screen.
|
|
419
419
|
const sentinelRef = useRef<HTMLElement | null>(null);
|
|
420
420
|
React.useEffect(() => {
|
|
421
|
-
if (!infinite || isVirtualized || infinite.exhausted) return;
|
|
421
|
+
if (!infinite || isVirtualized || infinite.exhausted || infinite.appendError) return;
|
|
422
422
|
if (!isWeb || typeof IntersectionObserver === "undefined") return;
|
|
423
423
|
const node = sentinelRef.current;
|
|
424
424
|
if (!node) return;
|
|
@@ -432,7 +432,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
432
432
|
);
|
|
433
433
|
observer.observe(node);
|
|
434
434
|
return () => observer.disconnect();
|
|
435
|
-
}, [!!infinite, infinite?.exhausted, isVirtualized, tableRows.length]);
|
|
435
|
+
}, [!!infinite, infinite?.exhausted, !!infinite?.appendError, isVirtualized, tableRows.length]);
|
|
436
436
|
|
|
437
437
|
const isFlexLayout = columnLayout !== "auto";
|
|
438
438
|
const displayMode = isFlexLayout ? ("flex" as const) : ("table" as const);
|
|
@@ -1262,11 +1262,12 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
1262
1262
|
// skeleton only when there are no rows to hold (first load).
|
|
1263
1263
|
const resolvedAriaLabel = ariaLabel || t("Data table");
|
|
1264
1264
|
const isRefetching = queryInFlight;
|
|
1265
|
-
|
|
1265
|
+
const loadError = state.error ?? infinite?.error;
|
|
1266
|
+
if (loadError) {
|
|
1266
1267
|
return (
|
|
1267
1268
|
<AsyncBoundary
|
|
1268
|
-
error={
|
|
1269
|
-
onRetry={onRetry}
|
|
1269
|
+
error={loadError}
|
|
1270
|
+
onRetry={state.error ? onRetry : infinite?.retry}
|
|
1270
1271
|
layout="table"
|
|
1271
1272
|
errorTitle={t("Couldn't load table")}
|
|
1272
1273
|
compact
|
|
@@ -2241,7 +2242,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
2241
2242
|
fontSize={knobProps.sizeToken}
|
|
2242
2243
|
gapProps={knobProps.gap}
|
|
2243
2244
|
sentinel={
|
|
2244
|
-
!isVirtualized && !infinite.exhausted && isWeb ? (
|
|
2245
|
+
!isVirtualized && !infinite.exhausted && !infinite.appendError && isWeb ? (
|
|
2245
2246
|
<View
|
|
2246
2247
|
// @ts-ignore web ref for IntersectionObserver
|
|
2247
2248
|
ref={sentinelRef as any}
|
|
@@ -695,11 +695,12 @@ function DataTableRoot<TData extends Record<string, any> = Record<string, any>>(
|
|
|
695
695
|
};
|
|
696
696
|
|
|
697
697
|
// W9 / DG-ST-01,02,04 — error wins over empty; initial load uses table skeleton.
|
|
698
|
-
|
|
698
|
+
const loadError = state.error ?? infinite?.error;
|
|
699
|
+
if (loadError) {
|
|
699
700
|
return (
|
|
700
701
|
<AsyncBoundary
|
|
701
|
-
error={
|
|
702
|
-
onRetry={onRetry}
|
|
702
|
+
error={loadError}
|
|
703
|
+
onRetry={state.error ? onRetry : infinite?.retry}
|
|
703
704
|
layout="table"
|
|
704
705
|
errorTitle={t("Couldn't load table")}
|
|
705
706
|
compact
|
|
@@ -1056,7 +1057,7 @@ function DataTableRoot<TData extends Record<string, any> = Record<string, any>>(
|
|
|
1056
1057
|
fontSize={knobProps.sizeToken}
|
|
1057
1058
|
gapProps={knobProps.gap}
|
|
1058
1059
|
sentinel={
|
|
1059
|
-
!isVirtualGrid && !infinite.exhausted ? (
|
|
1060
|
+
!isVirtualGrid && !infinite.exhausted && !infinite.appendError ? (
|
|
1060
1061
|
<NativeInfiniteSentinel
|
|
1061
1062
|
onVisible={infinite.loadMore}
|
|
1062
1063
|
leadPx={INFINITE_TRIGGER_ROWS * rowHeightPx}
|
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
8
|
-
import { waitFor } from "@testing-library/react";
|
|
9
|
-
import
|
|
8
|
+
import { screen, waitFor } from "@testing-library/react";
|
|
9
|
+
import userEvent from "@testing-library/user-event";
|
|
10
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
10
11
|
import type { DataTableColumn, PageLoadQuery, PageLoadResult } from "../../types";
|
|
11
12
|
import { DataTable } from "./index";
|
|
12
13
|
|
|
@@ -115,4 +116,92 @@ describe("DataTable paginationMode", () => {
|
|
|
115
116
|
// Exactly one page-0 probe; nothing else to prefetch.
|
|
116
117
|
expect(loader.mock.calls.map(([q]) => q.pageIndex)).toEqual([0]);
|
|
117
118
|
});
|
|
119
|
+
|
|
120
|
+
// MPO-485 / LC-84 DG-ST-01: empty is not error is not loading.
|
|
121
|
+
describe("loader failures", () => {
|
|
122
|
+
afterEach(() => {
|
|
123
|
+
vi.unstubAllGlobals();
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
it("a rejected page 0 renders error chrome with Retry, never the empty state", async () => {
|
|
127
|
+
let fail = true;
|
|
128
|
+
const loader = vi.fn(async (q: PageLoadQuery): Promise<PageLoadResult<Row>> => {
|
|
129
|
+
if (fail) throw new Error("Pokemon is being migrated");
|
|
130
|
+
const start = q.pageIndex * q.pageSize;
|
|
131
|
+
return { rows: rows.slice(start, start + q.pageSize), totalCount: rows.length };
|
|
132
|
+
});
|
|
133
|
+
const user = userEvent.setup();
|
|
134
|
+
const { container } = renderWithProviders(
|
|
135
|
+
<DataTable
|
|
136
|
+
data={[]}
|
|
137
|
+
columns={columns}
|
|
138
|
+
readOnly
|
|
139
|
+
paginationMode="infinite"
|
|
140
|
+
loadPage={loader}
|
|
141
|
+
initialState={{ pagination: { pageIndex: 0, pageSize: 10 } }}
|
|
142
|
+
/>,
|
|
143
|
+
);
|
|
144
|
+
|
|
145
|
+
await waitFor(() =>
|
|
146
|
+
expect(container.querySelector('[data-async-state="error"]')).not.toBeNull(),
|
|
147
|
+
);
|
|
148
|
+
expect(screen.getByText("Pokemon is being migrated")).toBeDefined();
|
|
149
|
+
expect(screen.queryByText("No data available")).toBeNull();
|
|
150
|
+
|
|
151
|
+
fail = false;
|
|
152
|
+
await user.click(screen.getByText("Retry"));
|
|
153
|
+
await waitFor(() => expect(screen.getByText("Row 1")).toBeDefined());
|
|
154
|
+
expect(container.querySelector('[data-async-state="error"]')).toBeNull();
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
it("a rejected append keeps the loaded rows and shows a retryable tail error", async () => {
|
|
158
|
+
// jsdom has no layout: the sentinel reports in view on observe, like a
|
|
159
|
+
// short page whose tail is on screen.
|
|
160
|
+
vi.stubGlobal(
|
|
161
|
+
"IntersectionObserver",
|
|
162
|
+
class {
|
|
163
|
+
private cb: IntersectionObserverCallback;
|
|
164
|
+
constructor(cb: IntersectionObserverCallback) {
|
|
165
|
+
this.cb = cb;
|
|
166
|
+
}
|
|
167
|
+
observe() {
|
|
168
|
+
this.cb([{ isIntersecting: true } as IntersectionObserverEntry], this as any);
|
|
169
|
+
}
|
|
170
|
+
disconnect() {}
|
|
171
|
+
unobserve() {}
|
|
172
|
+
takeRecords() {
|
|
173
|
+
return [];
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
);
|
|
177
|
+
let failAppend = true;
|
|
178
|
+
const loader = vi.fn(async (q: PageLoadQuery): Promise<PageLoadResult<Row>> => {
|
|
179
|
+
if (q.pageIndex > 0 && failAppend) throw new Error("Row read refused");
|
|
180
|
+
const start = q.pageIndex * q.pageSize;
|
|
181
|
+
return { rows: rows.slice(start, start + q.pageSize), totalCount: rows.length };
|
|
182
|
+
});
|
|
183
|
+
const user = userEvent.setup();
|
|
184
|
+
const { container } = renderWithProviders(
|
|
185
|
+
<DataTable
|
|
186
|
+
data={[]}
|
|
187
|
+
columns={columns}
|
|
188
|
+
readOnly
|
|
189
|
+
paginationMode="infinite"
|
|
190
|
+
loadPage={loader}
|
|
191
|
+
initialState={{ pagination: { pageIndex: 0, pageSize: 10 } }}
|
|
192
|
+
/>,
|
|
193
|
+
);
|
|
194
|
+
|
|
195
|
+
await waitFor(() => expect(screen.getByText("Row read refused")).toBeDefined());
|
|
196
|
+
expect(screen.getByText("Row 1")).toBeDefined();
|
|
197
|
+
expect(screen.getByText("Row 10")).toBeDefined();
|
|
198
|
+
expect(screen.queryByText("End of results")).toBeNull();
|
|
199
|
+
expect(container.querySelector('[data-testid="infinite-append-error"]')).not.toBeNull();
|
|
200
|
+
|
|
201
|
+
failAppend = false;
|
|
202
|
+
await user.click(screen.getByText("Retry"));
|
|
203
|
+
await waitFor(() => expect(screen.getByText("Row 11")).toBeDefined());
|
|
204
|
+
expect(screen.queryByText("Row read refused")).toBeNull();
|
|
205
|
+
});
|
|
206
|
+
});
|
|
118
207
|
});
|
|
@@ -709,6 +709,10 @@ export function useDataTable<TData extends DataTableData = DataTableData>({
|
|
|
709
709
|
: infiniteRows.loadedPages * pagination.pageSize >= rowModelCount,
|
|
710
710
|
isInitialLoading: infiniteRows.isInitialLoading,
|
|
711
711
|
isAppending: infiniteRows.isAppending,
|
|
712
|
+
error: infiniteRows.error,
|
|
713
|
+
retry: infiniteRows.retry,
|
|
714
|
+
appendError: infiniteRows.appendError,
|
|
715
|
+
retryAppend: infiniteRows.retryAppend,
|
|
712
716
|
loadMore: loadMoreInfinite,
|
|
713
717
|
}
|
|
714
718
|
: undefined;
|
|
@@ -216,6 +216,90 @@ describe("useInfiniteRows", () => {
|
|
|
216
216
|
});
|
|
217
217
|
});
|
|
218
218
|
|
|
219
|
+
// MPO-485 / LC-84 DG-ST-01: a failed load is an error, never an empty list.
|
|
220
|
+
describe("loader mode failures", () => {
|
|
221
|
+
it("keeps a failed page 0 as an error instead of settling empty", async () => {
|
|
222
|
+
const loader = vi.fn(async (_q: PageLoadQuery): Promise<PageLoadResult<Row>> => {
|
|
223
|
+
throw new Error("Pokemon is being migrated");
|
|
224
|
+
});
|
|
225
|
+
const { result } = renderHook(() => useInfiniteRows<Row>({ ...baseQuery, loadPage: loader }));
|
|
226
|
+
|
|
227
|
+
await waitFor(() => expect(result.current.error).toBeInstanceOf(Error));
|
|
228
|
+
expect(result.current.error?.message).toBe("Pokemon is being migrated");
|
|
229
|
+
expect(result.current.isInitialLoading).toBe(false);
|
|
230
|
+
expect(result.current.rows).toEqual([]);
|
|
231
|
+
expect(result.current.exhausted).toBe(false);
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
it("retry re-runs page 0 and the rows land when it succeeds", async () => {
|
|
235
|
+
let fail = true;
|
|
236
|
+
const ok = makeInstantLoader();
|
|
237
|
+
const loader = vi.fn(async (q: PageLoadQuery): Promise<PageLoadResult<Row>> => {
|
|
238
|
+
if (fail) throw new Error("timed out");
|
|
239
|
+
return ok(q);
|
|
240
|
+
});
|
|
241
|
+
const { result } = renderHook(() => useInfiniteRows<Row>({ ...baseQuery, loadPage: loader }));
|
|
242
|
+
await waitFor(() => expect(result.current.error).toBeDefined());
|
|
243
|
+
|
|
244
|
+
fail = false;
|
|
245
|
+
act(() => result.current.retry());
|
|
246
|
+
expect(result.current.isInitialLoading).toBe(true);
|
|
247
|
+
await waitFor(() => expect(result.current.rows).toHaveLength(20));
|
|
248
|
+
expect(result.current.error).toBeUndefined();
|
|
249
|
+
expect(loader.mock.calls.filter(([q]) => q.pageIndex === 0)).toHaveLength(2);
|
|
250
|
+
});
|
|
251
|
+
|
|
252
|
+
it("a failed append keeps the loaded rows and a retryable tail error", async () => {
|
|
253
|
+
let failAppend = true;
|
|
254
|
+
const ok = makeInstantLoader();
|
|
255
|
+
const loader = vi.fn(async (q: PageLoadQuery): Promise<PageLoadResult<Row>> => {
|
|
256
|
+
if (q.pageIndex > 0 && failAppend) throw new Error("Row read refused");
|
|
257
|
+
return ok(q);
|
|
258
|
+
});
|
|
259
|
+
const { result } = renderHook(() => useInfiniteRows<Row>({ ...baseQuery, loadPage: loader }));
|
|
260
|
+
await waitFor(() => expect(result.current.rows).toHaveLength(20));
|
|
261
|
+
await act(async () => {});
|
|
262
|
+
|
|
263
|
+
await act(async () => {
|
|
264
|
+
result.current.loadMore();
|
|
265
|
+
});
|
|
266
|
+
await waitFor(() => expect(result.current.appendError).toBeInstanceOf(Error));
|
|
267
|
+
expect(result.current.appendError?.message).toBe("Row read refused");
|
|
268
|
+
expect(result.current.rows).toHaveLength(20);
|
|
269
|
+
expect(result.current.error).toBeUndefined();
|
|
270
|
+
expect(result.current.exhausted).toBe(false);
|
|
271
|
+
expect(result.current.isAppending).toBe(false);
|
|
272
|
+
|
|
273
|
+
// The sentinel stays in view after a failure; loadMore must not spin.
|
|
274
|
+
const callsAfterFailure = loader.mock.calls.length;
|
|
275
|
+
act(() => result.current.loadMore());
|
|
276
|
+
expect(loader.mock.calls.length).toBe(callsAfterFailure);
|
|
277
|
+
|
|
278
|
+
failAppend = false;
|
|
279
|
+
await act(async () => {
|
|
280
|
+
result.current.retryAppend();
|
|
281
|
+
});
|
|
282
|
+
await waitFor(() => expect(result.current.rows).toHaveLength(40));
|
|
283
|
+
expect(result.current.appendError).toBeUndefined();
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
it("a query change clears a page 0 error", async () => {
|
|
287
|
+
const loader = vi.fn(async (q: PageLoadQuery): Promise<PageLoadResult<Row>> => {
|
|
288
|
+
if (q.globalFilter === "") throw new Error("bad");
|
|
289
|
+
return { rows: ROWS.slice(0, 5), totalCount: 5 };
|
|
290
|
+
});
|
|
291
|
+
const { result, rerender } = renderHook(
|
|
292
|
+
({ globalFilter }: { globalFilter: string }) =>
|
|
293
|
+
useInfiniteRows<Row>({ ...baseQuery, globalFilter, loadPage: loader }),
|
|
294
|
+
{ initialProps: { globalFilter: "" } },
|
|
295
|
+
);
|
|
296
|
+
await waitFor(() => expect(result.current.error).toBeDefined());
|
|
297
|
+
rerender({ globalFilter: "x" });
|
|
298
|
+
await waitFor(() => expect(result.current.rows).toHaveLength(5));
|
|
299
|
+
expect(result.current.error).toBeUndefined();
|
|
300
|
+
});
|
|
301
|
+
});
|
|
302
|
+
|
|
219
303
|
describe("client mode", () => {
|
|
220
304
|
it("reveals chunks and clamps at the row-model count", () => {
|
|
221
305
|
const { result } = renderHook(() => useInfiniteRows<Row>({ ...baseQuery }));
|
|
@@ -59,12 +59,27 @@ export interface UseInfiniteRowsReturn<TData = any> {
|
|
|
59
59
|
isPlaceholderData: boolean;
|
|
60
60
|
/** Loader mode: a page append is awaiting the loader (cache miss) */
|
|
61
61
|
isAppending: boolean;
|
|
62
|
+
/** Loader mode: page 0 for the current query failed (LC-84: an error, never empty) */
|
|
63
|
+
error?: Error;
|
|
64
|
+
/** Re-run page 0 for the current query after a failure */
|
|
65
|
+
retry: () => void;
|
|
66
|
+
/**
|
|
67
|
+
* Loader mode: the last append failed. Loaded rows stay; loadMore is a no-op
|
|
68
|
+
* until retryAppend, so an in-view sentinel cannot spin on a failing page.
|
|
69
|
+
*/
|
|
70
|
+
appendError?: Error;
|
|
71
|
+
/** Clear the append error and load the next page again */
|
|
72
|
+
retryAppend: () => void;
|
|
62
73
|
/** Append the next page (loader mode) */
|
|
63
74
|
loadMore: () => void;
|
|
64
75
|
/** Reveal the next chunk (client mode); maxRowCount clamps exhaustion */
|
|
65
76
|
loadMoreClient: (maxRowCount: number) => void;
|
|
66
77
|
}
|
|
67
78
|
|
|
79
|
+
function toError(reason: unknown): Error {
|
|
80
|
+
return reason instanceof Error ? reason : new Error(String(reason ?? ""));
|
|
81
|
+
}
|
|
82
|
+
|
|
68
83
|
function isLastPage(result: PageLoadResult, pagesLoaded: number, pageSize: number): boolean {
|
|
69
84
|
if (result.rows.length < pageSize) return true;
|
|
70
85
|
if (result.totalCount != null && pagesLoaded * pageSize >= result.totalCount) return true;
|
|
@@ -113,6 +128,11 @@ export function useInfiniteRows<TData = any>({
|
|
|
113
128
|
const [isFetching, setIsFetching] = useState(false);
|
|
114
129
|
const [isPlaceholderData, setIsPlaceholderData] = useState(false);
|
|
115
130
|
const [isAppending, setIsAppending] = useState(false);
|
|
131
|
+
const [error, setError] = useState<Error | undefined>(undefined);
|
|
132
|
+
const [appendError, setAppendError] = useState<Error | undefined>(undefined);
|
|
133
|
+
const appendErrorRef = useRef<Error | undefined>(undefined);
|
|
134
|
+
appendErrorRef.current = appendError;
|
|
135
|
+
const [retryToken, setRetryToken] = useState(0);
|
|
116
136
|
/** True after the first successful page-0 settle — later query-key
|
|
117
137
|
* changes keep the previous rows (or an empty body) mounted. */
|
|
118
138
|
const hasLoadedRef = useRef(false);
|
|
@@ -169,6 +189,9 @@ export function useInfiniteRows<TData = any>({
|
|
|
169
189
|
appendPendingRef.current = false;
|
|
170
190
|
setExhausted(false);
|
|
171
191
|
setIsAppending(false);
|
|
192
|
+
setError(undefined);
|
|
193
|
+
setAppendError(undefined);
|
|
194
|
+
appendErrorRef.current = undefined;
|
|
172
195
|
const keepPlaceholder = hasLoadedRef.current;
|
|
173
196
|
if (keepPlaceholder) {
|
|
174
197
|
setIsFetching(true);
|
|
@@ -194,12 +217,21 @@ export function useInfiniteRows<TData = any>({
|
|
|
194
217
|
// Prefetch-ahead: page 1 starts loading while the user views page 0.
|
|
195
218
|
if (!done) void ensurePage(1);
|
|
196
219
|
})
|
|
197
|
-
.catch(() => {
|
|
220
|
+
.catch((reason: unknown) => {
|
|
198
221
|
if (generation !== generationRef.current) return;
|
|
222
|
+
setPages([]);
|
|
223
|
+
setTotalCount(undefined);
|
|
224
|
+
setError(toError(reason));
|
|
199
225
|
setIsInitialLoading(false);
|
|
200
226
|
setIsFetching(false);
|
|
227
|
+
setIsPlaceholderData(false);
|
|
201
228
|
});
|
|
202
|
-
}, [enabled, isLoaderMode, queryKey, ensurePage]);
|
|
229
|
+
}, [enabled, isLoaderMode, queryKey, retryToken, ensurePage]);
|
|
230
|
+
|
|
231
|
+
const retry = useCallback(() => {
|
|
232
|
+
if (!enabled || !loadPageRef.current) return;
|
|
233
|
+
setRetryToken((n) => n + 1);
|
|
234
|
+
}, [enabled]);
|
|
203
235
|
|
|
204
236
|
const rows = useMemo(() => pages.flat(), [pages]);
|
|
205
237
|
const rowsLoadedRef = useRef(0);
|
|
@@ -214,6 +246,7 @@ export function useInfiniteRows<TData = any>({
|
|
|
214
246
|
const loadMore = useCallback(() => {
|
|
215
247
|
if (!enabled || !loadPageRef.current) return;
|
|
216
248
|
if (exhaustedRef.current || initialLoadingRef.current || appendPendingRef.current) return;
|
|
249
|
+
if (appendErrorRef.current) return;
|
|
217
250
|
const generation = generationRef.current;
|
|
218
251
|
const nextPage = pagesLoadedRef.current;
|
|
219
252
|
appendPendingRef.current = true;
|
|
@@ -249,13 +282,22 @@ export function useInfiniteRows<TData = any>({
|
|
|
249
282
|
if (generation !== generationRef.current) return;
|
|
250
283
|
appendResult(result);
|
|
251
284
|
})
|
|
252
|
-
.catch(() => {
|
|
285
|
+
.catch((reason: unknown) => {
|
|
253
286
|
if (generation !== generationRef.current) return;
|
|
254
287
|
appendPendingRef.current = false;
|
|
255
288
|
setIsAppending(false);
|
|
289
|
+
const failure = toError(reason);
|
|
290
|
+
appendErrorRef.current = failure;
|
|
291
|
+
setAppendError(failure);
|
|
256
292
|
});
|
|
257
293
|
}, [enabled, ensurePage]);
|
|
258
294
|
|
|
295
|
+
const retryAppend = useCallback(() => {
|
|
296
|
+
appendErrorRef.current = undefined;
|
|
297
|
+
setAppendError(undefined);
|
|
298
|
+
loadMore();
|
|
299
|
+
}, [loadMore]);
|
|
300
|
+
|
|
259
301
|
return {
|
|
260
302
|
isLoaderMode,
|
|
261
303
|
rows,
|
|
@@ -266,6 +308,10 @@ export function useInfiniteRows<TData = any>({
|
|
|
266
308
|
isFetching,
|
|
267
309
|
isPlaceholderData,
|
|
268
310
|
isAppending,
|
|
311
|
+
error: isLoaderMode ? error : undefined,
|
|
312
|
+
retry,
|
|
313
|
+
appendError: isLoaderMode ? appendError : undefined,
|
|
314
|
+
retryAppend,
|
|
269
315
|
loadMore,
|
|
270
316
|
loadMoreClient,
|
|
271
317
|
};
|
package/src/types.ts
CHANGED
|
@@ -367,7 +367,15 @@ export interface DataTableInfiniteState {
|
|
|
367
367
|
isInitialLoading: boolean;
|
|
368
368
|
/** A page append is awaiting the loader (cache miss / in-flight prefetch) */
|
|
369
369
|
isAppending: boolean;
|
|
370
|
-
/**
|
|
370
|
+
/** Page 0 for the current query failed (loader mode); the root renders error chrome */
|
|
371
|
+
error?: Error;
|
|
372
|
+
/** Re-run the failed page 0 */
|
|
373
|
+
retry: () => void;
|
|
374
|
+
/** The last append failed (loader mode); loaded rows stay and the tail offers Retry */
|
|
375
|
+
appendError?: Error;
|
|
376
|
+
/** Retry the failed append */
|
|
377
|
+
retryAppend: () => void;
|
|
378
|
+
/** Append the next page (no-op while pending, exhausted or after a failed append) */
|
|
371
379
|
loadMore: () => void;
|
|
372
380
|
}
|
|
373
381
|
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Infinite mode tail, shared by the web and native roots: the load-more
|
|
3
3
|
* trigger each platform supplies, an append skeleton bounded by the actual
|
|
4
|
-
* load (no infinite spinner),
|
|
5
|
-
* (DG-ST-01/04)
|
|
4
|
+
* load (no infinite spinner), an honest, announced end-of-data state
|
|
5
|
+
* (DG-ST-01/04), and a failed append as a retryable error that keeps the
|
|
6
|
+
* loaded rows above it (LC-84).
|
|
6
7
|
*/
|
|
7
8
|
import type { ReactNode } from "react";
|
|
8
9
|
import type { DataTableInfiniteState } from "../../types";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTableInfiniteTail.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/DataTableInfiniteTail.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"DataTableInfiniteTail.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/DataTableInfiniteTail.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAG1D,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,sBAAsB,CAAC;IACjC,gDAAgD;IAChD,YAAY,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,kBAAkB,EAAE,OAAO,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,GAAG,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,wBAAgB,qBAAqB,CAAC,EACpC,QAAQ,EACR,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,QAAQ,GACT,EAAE,0BAA0B,2CA2E5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTableRoot.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/DataTableRoot.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAcH,OAAO,KAA4D,MAAM,OAAO,CAAC;AAQjF,OAAO,KAAK,EAIV,cAAc,EAEf,MAAM,aAAa,CAAC;AAkDrB,MAAM,WAAW,kBAAkB,CACjC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACvD,SAAQ,cAAc,CAAC,KAAK,CAAC;IAC7B,mDAAmD;IACnD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,0CAA0C;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,aAAa,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EACrF,IAAI,EACJ,OAAO,EACP,YAAY,EACZ,eAAe,EACf,aAAa,EACb,OAAO,EACP,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,cAAc,EAC1B,WAAmB,EACnB,aAAmB,EACnB,WAAW,EACX,eAAuB,EACvB,gBAAwB,EACxB,aAAqB,EACrB,eAAsB,EACtB,gBAAgB,EAChB,aAAoB,EACpB,gBAAuB,EACvB,eAAe,EACf,cAAwB,EACxB,QAAQ,EACR,cAAc,EACd,sBAA6B,EAC7B,oBAA4B,EAC5B,oBAA4B,EAC5B,kBAAyB,EACzB,WAAmB,EACnB,YAAsB,EACtB,MAAe,EACf,oBAA4B,EAC5B,oBAAoB,EACpB,sBAA0B,EAC1B,kBAA0B,EAC1B,kBAAkB,EAClB,UAAU,EACV,mBAA2B,EAC3B,gBAAoB,EACpB,cAAsB,EACtB,wBAAgC,EAChC,UAAU,EACV,QAAQ,EACR,kBAA0B,EAC1B,cAAc,EAAE,kBAAkB,EAClC,WAAW,EACX,QAAgB,EAChB,YAAY,EACZ,IAAI,EACJ,IAAI,EAAE,QAAQ,EACd,cAAsB,EACtB,UAAkB,EAClB,aAAqB,EACrB,OAAW,EACX,OAAO,EACP,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,aAAa,EAAE,cAAc,EAC7B,SAAS,EACT,IAAI,EACJ,OAAe,EACf,QAAgB,EAChB,MAAM,EACN,KAAK,EACL,OAAO,EACP,OAAO,EACP,QAAQ,EACR,YAAY,EAAE,SAAS,EACvB,kBAAkB,EAAE,eAAe,EACnC,GAAG,KAAK,EACT,EAAE,kBAAkB,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"DataTableRoot.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/DataTableRoot.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAcH,OAAO,KAA4D,MAAM,OAAO,CAAC;AAQjF,OAAO,KAAK,EAIV,cAAc,EAEf,MAAM,aAAa,CAAC;AAkDrB,MAAM,WAAW,kBAAkB,CACjC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACvD,SAAQ,cAAc,CAAC,KAAK,CAAC;IAC7B,mDAAmD;IACnD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,0CAA0C;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,aAAa,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EACrF,IAAI,EACJ,OAAO,EACP,YAAY,EACZ,eAAe,EACf,aAAa,EACb,OAAO,EACP,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,cAAc,EAC1B,WAAmB,EACnB,aAAmB,EACnB,WAAW,EACX,eAAuB,EACvB,gBAAwB,EACxB,aAAqB,EACrB,eAAsB,EACtB,gBAAgB,EAChB,aAAoB,EACpB,gBAAuB,EACvB,eAAe,EACf,cAAwB,EACxB,QAAQ,EACR,cAAc,EACd,sBAA6B,EAC7B,oBAA4B,EAC5B,oBAA4B,EAC5B,kBAAyB,EACzB,WAAmB,EACnB,YAAsB,EACtB,MAAe,EACf,oBAA4B,EAC5B,oBAAoB,EACpB,sBAA0B,EAC1B,kBAA0B,EAC1B,kBAAkB,EAClB,UAAU,EACV,mBAA2B,EAC3B,gBAAoB,EACpB,cAAsB,EACtB,wBAAgC,EAChC,UAAU,EACV,QAAQ,EACR,kBAA0B,EAC1B,cAAc,EAAE,kBAAkB,EAClC,WAAW,EACX,QAAgB,EAChB,YAAY,EACZ,IAAI,EACJ,IAAI,EAAE,QAAQ,EACd,cAAsB,EACtB,UAAkB,EAClB,aAAqB,EACrB,OAAW,EACX,OAAO,EACP,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,aAAa,EAAE,cAAc,EAC7B,SAAS,EACT,IAAI,EACJ,OAAe,EACf,QAAgB,EAChB,MAAM,EACN,KAAK,EACL,OAAO,EACP,OAAO,EACP,QAAQ,EACR,YAAY,EAAE,SAAS,EACvB,kBAAkB,EAAE,eAAe,EACnC,GAAG,KAAK,EACT,EAAE,kBAAkB,CAAC,KAAK,CAAC,2CA2oE3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.native.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/index.native.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAwBH,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAYzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACnF,YAAY,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AA0D1D,iBAAS,aAAa,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAC9E,IAAI,EACJ,OAAO,EACP,YAAY,EACZ,eAAe,EACf,aAAa,EACb,OAAO,EACP,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,cAAc,EAC1B,WAAmB,EACnB,aAAmB,EACnB,WAAW,EACX,eAAuB,EACvB,gBAAwB,EACxB,aAAqB,EACrB,eAAsB,EACtB,gBAAgB,EAChB,aAAoB,EACpB,gBAAuB,EACvB,eAAe,EACf,cAAwB,EACxB,QAAQ,EACR,cAAc,EACd,sBAA6B,EAC7B,oBAA4B,EAC5B,oBAA4B,EAC5B,kBAAyB,EACzB,WAAmB,EACnB,YAAsB,EACtB,MAAe,EACf,oBAA4B,EAC5B,oBAAoB,EACpB,sBAA0B,EAC1B,kBAA0B,EAC1B,kBAAkB,EAClB,UAAU,EACV,kBAA0B,EAC1B,cAAc,EAAE,kBAAkB,EAClC,WAAW,EACX,mBAA2B,EAC3B,gBAAoB,EACpB,cAAsB,EACtB,wBAAwB,EAAE,yBAAiC,EAC3D,UAAU,EACV,QAAQ,EACR,QAAgB,EAChB,YAAY,EACZ,IAAI,EACJ,IAAI,EAAE,QAAQ,EACd,cAAsB,EACtB,UAAkB,EAClB,aAAqB,EACrB,OAAW,EACX,OAAO,EACP,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,SAAS,EAAE,UAAU,EACrB,IAAI,EACJ,OAAe,EACf,QAAgB,EAChB,MAAM,EACN,KAAK,EACL,OAAO,EACP,OAAO,EACP,QAAQ,EACR,YAAY,EAAE,SAAS,EACvB,kBAAkB,EAAE,eAAe,EACnC,GAAG,KAAK,EACT,EAAE,kBAAkB,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"index.native.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/index.native.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAwBH,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAYzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACnF,YAAY,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AA0D1D,iBAAS,aAAa,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAC9E,IAAI,EACJ,OAAO,EACP,YAAY,EACZ,eAAe,EACf,aAAa,EACb,OAAO,EACP,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,cAAc,EAC1B,WAAmB,EACnB,aAAmB,EACnB,WAAW,EACX,eAAuB,EACvB,gBAAwB,EACxB,aAAqB,EACrB,eAAsB,EACtB,gBAAgB,EAChB,aAAoB,EACpB,gBAAuB,EACvB,eAAe,EACf,cAAwB,EACxB,QAAQ,EACR,cAAc,EACd,sBAA6B,EAC7B,oBAA4B,EAC5B,oBAA4B,EAC5B,kBAAyB,EACzB,WAAmB,EACnB,YAAsB,EACtB,MAAe,EACf,oBAA4B,EAC5B,oBAAoB,EACpB,sBAA0B,EAC1B,kBAA0B,EAC1B,kBAAkB,EAClB,UAAU,EACV,kBAA0B,EAC1B,cAAc,EAAE,kBAAkB,EAClC,WAAW,EACX,mBAA2B,EAC3B,gBAAoB,EACpB,cAAsB,EACtB,wBAAwB,EAAE,yBAAiC,EAC3D,UAAU,EACV,QAAQ,EACR,QAAgB,EAChB,YAAY,EACZ,IAAI,EACJ,IAAI,EAAE,QAAQ,EACd,cAAsB,EACtB,UAAkB,EAClB,aAAqB,EACrB,OAAW,EACX,OAAO,EACP,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,SAAS,EAAE,UAAU,EACrB,IAAI,EACJ,OAAe,EACf,QAAgB,EAChB,MAAM,EACN,KAAK,EACL,OAAO,EACP,OAAO,EACP,QAAQ,EACR,YAAY,EAAE,SAAS,EACvB,kBAAkB,EAAE,eAAe,EACnC,GAAG,KAAK,EACT,EAAE,kBAAkB,CAAC,KAAK,CAAC,2CAw+B3B;AAED,eAAO,MAAM,SAAS;;;;;;;;;;CAUpB,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,OAAO,SAAS,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDataTable.d.ts","sourceRoot":"","sources":["../../src/hooks/useDataTable.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACtC,YAAY,EAAE,CAAC,KACZ,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IACzF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAiID,eAAO,MAAM,iBAAiB;4BA9HkB,MAAM,KAAG,gBAAgB;mCAgIxC,GAAG,eAAe,MAAM;8BAE7B,GAAG,aAAa,GAAG,eAAe,MAAM;6BAzCnB,MAAM,KAAG,gBAAgB;uBA4CrD,gBAAgB;CACpC,CAAC;AAGF,OAAO,KAAK,EAEV,aAAa,EAIb,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,UAAU,CAAC;AA0DlB,wBAAgB,YAAY,CAAC,KAAK,SAAS,aAAa,GAAG,aAAa,EAAE,EACxE,IAAS,EACT,OAAY,EACZ,YAAY,EACZ,eAAe,EACf,aAAa,EACb,WAAmB,EACnB,aAAmB,EACnB,WAAW,EACX,eAAuB,EACvB,gBAAwB,EACxB,aAAqB,EACrB,eAAsB,EACtB,gBAAgB,EAChB,aAAoB,EACpB,gBAAgB,EAAE,iBAAwB,EAC1C,cAAwB,EACxB,QAAQ,EACR,cAAc,EACd,sBAA6B,EAC7B,oBAAoB,EAAE,qBAA6B,EACnD,oBAA4B,EAC5B,kBAAyB,EACzB,WAAW,EAAE,YAAoB,EACjC,kBAA0B,EAC1B,UAAU,EACV,mBAA2B,EAC3B,cAAsB,EACtB,kBAA0B,EAC1B,QAAQ,EACR,SAAS,EACT,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,cAAc,GAC3B,GAAE,mBAAmB,CAAC,KAAK,CAAC,GAAG;IAC9B,WAAW,CAAC,EAAE,gBAAgB,CAAC;CAC3B,GAAG,kBAAkB,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"useDataTable.d.ts","sourceRoot":"","sources":["../../src/hooks/useDataTable.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACtC,YAAY,EAAE,CAAC,KACZ,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IACzF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAiID,eAAO,MAAM,iBAAiB;4BA9HkB,MAAM,KAAG,gBAAgB;mCAgIxC,GAAG,eAAe,MAAM;8BAE7B,GAAG,aAAa,GAAG,eAAe,MAAM;6BAzCnB,MAAM,KAAG,gBAAgB;uBA4CrD,gBAAgB;CACpC,CAAC;AAGF,OAAO,KAAK,EAEV,aAAa,EAIb,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,UAAU,CAAC;AA0DlB,wBAAgB,YAAY,CAAC,KAAK,SAAS,aAAa,GAAG,aAAa,EAAE,EACxE,IAAS,EACT,OAAY,EACZ,YAAY,EACZ,eAAe,EACf,aAAa,EACb,WAAmB,EACnB,aAAmB,EACnB,WAAW,EACX,eAAuB,EACvB,gBAAwB,EACxB,aAAqB,EACrB,eAAsB,EACtB,gBAAgB,EAChB,aAAoB,EACpB,gBAAgB,EAAE,iBAAwB,EAC1C,cAAwB,EACxB,QAAQ,EACR,cAAc,EACd,sBAA6B,EAC7B,oBAAoB,EAAE,qBAA6B,EACnD,oBAA4B,EAC5B,kBAAyB,EACzB,WAAW,EAAE,YAAoB,EACjC,kBAA0B,EAC1B,UAAU,EACV,mBAA2B,EAC3B,cAAsB,EACtB,kBAA0B,EAC1B,QAAQ,EACR,SAAS,EACT,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,cAAc,GAC3B,GAAE,mBAAmB,CAAC,KAAK,CAAC,GAAG;IAC9B,WAAW,CAAC,EAAE,gBAAgB,CAAC;CAC3B,GAAG,kBAAkB,CAAC,KAAK,CAAC,CA6iBjC"}
|
|
@@ -55,6 +55,17 @@ export interface UseInfiniteRowsReturn<TData = any> {
|
|
|
55
55
|
isPlaceholderData: boolean;
|
|
56
56
|
/** Loader mode: a page append is awaiting the loader (cache miss) */
|
|
57
57
|
isAppending: boolean;
|
|
58
|
+
/** Loader mode: page 0 for the current query failed (LC-84: an error, never empty) */
|
|
59
|
+
error?: Error;
|
|
60
|
+
/** Re-run page 0 for the current query after a failure */
|
|
61
|
+
retry: () => void;
|
|
62
|
+
/**
|
|
63
|
+
* Loader mode: the last append failed. Loaded rows stay; loadMore is a no-op
|
|
64
|
+
* until retryAppend, so an in-view sentinel cannot spin on a failing page.
|
|
65
|
+
*/
|
|
66
|
+
appendError?: Error;
|
|
67
|
+
/** Clear the append error and load the next page again */
|
|
68
|
+
retryAppend: () => void;
|
|
58
69
|
/** Append the next page (loader mode) */
|
|
59
70
|
loadMore: () => void;
|
|
60
71
|
/** Reveal the next chunk (client mode); maxRowCount clamps exhaustion */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInfiniteRows.d.ts","sourceRoot":"","sources":["../../src/hooks/useInfiniteRows.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,OAAO,KAAK,EAAE,mBAAmB,EAAkB,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE/F,MAAM,WAAW,sBAAsB,CAAC,KAAK,GAAG,GAAG;IACjD,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,aAAa,EAAE,kBAAkB,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB,CAAC,KAAK,GAAG,GAAG;IAChD,yEAAyE;IACzE,YAAY,EAAE,OAAO,CAAC;IACtB,wEAAwE;IACxE,IAAI,EAAE,KAAK,EAAE,CAAC;IACd,qFAAqF;IACrF,WAAW,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,4FAA4F;IAC5F,gBAAgB,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB,0DAA0D;IAC1D,iBAAiB,EAAE,OAAO,CAAC;IAC3B,qEAAqE;IACrE,WAAW,EAAE,OAAO,CAAC;IACrB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,yEAAyE;IACzE,cAAc,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C;
|
|
1
|
+
{"version":3,"file":"useInfiniteRows.d.ts","sourceRoot":"","sources":["../../src/hooks/useInfiniteRows.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,OAAO,KAAK,EAAE,mBAAmB,EAAkB,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE/F,MAAM,WAAW,sBAAsB,CAAC,KAAK,GAAG,GAAG;IACjD,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,aAAa,EAAE,kBAAkB,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB,CAAC,KAAK,GAAG,GAAG;IAChD,yEAAyE;IACzE,YAAY,EAAE,OAAO,CAAC;IACtB,wEAAwE;IACxE,IAAI,EAAE,KAAK,EAAE,CAAC;IACd,qFAAqF;IACrF,WAAW,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,4FAA4F;IAC5F,gBAAgB,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB,0DAA0D;IAC1D,iBAAiB,EAAE,OAAO,CAAC;IAC3B,qEAAqE;IACrE,WAAW,EAAE,OAAO,CAAC;IACrB,sFAAsF;IACtF,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,0DAA0D;IAC1D,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB;;;OAGG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,yEAAyE;IACzE,cAAc,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C;AAYD,wBAAgB,eAAe,CAAC,KAAK,GAAG,GAAG,EAAE,EAC3C,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,OAAO,EACP,aAAa,EACb,YAAY,GACb,EAAE,sBAAsB,CAAC,KAAK,CAAC,GAAG,qBAAqB,CAAC,KAAK,CAAC,CA6N9D"}
|
package/types/types.d.ts
CHANGED
|
@@ -267,7 +267,15 @@ export interface DataTableInfiniteState {
|
|
|
267
267
|
isInitialLoading: boolean;
|
|
268
268
|
/** A page append is awaiting the loader (cache miss / in-flight prefetch) */
|
|
269
269
|
isAppending: boolean;
|
|
270
|
-
/**
|
|
270
|
+
/** Page 0 for the current query failed (loader mode); the root renders error chrome */
|
|
271
|
+
error?: Error;
|
|
272
|
+
/** Re-run the failed page 0 */
|
|
273
|
+
retry: () => void;
|
|
274
|
+
/** The last append failed (loader mode); loaded rows stay and the tail offers Retry */
|
|
275
|
+
appendError?: Error;
|
|
276
|
+
/** Retry the failed append */
|
|
277
|
+
retryAppend: () => void;
|
|
278
|
+
/** Append the next page (no-op while pending, exhausted or after a failed append) */
|
|
271
279
|
loadMore: () => void;
|
|
272
280
|
}
|
|
273
281
|
export interface TableSorting {
|