@economic/taco 2.0.4 → 2.0.5
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/components/Table3/hooks/useTableDataLoader.d.ts +1 -1
- package/dist/esm/index.css +5 -5
- package/dist/esm/packages/taco/src/components/Table3/hooks/useTableDataLoader.js +13 -12
- package/dist/esm/packages/taco/src/components/Table3/hooks/useTableDataLoader.js.map +1 -1
- package/dist/index.css +5 -5
- package/dist/taco.cjs.development.js +13 -12
- package/dist/taco.cjs.development.js.map +1 -1
- package/dist/taco.cjs.production.min.js +1 -1
- package/dist/taco.cjs.production.min.js.map +1 -1
- package/package.json +2 -2
- package/types.json +1 -9
|
@@ -20,4 +20,4 @@ export declare type useTable3DataFetcherValues<TType = unknown> = {
|
|
|
20
20
|
onSort: Table3SortHandler;
|
|
21
21
|
pageSize: number;
|
|
22
22
|
};
|
|
23
|
-
export declare function useTable3DataLoader<TType = unknown>(fetch: useTable3DataFetcher<TType>, fetchAll: useTable3AllDataFetcher<TType>, options?: useTable3DataOptions): useTable3DataFetcherValues<TType
|
|
23
|
+
export declare function useTable3DataLoader<TType = unknown>(fetch: useTable3DataFetcher<TType>, fetchAll: useTable3AllDataFetcher<TType>, options?: useTable3DataOptions): [useTable3DataFetcherValues<TType>, () => void];
|
package/dist/esm/index.css
CHANGED
|
@@ -669,27 +669,27 @@
|
|
|
669
669
|
}
|
|
670
670
|
|
|
671
671
|
/* hovered row */
|
|
672
|
-
[data-pause-hover='false'] [role='row']:hover [role='cell'] {
|
|
672
|
+
[data-pause-hover='false'] [data-taco='table2-body'] [role='row']:hover [role='cell'] {
|
|
673
673
|
@apply bg-grey-100;
|
|
674
674
|
}
|
|
675
675
|
|
|
676
676
|
/* current row */
|
|
677
|
-
[role='row'][data-current='true'] [role='cell'] {
|
|
677
|
+
[data-taco='table2-body'] [role='row'][data-current='true'] [role='cell'] {
|
|
678
678
|
@apply bg-grey-200;
|
|
679
679
|
}
|
|
680
680
|
|
|
681
681
|
/* selected row */
|
|
682
|
-
[role='row'][data-selected='true']:not([aria-grabbed='true']) [role='cell'] {
|
|
682
|
+
[data-taco='table2-body'] [role='row'][data-selected='true']:not([aria-grabbed='true']) [role='cell'] {
|
|
683
683
|
@apply !bg-blue-100;
|
|
684
684
|
}
|
|
685
685
|
|
|
686
686
|
/* dragging row */
|
|
687
|
-
[role='row'][aria-grabbed='true'] [role='cell'] {
|
|
687
|
+
[data-taco='table2-body'] [role='row'][aria-grabbed='true'] [role='cell'] {
|
|
688
688
|
@apply !wcag-blue-500;
|
|
689
689
|
}
|
|
690
690
|
|
|
691
691
|
/* error row */
|
|
692
|
-
[role='row'][data-error='true'] [role='cell'] {
|
|
692
|
+
[data-taco='table2-body'] [role='row'][data-error='true'] [role='cell'] {
|
|
693
693
|
@apply !bg-red-100/30;
|
|
694
694
|
}
|
|
695
695
|
|
|
@@ -13,14 +13,14 @@ function useTable3DataLoader(fetch, fetchAll, options = {
|
|
|
13
13
|
const [data, setData] = React__default.useState([]);
|
|
14
14
|
// track which pages have been loaded to dedupe requests
|
|
15
15
|
const _pendingPageRequests = React__default.useRef({});
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const
|
|
16
|
+
const _lastUsedSorting = React__default.useRef([]);
|
|
17
|
+
const _lastUsedFilters = React__default.useRef([]);
|
|
18
|
+
const _lastUsedSearch = React__default.useRef();
|
|
19
19
|
const loadPage = function (pageIndex, sorting, filters, search) {
|
|
20
20
|
try {
|
|
21
21
|
let reset = false;
|
|
22
22
|
// sorting or filters changed, reset everything
|
|
23
|
-
if (JSON.stringify(sorting) !== JSON.stringify(
|
|
23
|
+
if (search !== _lastUsedSearch.current || JSON.stringify(sorting) !== JSON.stringify(_lastUsedSorting.current) || JSON.stringify(filters) !== JSON.stringify(_lastUsedFilters.current)) {
|
|
24
24
|
_pendingPageRequests.current = {};
|
|
25
25
|
// nuke the dataset so that we "start again" after sorting
|
|
26
26
|
reset = true;
|
|
@@ -32,11 +32,11 @@ function useTable3DataLoader(fetch, fetchAll, options = {
|
|
|
32
32
|
_pendingPageRequests.current[pageIndex] = true;
|
|
33
33
|
}
|
|
34
34
|
// set the sorting so we can track if it changed between loads
|
|
35
|
-
|
|
35
|
+
_lastUsedSorting.current = sorting;
|
|
36
36
|
// set the filters so we can track if it changed between loads
|
|
37
|
-
|
|
37
|
+
_lastUsedFilters.current = filters;
|
|
38
38
|
// set the search so we can track if it changed between loads
|
|
39
|
-
|
|
39
|
+
_lastUsedSearch.current = search;
|
|
40
40
|
const _temp = _finallyRethrows(function () {
|
|
41
41
|
return _catch(function () {
|
|
42
42
|
return Promise.resolve(fetch(pageIndex, pageSize, sorting, filters, search)).then(function (response) {
|
|
@@ -90,29 +90,30 @@ function useTable3DataLoader(fetch, fetchAll, options = {
|
|
|
90
90
|
return Promise.reject(e);
|
|
91
91
|
}
|
|
92
92
|
};
|
|
93
|
+
const invalidate = () => setData(Array(length.current).fill(undefined));
|
|
93
94
|
// we reset the page to 0 whenever sorting, filtering or search changes
|
|
94
95
|
const handleSort = function (sorting) {
|
|
95
96
|
try {
|
|
96
|
-
return loadPage(0, sorting,
|
|
97
|
+
return loadPage(0, sorting, _lastUsedFilters.current, _lastUsedSearch.current);
|
|
97
98
|
} catch (e) {
|
|
98
99
|
return Promise.reject(e);
|
|
99
100
|
}
|
|
100
101
|
};
|
|
101
102
|
const handleFilter = function (filters) {
|
|
102
103
|
try {
|
|
103
|
-
return loadPage(0,
|
|
104
|
+
return loadPage(0, _lastUsedSorting.current, filters, _lastUsedSearch.current);
|
|
104
105
|
} catch (e) {
|
|
105
106
|
return Promise.reject(e);
|
|
106
107
|
}
|
|
107
108
|
};
|
|
108
109
|
const handleSearch = function (query) {
|
|
109
110
|
try {
|
|
110
|
-
return loadAll(
|
|
111
|
+
return loadAll(_lastUsedSorting.current, _lastUsedFilters.current, query);
|
|
111
112
|
} catch (e) {
|
|
112
113
|
return Promise.reject(e);
|
|
113
114
|
}
|
|
114
115
|
};
|
|
115
|
-
return {
|
|
116
|
+
return [{
|
|
116
117
|
data,
|
|
117
118
|
length: length.current,
|
|
118
119
|
loadAll,
|
|
@@ -121,7 +122,7 @@ function useTable3DataLoader(fetch, fetchAll, options = {
|
|
|
121
122
|
onSearch: handleSearch,
|
|
122
123
|
onSort: handleSort,
|
|
123
124
|
pageSize
|
|
124
|
-
};
|
|
125
|
+
}, invalidate];
|
|
125
126
|
}
|
|
126
127
|
|
|
127
128
|
export { useTable3DataLoader };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTableDataLoader.js","sources":["../../../../../../../../src/components/Table3/hooks/useTableDataLoader.ts"],"sourcesContent":["import React from 'react';\nimport {\n ColumnFilter,\n Table3ColumnSort,\n Table3FilterHandler,\n Table3LoadAllHandler,\n Table3LoadPageHandler,\n Table3SearchHandler,\n Table3SortHandler,\n} from '../types';\n\nexport type useTable3DataFetcher<TType = unknown> = (\n pageIndex: number,\n pageSize: number,\n sorting: Table3ColumnSort[],\n filters: ColumnFilter[],\n search: string | undefined\n) => Promise<{ data: TType[]; length: number }>;\n\nexport type useTable3AllDataFetcher<TType = unknown> = (\n sorting: Table3ColumnSort[],\n filters: ColumnFilter[],\n search: string | undefined\n) => Promise<{ data: TType[]; length: number }>;\n\nexport type useTable3DataOptions = { pageSize: number };\n\nexport type useTable3DataFetcherValues<TType = unknown> = {\n data: TType[];\n length: number | undefined;\n loadAll: Table3LoadAllHandler;\n loadPage: Table3LoadPageHandler;\n onFilter: Table3FilterHandler;\n onSearch: Table3SearchHandler;\n onSort: Table3SortHandler;\n pageSize: number;\n};\n\nexport function useTable3DataLoader<TType = unknown>(\n fetch: useTable3DataFetcher<TType>,\n fetchAll: useTable3AllDataFetcher<TType>,\n options: useTable3DataOptions = { pageSize: 100 }\n): useTable3DataFetcherValues<TType
|
|
1
|
+
{"version":3,"file":"useTableDataLoader.js","sources":["../../../../../../../../src/components/Table3/hooks/useTableDataLoader.ts"],"sourcesContent":["import React from 'react';\nimport {\n ColumnFilter,\n Table3ColumnSort,\n Table3FilterHandler,\n Table3LoadAllHandler,\n Table3LoadPageHandler,\n Table3SearchHandler,\n Table3SortHandler,\n} from '../types';\n\nexport type useTable3DataFetcher<TType = unknown> = (\n pageIndex: number,\n pageSize: number,\n sorting: Table3ColumnSort[],\n filters: ColumnFilter[],\n search: string | undefined\n) => Promise<{ data: TType[]; length: number }>;\n\nexport type useTable3AllDataFetcher<TType = unknown> = (\n sorting: Table3ColumnSort[],\n filters: ColumnFilter[],\n search: string | undefined\n) => Promise<{ data: TType[]; length: number }>;\n\nexport type useTable3DataOptions = { pageSize: number };\n\nexport type useTable3DataFetcherValues<TType = unknown> = {\n data: TType[];\n length: number | undefined;\n loadAll: Table3LoadAllHandler;\n loadPage: Table3LoadPageHandler;\n onFilter: Table3FilterHandler;\n onSearch: Table3SearchHandler;\n onSort: Table3SortHandler;\n pageSize: number;\n};\n\nexport function useTable3DataLoader<TType = unknown>(\n fetch: useTable3DataFetcher<TType>,\n fetchAll: useTable3AllDataFetcher<TType>,\n options: useTable3DataOptions = { pageSize: 100 }\n): [useTable3DataFetcherValues<TType>, () => void] {\n const { pageSize } = options;\n\n // track the data length, we don't know it until the first request\n const length = React.useRef<number | undefined>(undefined);\n // data will be filled after the first request, then we'll update values in place\n const [data, setData] = React.useState<any[]>([]);\n // track which pages have been loaded to dedupe requests\n const _pendingPageRequests = React.useRef({});\n const _lastUsedSorting = React.useRef<Table3ColumnSort[]>([]);\n const _lastUsedFilters = React.useRef<ColumnFilter[]>([]);\n const _lastUsedSearch = React.useRef<string>();\n\n const loadPage = async (\n pageIndex: number,\n sorting: Table3ColumnSort[],\n filters: ColumnFilter[],\n search: string | undefined\n ) => {\n let reset = false;\n\n // sorting or filters changed, reset everything\n if (\n search !== _lastUsedSearch.current ||\n JSON.stringify(sorting) !== JSON.stringify(_lastUsedSorting.current) ||\n JSON.stringify(filters) !== JSON.stringify(_lastUsedFilters.current)\n ) {\n _pendingPageRequests.current = {};\n // nuke the dataset so that we \"start again\" after sorting\n reset = true;\n }\n\n if (_pendingPageRequests.current[pageIndex]) {\n // if page is already loaded/loading, abort, otherwise mark it as loading\n return;\n } else {\n _pendingPageRequests.current[pageIndex] = true;\n }\n\n // set the sorting so we can track if it changed between loads\n _lastUsedSorting.current = sorting;\n // set the filters so we can track if it changed between loads\n _lastUsedFilters.current = filters;\n // set the search so we can track if it changed between loads\n _lastUsedSearch.current = search;\n\n try {\n const response = await fetch(pageIndex, pageSize, sorting, filters, search);\n\n // update state, here we do some \"magic\" to support \"load in place\"\n setData(currentData => {\n let nextData;\n\n // reset table state if:\n // - the length isn't set at all (first load)\n // - the client length and server length are different (the data changed)\n if (reset || length.current !== response.length) {\n length.current = response.length;\n nextData = Array(length.current).fill(undefined);\n } else {\n nextData = [...currentData];\n }\n\n const startIndex = pageIndex * pageSize;\n nextData.splice(startIndex, pageSize, ...response.data);\n return nextData;\n });\n } catch {\n //\n } finally {\n _pendingPageRequests.current[pageIndex] = false;\n }\n };\n\n const loadAll = async (sorting: Table3ColumnSort[], filters: ColumnFilter[], search: string | undefined) => {\n try {\n const response = await fetchAll(sorting, filters, search);\n length.current = response.length;\n\n setData(() => {\n let nextData;\n\n if (response.data.length !== response.length) {\n nextData = Array(response.length).fill(undefined);\n nextData.splice(0, response.data.length, ...response.data);\n } else {\n nextData = [...response.data];\n }\n\n return nextData;\n });\n } catch {\n //\n }\n };\n\n const invalidate = () => setData(Array(length.current).fill(undefined));\n\n // we reset the page to 0 whenever sorting, filtering or search changes\n const handleSort = async (sorting: Table3ColumnSort[]) =>\n loadPage(0, sorting, _lastUsedFilters.current, _lastUsedSearch.current);\n const handleFilter = async (filters: ColumnFilter[]) =>\n loadPage(0, _lastUsedSorting.current, filters, _lastUsedSearch.current);\n const handleSearch = async (query: string) => loadAll(_lastUsedSorting.current, _lastUsedFilters.current, query);\n\n return [\n {\n data,\n length: length.current,\n loadAll,\n loadPage,\n onFilter: handleFilter,\n onSearch: handleSearch as any,\n onSort: handleSort,\n pageSize,\n },\n invalidate,\n ];\n}\n"],"names":["useTable3DataLoader","fetch","fetchAll","options","pageSize","length","React","useRef","undefined","data","setData","useState","_pendingPageRequests","_lastUsedSorting","_lastUsedFilters","_lastUsedSearch","loadPage","pageIndex","sorting","filters","search","reset","current","JSON","stringify","response","currentData","nextData","Array","fill","startIndex","splice","loadAll","invalidate","handleSort","handleFilter","handleSearch","query","onFilter","onSearch","onSort"],"mappings":"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"}
|
package/dist/index.css
CHANGED
|
@@ -669,27 +669,27 @@
|
|
|
669
669
|
}
|
|
670
670
|
|
|
671
671
|
/* hovered row */
|
|
672
|
-
[data-pause-hover='false'] [role='row']:hover [role='cell'] {
|
|
672
|
+
[data-pause-hover='false'] [data-taco='table2-body'] [role='row']:hover [role='cell'] {
|
|
673
673
|
@apply bg-grey-100;
|
|
674
674
|
}
|
|
675
675
|
|
|
676
676
|
/* current row */
|
|
677
|
-
[role='row'][data-current='true'] [role='cell'] {
|
|
677
|
+
[data-taco='table2-body'] [role='row'][data-current='true'] [role='cell'] {
|
|
678
678
|
@apply bg-grey-200;
|
|
679
679
|
}
|
|
680
680
|
|
|
681
681
|
/* selected row */
|
|
682
|
-
[role='row'][data-selected='true']:not([aria-grabbed='true']) [role='cell'] {
|
|
682
|
+
[data-taco='table2-body'] [role='row'][data-selected='true']:not([aria-grabbed='true']) [role='cell'] {
|
|
683
683
|
@apply !bg-blue-100;
|
|
684
684
|
}
|
|
685
685
|
|
|
686
686
|
/* dragging row */
|
|
687
|
-
[role='row'][aria-grabbed='true'] [role='cell'] {
|
|
687
|
+
[data-taco='table2-body'] [role='row'][aria-grabbed='true'] [role='cell'] {
|
|
688
688
|
@apply !wcag-blue-500;
|
|
689
689
|
}
|
|
690
690
|
|
|
691
691
|
/* error row */
|
|
692
|
-
[role='row'][data-error='true'] [role='cell'] {
|
|
692
|
+
[data-taco='table2-body'] [role='row'][data-error='true'] [role='cell'] {
|
|
693
693
|
@apply !bg-red-100/30;
|
|
694
694
|
}
|
|
695
695
|
|
|
@@ -19874,14 +19874,14 @@ function useTable3DataLoader(fetch, fetchAll, options = {
|
|
|
19874
19874
|
const [data, setData] = React__default.useState([]);
|
|
19875
19875
|
// track which pages have been loaded to dedupe requests
|
|
19876
19876
|
const _pendingPageRequests = React__default.useRef({});
|
|
19877
|
-
const
|
|
19878
|
-
const
|
|
19879
|
-
const
|
|
19877
|
+
const _lastUsedSorting = React__default.useRef([]);
|
|
19878
|
+
const _lastUsedFilters = React__default.useRef([]);
|
|
19879
|
+
const _lastUsedSearch = React__default.useRef();
|
|
19880
19880
|
const loadPage = function (pageIndex, sorting, filters, search) {
|
|
19881
19881
|
try {
|
|
19882
19882
|
let reset = false;
|
|
19883
19883
|
// sorting or filters changed, reset everything
|
|
19884
|
-
if (JSON.stringify(sorting) !== JSON.stringify(
|
|
19884
|
+
if (search !== _lastUsedSearch.current || JSON.stringify(sorting) !== JSON.stringify(_lastUsedSorting.current) || JSON.stringify(filters) !== JSON.stringify(_lastUsedFilters.current)) {
|
|
19885
19885
|
_pendingPageRequests.current = {};
|
|
19886
19886
|
// nuke the dataset so that we "start again" after sorting
|
|
19887
19887
|
reset = true;
|
|
@@ -19893,11 +19893,11 @@ function useTable3DataLoader(fetch, fetchAll, options = {
|
|
|
19893
19893
|
_pendingPageRequests.current[pageIndex] = true;
|
|
19894
19894
|
}
|
|
19895
19895
|
// set the sorting so we can track if it changed between loads
|
|
19896
|
-
|
|
19896
|
+
_lastUsedSorting.current = sorting;
|
|
19897
19897
|
// set the filters so we can track if it changed between loads
|
|
19898
|
-
|
|
19898
|
+
_lastUsedFilters.current = filters;
|
|
19899
19899
|
// set the search so we can track if it changed between loads
|
|
19900
|
-
|
|
19900
|
+
_lastUsedSearch.current = search;
|
|
19901
19901
|
const _temp = _finallyRethrows(function () {
|
|
19902
19902
|
return _catch(function () {
|
|
19903
19903
|
return Promise.resolve(fetch(pageIndex, pageSize, sorting, filters, search)).then(function (response) {
|
|
@@ -19951,29 +19951,30 @@ function useTable3DataLoader(fetch, fetchAll, options = {
|
|
|
19951
19951
|
return Promise.reject(e);
|
|
19952
19952
|
}
|
|
19953
19953
|
};
|
|
19954
|
+
const invalidate = () => setData(Array(length.current).fill(undefined));
|
|
19954
19955
|
// we reset the page to 0 whenever sorting, filtering or search changes
|
|
19955
19956
|
const handleSort = function (sorting) {
|
|
19956
19957
|
try {
|
|
19957
|
-
return loadPage(0, sorting,
|
|
19958
|
+
return loadPage(0, sorting, _lastUsedFilters.current, _lastUsedSearch.current);
|
|
19958
19959
|
} catch (e) {
|
|
19959
19960
|
return Promise.reject(e);
|
|
19960
19961
|
}
|
|
19961
19962
|
};
|
|
19962
19963
|
const handleFilter = function (filters) {
|
|
19963
19964
|
try {
|
|
19964
|
-
return loadPage(0,
|
|
19965
|
+
return loadPage(0, _lastUsedSorting.current, filters, _lastUsedSearch.current);
|
|
19965
19966
|
} catch (e) {
|
|
19966
19967
|
return Promise.reject(e);
|
|
19967
19968
|
}
|
|
19968
19969
|
};
|
|
19969
19970
|
const handleSearch = function (query) {
|
|
19970
19971
|
try {
|
|
19971
|
-
return loadAll(
|
|
19972
|
+
return loadAll(_lastUsedSorting.current, _lastUsedFilters.current, query);
|
|
19972
19973
|
} catch (e) {
|
|
19973
19974
|
return Promise.reject(e);
|
|
19974
19975
|
}
|
|
19975
19976
|
};
|
|
19976
|
-
return {
|
|
19977
|
+
return [{
|
|
19977
19978
|
data,
|
|
19978
19979
|
length: length.current,
|
|
19979
19980
|
loadAll,
|
|
@@ -19982,7 +19983,7 @@ function useTable3DataLoader(fetch, fetchAll, options = {
|
|
|
19982
19983
|
onSearch: handleSearch,
|
|
19983
19984
|
onSort: handleSort,
|
|
19984
19985
|
pageSize
|
|
19985
|
-
};
|
|
19986
|
+
}, invalidate];
|
|
19986
19987
|
}
|
|
19987
19988
|
|
|
19988
19989
|
function Column$5(_) {
|