@coveord/plasma-mantine 55.5.1 → 55.6.0
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/.turbo/turbo-build.log +3 -3
- package/.turbo/turbo-test.log +49 -49
- package/dist/.tsbuildinfo +1 -1
- package/dist/cjs/components/table/index.d.ts +1 -1
- package/dist/cjs/components/table/index.d.ts.map +1 -1
- package/dist/cjs/components/table/index.js.map +1 -1
- package/dist/cjs/components/table/use-table.d.ts.map +1 -1
- package/dist/cjs/components/table/use-table.js +177 -162
- package/dist/cjs/components/table/use-table.js.map +1 -1
- package/dist/cjs/components/table/use-url-synced-state.d.ts +8 -4
- package/dist/cjs/components/table/use-url-synced-state.d.ts.map +1 -1
- package/dist/cjs/components/table/use-url-synced-state.js +94 -67
- package/dist/cjs/components/table/use-url-synced-state.js.map +1 -1
- package/dist/esm/components/table/index.d.ts +1 -1
- package/dist/esm/components/table/index.d.ts.map +1 -1
- package/dist/esm/components/table/index.js.map +1 -1
- package/dist/esm/components/table/use-table.d.ts.map +1 -1
- package/dist/esm/components/table/use-table.js +116 -95
- package/dist/esm/components/table/use-table.js.map +1 -1
- package/dist/esm/components/table/use-url-synced-state.d.ts +8 -4
- package/dist/esm/components/table/use-url-synced-state.d.ts.map +1 -1
- package/dist/esm/components/table/use-url-synced-state.js +59 -44
- package/dist/esm/components/table/use-url-synced-state.js.map +1 -1
- package/package.json +1 -1
- package/src/components/table/__tests__/use-url-synced-state.unit.spec.ts +2 -1
- package/src/components/table/index.ts +1 -1
- package/src/components/table/use-table.ts +109 -79
- package/src/components/table/use-url-synced-state.ts +79 -64
|
@@ -12,36 +12,13 @@ var _instanceof = require("@swc/helpers/_/_instanceof");
|
|
|
12
12
|
var _sliced_to_array = require("@swc/helpers/_/_sliced_to_array");
|
|
13
13
|
var _react = require("react");
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
15
|
+
* Get the index of the ? in a URL that denotes the start of the "search".
|
|
16
|
+
* Performs a nested search for '#/', to detect hash router urls and take the params of the hash in that case.
|
|
16
17
|
*
|
|
17
|
-
* @param
|
|
18
|
-
* @
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
22
|
-
try {
|
|
23
|
-
for(var _iterator = entries[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
24
|
-
var entry = _step.value;
|
|
25
|
-
if (entry[1] && filter(entry)) {
|
|
26
|
-
target.set(entry[0], entry[1]);
|
|
27
|
-
} else {
|
|
28
|
-
target.delete(entry[0]);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
} catch (err) {
|
|
32
|
-
_didIteratorError = true;
|
|
33
|
-
_iteratorError = err;
|
|
34
|
-
} finally{
|
|
35
|
-
try {
|
|
36
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
37
|
-
_iterator.return();
|
|
38
|
-
}
|
|
39
|
-
} finally{
|
|
40
|
-
if (_didIteratorError) {
|
|
41
|
-
throw _iteratorError;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}
|
|
18
|
+
* @param url The URL to search.
|
|
19
|
+
* @returns The location of the question mark, or `-1` if not found.
|
|
20
|
+
*/ var indexOfSearch = function(url) {
|
|
21
|
+
return url.indexOf('?', url.indexOf('#/') + 1);
|
|
45
22
|
};
|
|
46
23
|
/**
|
|
47
24
|
* Read the **current** search params from `window.location`, with support for detecting React's HashRouter.
|
|
@@ -50,53 +27,103 @@ var _react = require("react");
|
|
|
50
27
|
* @returns The `URLSearchParams` instance, and a function that can be used to get an updated href.
|
|
51
28
|
*/ var getSearchParams = function() {
|
|
52
29
|
var href = window.location.href;
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
30
|
+
var searchStart = indexOfSearch(href);
|
|
31
|
+
return new URLSearchParams(searchStart < 0 ? undefined : href.substring(searchStart));
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Apply the search params to the current location, using `replaceState` (no navigation history).
|
|
35
|
+
* Note that only parameters in the `params` argument will be set, any other current params will be removed.
|
|
36
|
+
*
|
|
37
|
+
* @param params The parameters to apply.
|
|
38
|
+
*/ var applySearchParams = function(params) {
|
|
39
|
+
var currentHref = window.location.href;
|
|
40
|
+
var index = indexOfSearch(currentHref);
|
|
41
|
+
var nextHref = index < 0 ? currentHref : currentHref.substring(0, index);
|
|
42
|
+
if (params.size > 0) {
|
|
43
|
+
nextHref = nextHref.concat('?', params.toString());
|
|
44
|
+
}
|
|
45
|
+
if (nextHref !== currentHref) {
|
|
46
|
+
window.history.replaceState(null, '', nextHref);
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
var getInitialState = function(options) {
|
|
50
|
+
return _instanceof._(options.initialState, Function) ? options.initialState() : options.initialState;
|
|
66
51
|
};
|
|
67
52
|
var useUrlSyncedState = function(options) {
|
|
68
53
|
var sync = options.sync !== false;
|
|
69
|
-
var
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
]);
|
|
75
|
-
var _useState = _sliced_to_array._((0, _react.useState)(initialState), 2), state = _useState[0], setState = _useState[1];
|
|
76
|
-
// Capture the initial state as a map, to compare values and not set them if they match.
|
|
54
|
+
var _useState = _sliced_to_array._((0, _react.useState)(function() {
|
|
55
|
+
var initialState = getInitialState(options);
|
|
56
|
+
return sync ? options.deserializer(getSearchParams(), initialState) : initialState;
|
|
57
|
+
}), 2), state = _useState[0], setState = _useState[1];
|
|
58
|
+
// Capture the initial state as a map (first render only!), to compare values and see if they should be set to the params.
|
|
77
59
|
var initialStateSerialized = (0, _react.useMemo)(function() {
|
|
78
|
-
var
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
60
|
+
var stateMap = new Map();
|
|
61
|
+
var initialize = null;
|
|
62
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
63
|
+
try {
|
|
64
|
+
for(var _iterator = options.serializer(getInitialState(options))[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
65
|
+
var _step_value = _sliced_to_array._(_step.value, 3), key = _step_value[0], value = _step_value[1], alwaysEmit = _step_value[2];
|
|
66
|
+
stateMap.set(key, value);
|
|
67
|
+
if (alwaysEmit && value) {
|
|
68
|
+
initialize !== null && initialize !== void 0 ? initialize : initialize = getSearchParams();
|
|
69
|
+
initialize.set(key, value);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
} catch (err) {
|
|
73
|
+
_didIteratorError = true;
|
|
74
|
+
_iteratorError = err;
|
|
75
|
+
} finally{
|
|
76
|
+
try {
|
|
77
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
78
|
+
_iterator.return();
|
|
79
|
+
}
|
|
80
|
+
} finally{
|
|
81
|
+
if (_didIteratorError) {
|
|
82
|
+
throw _iteratorError;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (initialize) {
|
|
87
|
+
applySearchParams(initialize);
|
|
88
|
+
}
|
|
89
|
+
return stateMap;
|
|
90
|
+
}, []);
|
|
87
91
|
var enhancedSetState = (0, _react.useMemo)(function() {
|
|
88
|
-
|
|
92
|
+
if (!sync) {
|
|
93
|
+
return setState;
|
|
94
|
+
}
|
|
95
|
+
return function(updater) {
|
|
89
96
|
setState(function(old) {
|
|
90
|
-
var _getSearchParams = _sliced_to_array._(getSearchParams(), 2), search = _getSearchParams[0], getUrl = _getSearchParams[1];
|
|
91
97
|
var newValue = _instanceof._(updater, Function) ? updater(old) : updater;
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
98
|
+
var search = getSearchParams();
|
|
99
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
100
|
+
try {
|
|
101
|
+
for(var _iterator = options.serializer(newValue)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
102
|
+
var _step_value = _sliced_to_array._(_step.value, 3), key = _step_value[0], value = _step_value[1], alwaysEmit = _step_value[2];
|
|
103
|
+
if (value && (alwaysEmit || !Object.is(initialStateSerialized.get(key), value))) {
|
|
104
|
+
search.set(key, value);
|
|
105
|
+
} else {
|
|
106
|
+
search.delete(key);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
} catch (err) {
|
|
110
|
+
_didIteratorError = true;
|
|
111
|
+
_iteratorError = err;
|
|
112
|
+
} finally{
|
|
113
|
+
try {
|
|
114
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
115
|
+
_iterator.return();
|
|
116
|
+
}
|
|
117
|
+
} finally{
|
|
118
|
+
if (_didIteratorError) {
|
|
119
|
+
throw _iteratorError;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
applySearchParams(search);
|
|
97
124
|
return newValue;
|
|
98
125
|
});
|
|
99
|
-
}
|
|
126
|
+
};
|
|
100
127
|
}, [
|
|
101
128
|
sync
|
|
102
129
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/table/use-url-synced-state.ts"],"sourcesContent":["import {Dispatch, SetStateAction, useMemo, useState} from 'react';\n\n/**\n * A search param entry defines the key
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/table/use-url-synced-state.ts"],"sourcesContent":["import {Dispatch, SetStateAction, useMemo, useState} from 'react';\n\n/**\n * A search param entry defines the encoded value of a search parameter as `[key, value, alwaysEmit?]`.\n * The third entry is an optional boolean that defaults to `false`.\n * Setting `alwaysEmit` to `true` means any non-nullish value is always written to the search params,\n * even if it matches the initial value. It is also written on initialization.\n */\nexport type SearchParamEntry = [string, string | null | undefined, boolean?];\n\n/**\n * Get the index of the ? in a URL that denotes the start of the \"search\".\n * Performs a nested search for '#/', to detect hash router urls and take the params of the hash in that case.\n *\n * @param url The URL to search.\n * @returns The location of the question mark, or `-1` if not found.\n */\nconst indexOfSearch = (url: string): number => url.indexOf('?', url.indexOf('#/') + 1);\n\n/**\n * Read the **current** search params from `window.location`, with support for detecting React's HashRouter.\n * Also returns a method that will yield the href (string) value, after any changes made on the params object.\n *\n * @returns The `URLSearchParams` instance, and a function that can be used to get an updated href.\n */\nconst getSearchParams = (): URLSearchParams => {\n const href = window.location.href;\n const searchStart = indexOfSearch(href);\n return new URLSearchParams(searchStart < 0 ? undefined : href.substring(searchStart));\n};\n\n/**\n * Apply the search params to the current location, using `replaceState` (no navigation history).\n * Note that only parameters in the `params` argument will be set, any other current params will be removed.\n *\n * @param params The parameters to apply.\n */\nconst applySearchParams = (params: URLSearchParams): void => {\n const currentHref = window.location.href;\n const index = indexOfSearch(currentHref);\n let nextHref = index < 0 ? currentHref : currentHref.substring(0, index);\n if (params.size > 0) {\n nextHref = nextHref.concat('?', params.toString());\n }\n if (nextHref !== currentHref) {\n window.history.replaceState(null, '', nextHref);\n }\n};\n\nexport interface UseUrlSyncedStateOptions<T> {\n /**\n * The initial state to use, if there would be no search params to deserialize from.\n * These values are also treated as defaults, and if the current state matches the initialState,\n * no value will be written to the search params.\n */\n initialState: T | (() => T);\n /**\n * The serializer function is used to determine how the state is translated to url search parameters.\n * Called each time the state changes.\n * Note that the serializer should always return entries for keys it controls, also if the current value is \"unset\" (`null` or empty).\n * This ensures params get removed from the search when they are being unset.\n *\n * @param stateValue The new state value to serialize.\n * @returns An iterable of `[key, value]` to set as url search parameters.\n * @example (filterValue) => [['filter', filterValue]] // ?filter=filterValue\n */\n serializer: (stateValue: T) => Iterable<SearchParamEntry>;\n /**\n * The deserializer function is used to determine how the url parameters influence the initial state.\n * May return a partial state, values that are not deserialed are taken from the `initialState`.\n * Called only once when initializing the state.\n * @param params All the search parameters of the current url.\n * @param initialState The initialState, can be used to take defaults from.\n * @returns The initial state based on the current url.\n * @example (params) => params.get('filter') ?? '',\n */\n deserializer: (params: URLSearchParams, initialState: T) => T;\n /**\n * Whether the state should be synced with the url, defaults to `true`.\n * When set to `false`, the hook behaves just like a regular `useState` hook from react.\n */\n sync?: boolean;\n}\n\nconst getInitialState = <T>(options: UseUrlSyncedStateOptions<T>): T =>\n options.initialState instanceof Function ? options.initialState() : options.initialState;\n\nexport const useUrlSyncedState = <T>(options: UseUrlSyncedStateOptions<T>) => {\n const sync = options.sync !== false;\n const [state, setState] = useState<T>(() => {\n const initialState = getInitialState(options);\n return sync ? options.deserializer(getSearchParams(), initialState) : initialState;\n });\n // Capture the initial state as a map (first render only!), to compare values and see if they should be set to the params.\n const initialStateSerialized = useMemo(() => {\n const stateMap = new Map<string, string>();\n let initialize: URLSearchParams | null = null;\n for (const [key, value, alwaysEmit] of options.serializer(getInitialState(options))) {\n stateMap.set(key, value);\n if (alwaysEmit && value) {\n initialize ??= getSearchParams();\n initialize.set(key, value);\n }\n }\n if (initialize) {\n applySearchParams(initialize);\n }\n return stateMap;\n }, []);\n\n const enhancedSetState = useMemo<Dispatch<SetStateAction<T>>>(() => {\n if (!sync) {\n return setState;\n }\n return (updater: SetStateAction<T>) => {\n setState((old) => {\n const newValue = updater instanceof Function ? updater(old) : updater;\n\n const search = getSearchParams();\n for (const [key, value, alwaysEmit] of options.serializer(newValue)) {\n if (value && (alwaysEmit || !Object.is(initialStateSerialized.get(key), value))) {\n search.set(key, value);\n } else {\n search.delete(key);\n }\n }\n applySearchParams(search);\n\n return newValue;\n });\n };\n }, [sync]);\n\n return [state, enhancedSetState] as const;\n};\n"],"names":["useUrlSyncedState","indexOfSearch","url","indexOf","getSearchParams","href","window","location","searchStart","URLSearchParams","undefined","substring","applySearchParams","params","currentHref","index","nextHref","size","concat","toString","history","replaceState","getInitialState","options","Function","initialState","sync","useState","deserializer","state","setState","initialStateSerialized","useMemo","stateMap","Map","initialize","serializer","key","value","alwaysEmit","set","enhancedSetState","updater","old","newValue","search","Object","is","get","delete"],"mappings":"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"}
|
|
@@ -4,5 +4,5 @@ export { type TablePredicateProps } from './table-predicate/TablePredicate';
|
|
|
4
4
|
export { type TableAction, type TableLayout, type TableLayoutProps, type TableProps } from './Table.types';
|
|
5
5
|
export { useTableContext } from './TableContext';
|
|
6
6
|
export { useTable, type TableState, type TableStore, type UseTableOptions } from './use-table';
|
|
7
|
-
export { useUrlSyncedState } from './use-url-synced-state';
|
|
7
|
+
export { useUrlSyncedState, type UseUrlSyncedStateOptions, type SearchParamEntry } from './use-url-synced-state';
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/table/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,IAAI,eAAe,EAAC,MAAM,uBAAuB,CAAC;AACpE,cAAc,SAAS,CAAC;AACxB,OAAO,EAAC,KAAK,mBAAmB,EAAC,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAC,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAAC,MAAM,eAAe,CAAC;AACzG,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAC,QAAQ,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,KAAK,eAAe,EAAC,MAAM,aAAa,CAAC;AAC7F,OAAO,EAAC,iBAAiB,EAAC,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/table/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,IAAI,eAAe,EAAC,MAAM,uBAAuB,CAAC;AACpE,cAAc,SAAS,CAAC;AACxB,OAAO,EAAC,KAAK,mBAAmB,EAAC,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAC,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAAC,MAAM,eAAe,CAAC;AACzG,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAC,QAAQ,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,KAAK,eAAe,EAAC,MAAM,aAAa,CAAC;AAC7F,OAAO,EAAC,iBAAiB,EAAE,KAAK,wBAAwB,EAAE,KAAK,gBAAgB,EAAC,MAAM,wBAAwB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/table/index.ts"],"sourcesContent":["export {flexRender as renderTableCell} from '@tanstack/react-table';\nexport * from './Table';\nexport {type TablePredicateProps} from './table-predicate/TablePredicate';\nexport {type TableAction, type TableLayout, type TableLayoutProps, type TableProps} from './Table.types';\nexport {useTableContext} from './TableContext';\nexport {useTable, type TableState, type TableStore, type UseTableOptions} from './use-table';\nexport {useUrlSyncedState} from './use-url-synced-state';\n"],"names":["flexRender","renderTableCell","useTableContext","useTable","useUrlSyncedState"],"mappings":"AAAA,SAAQA,cAAcC,eAAe,QAAO,wBAAwB;AACpE,cAAc,UAAU;AAGxB,SAAQC,eAAe,QAAO,iBAAiB;AAC/C,SAAQC,QAAQ,QAA+D,cAAc;AAC7F,SAAQC,iBAAiB,
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/table/index.ts"],"sourcesContent":["export {flexRender as renderTableCell} from '@tanstack/react-table';\nexport * from './Table';\nexport {type TablePredicateProps} from './table-predicate/TablePredicate';\nexport {type TableAction, type TableLayout, type TableLayoutProps, type TableProps} from './Table.types';\nexport {useTableContext} from './TableContext';\nexport {useTable, type TableState, type TableStore, type UseTableOptions} from './use-table';\nexport {useUrlSyncedState, type UseUrlSyncedStateOptions, type SearchParamEntry} from './use-url-synced-state';\n"],"names":["flexRender","renderTableCell","useTableContext","useTable","useUrlSyncedState"],"mappings":"AAAA,SAAQA,cAAcC,eAAe,QAAO,wBAAwB;AACpE,cAAc,UAAU;AAGxB,SAAQC,eAAe,QAAO,iBAAiB;AAC/C,SAAQC,QAAQ,QAA+D,cAAc;AAC7F,SAAQC,iBAAiB,QAA6D,yBAAyB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-table.d.ts","sourceRoot":"","sources":["../../../../src/components/table/use-table.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"use-table.d.ts","sourceRoot":"","sources":["../../../../src/components/table/use-table.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,114 @@ const defaultState = {
|
|
|
25
25
|
rowSelection: {},
|
|
26
26
|
columnVisibility: {}
|
|
27
27
|
};
|
|
28
|
+
const serialization = (input)=>Object.freeze(input);
|
|
29
|
+
const PAGINATION_SERIALIZATION = serialization({
|
|
30
|
+
serializer: ({ pageIndex, pageSize })=>[
|
|
31
|
+
[
|
|
32
|
+
'page',
|
|
33
|
+
(pageIndex + 1).toString()
|
|
34
|
+
],
|
|
35
|
+
[
|
|
36
|
+
'pageSize',
|
|
37
|
+
pageSize.toString()
|
|
38
|
+
]
|
|
39
|
+
],
|
|
40
|
+
deserializer: (params, initialState)=>defaultsDeep({
|
|
41
|
+
pageIndex: params.get('page') ? Math.max(1, parseInt(params.get('page'), 10)) - 1 : undefined,
|
|
42
|
+
pageSize: params.get('pageSize') ? parseInt(params.get('pageSize'), 10) : undefined
|
|
43
|
+
}, initialState)
|
|
44
|
+
});
|
|
45
|
+
const SORTING_SERIALIZATION = serialization({
|
|
46
|
+
serializer: (sorting)=>[
|
|
47
|
+
[
|
|
48
|
+
'sortBy',
|
|
49
|
+
sorting.map(({ id, desc })=>`${id}.${desc ? 'desc' : 'asc'}`).join(',')
|
|
50
|
+
]
|
|
51
|
+
],
|
|
52
|
+
deserializer: (params, initialState)=>{
|
|
53
|
+
if (!params.has('sortBy')) {
|
|
54
|
+
return initialState;
|
|
55
|
+
}
|
|
56
|
+
const sorts = params.get('sortBy')?.split(',') ?? [];
|
|
57
|
+
return sorts.map((sort)=>{
|
|
58
|
+
const [id, order] = sort.split('.');
|
|
59
|
+
return {
|
|
60
|
+
id,
|
|
61
|
+
desc: order === 'desc'
|
|
62
|
+
};
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
const GLOBAL_FILTER_SERIALIZATION = serialization({
|
|
67
|
+
serializer: (filter)=>[
|
|
68
|
+
[
|
|
69
|
+
'filter',
|
|
70
|
+
filter
|
|
71
|
+
]
|
|
72
|
+
],
|
|
73
|
+
deserializer: (params, initialState)=>params.get('filter') ?? initialState
|
|
74
|
+
});
|
|
75
|
+
const PREDICATES_SERIALIZATION = serialization({
|
|
76
|
+
serializer: (predicates)=>Object.entries(predicates),
|
|
77
|
+
deserializer: (params, initialState)=>Object.keys(initialState).reduce((acc, predicateKey)=>{
|
|
78
|
+
acc[predicateKey] = params.get(predicateKey) ?? initialState[predicateKey];
|
|
79
|
+
return acc;
|
|
80
|
+
}, {})
|
|
81
|
+
});
|
|
82
|
+
const LAYOUT_SERIALIZATION = serialization({
|
|
83
|
+
serializer: (_layout)=>[
|
|
84
|
+
[
|
|
85
|
+
'layout',
|
|
86
|
+
_layout
|
|
87
|
+
]
|
|
88
|
+
],
|
|
89
|
+
deserializer: (params, initialState)=>params.get('layout') ?? initialState
|
|
90
|
+
});
|
|
91
|
+
const DATE_RANGE_SERIALIZATION = serialization({
|
|
92
|
+
serializer: ([from, to])=>[
|
|
93
|
+
[
|
|
94
|
+
'from',
|
|
95
|
+
from?.toISOString() ?? '',
|
|
96
|
+
true
|
|
97
|
+
],
|
|
98
|
+
[
|
|
99
|
+
'to',
|
|
100
|
+
to?.toISOString() ?? '',
|
|
101
|
+
true
|
|
102
|
+
]
|
|
103
|
+
],
|
|
104
|
+
deserializer: (params, initial)=>[
|
|
105
|
+
params.get('from') ? new Date(params.get('from')) : initial[0],
|
|
106
|
+
params.get('to') ? new Date(params.get('to')) : initial[1]
|
|
107
|
+
]
|
|
108
|
+
});
|
|
109
|
+
const COLUMN_VISIBILITY_SERIALIZATION = serialization({
|
|
110
|
+
serializer: (columns)=>[
|
|
111
|
+
[
|
|
112
|
+
'show',
|
|
113
|
+
Object.entries(columns).filter(([, visible])=>visible === true).map(([columnName])=>columnName).join(',')
|
|
114
|
+
],
|
|
115
|
+
[
|
|
116
|
+
'hide',
|
|
117
|
+
Object.entries(columns).filter(([, visible])=>visible === false).map(([columnName])=>columnName).join(',')
|
|
118
|
+
]
|
|
119
|
+
],
|
|
120
|
+
deserializer: (params, initial)=>{
|
|
121
|
+
if (!params.has('show') && !params.has('hide')) {
|
|
122
|
+
return initial;
|
|
123
|
+
}
|
|
124
|
+
const visible = params.get('show')?.split(',') ?? [];
|
|
125
|
+
const invisible = params.get('hide')?.split(',') ?? [];
|
|
126
|
+
const columns = {};
|
|
127
|
+
visible.forEach((column)=>{
|
|
128
|
+
columns[column] = true;
|
|
129
|
+
});
|
|
130
|
+
invisible.forEach((column)=>{
|
|
131
|
+
columns[column] = false;
|
|
132
|
+
});
|
|
133
|
+
return columns;
|
|
134
|
+
}
|
|
135
|
+
});
|
|
28
136
|
export const useTable = (userOptions = {})=>{
|
|
29
137
|
const options = defaultsDeep({}, userOptions, defaultOptions);
|
|
30
138
|
const initialState = defaultsDeep({}, options.initialState, defaultState);
|
|
@@ -32,127 +140,40 @@ export const useTable = (userOptions = {})=>{
|
|
|
32
140
|
* The `useUrlSyncedState` hook defaults to synchronize, but the table wants to default to not synchronize,
|
|
33
141
|
* so always pass the sync option as a resolved boolean value.
|
|
34
142
|
*/ const sync = !!options.syncWithUrl;
|
|
35
|
-
// synced with url
|
|
143
|
+
// (Optionally) synced with url
|
|
36
144
|
const [pagination, setPagination] = useUrlSyncedState({
|
|
145
|
+
...PAGINATION_SERIALIZATION,
|
|
37
146
|
initialState: initialState.pagination,
|
|
38
|
-
serializer: ({ pageIndex, pageSize })=>[
|
|
39
|
-
[
|
|
40
|
-
'page',
|
|
41
|
-
(pageIndex + 1).toString()
|
|
42
|
-
],
|
|
43
|
-
[
|
|
44
|
-
'pageSize',
|
|
45
|
-
pageSize.toString()
|
|
46
|
-
]
|
|
47
|
-
],
|
|
48
|
-
deserializer: (params)=>defaultsDeep({
|
|
49
|
-
pageIndex: params.get('page') ? parseInt(params.get('page'), 10) - 1 : undefined,
|
|
50
|
-
pageSize: params.get('pageSize') ? parseInt(params.get('pageSize'), 10) : undefined
|
|
51
|
-
}, initialState.pagination),
|
|
52
147
|
sync
|
|
53
148
|
});
|
|
54
149
|
const [sorting, setSorting] = useUrlSyncedState({
|
|
150
|
+
...SORTING_SERIALIZATION,
|
|
55
151
|
initialState: initialState.sorting,
|
|
56
|
-
serializer: (_sorting)=>[
|
|
57
|
-
[
|
|
58
|
-
'sortBy',
|
|
59
|
-
_sorting.map(({ id, desc })=>`${id}.${desc ? 'desc' : 'asc'}`).join(',')
|
|
60
|
-
]
|
|
61
|
-
],
|
|
62
|
-
deserializer: (params)=>{
|
|
63
|
-
if (!params.has('sortBy')) {
|
|
64
|
-
return initialState.sorting;
|
|
65
|
-
}
|
|
66
|
-
const sorts = params.get('sortBy')?.split(',') ?? [];
|
|
67
|
-
return sorts.map((sort)=>{
|
|
68
|
-
const [id, order] = sort.split('.');
|
|
69
|
-
return {
|
|
70
|
-
id,
|
|
71
|
-
desc: order === 'desc'
|
|
72
|
-
};
|
|
73
|
-
});
|
|
74
|
-
},
|
|
75
152
|
sync
|
|
76
153
|
});
|
|
77
154
|
const [globalFilter, setGlobalFilter] = useUrlSyncedState({
|
|
155
|
+
...GLOBAL_FILTER_SERIALIZATION,
|
|
78
156
|
initialState: initialState.globalFilter,
|
|
79
|
-
serializer: (filter)=>[
|
|
80
|
-
[
|
|
81
|
-
'filter',
|
|
82
|
-
filter
|
|
83
|
-
]
|
|
84
|
-
],
|
|
85
|
-
deserializer: (params)=>params.get('filter') ?? initialState.globalFilter,
|
|
86
157
|
sync
|
|
87
158
|
});
|
|
88
159
|
const [predicates, setPredicates] = useUrlSyncedState({
|
|
160
|
+
...PREDICATES_SERIALIZATION,
|
|
89
161
|
initialState: initialState.predicates,
|
|
90
|
-
serializer: (_predicates)=>Object.entries(_predicates).map(([key, value])=>[
|
|
91
|
-
key,
|
|
92
|
-
value
|
|
93
|
-
]),
|
|
94
|
-
deserializer: (params)=>Object.keys(initialState.predicates).reduce((acc, predicateKey)=>{
|
|
95
|
-
acc[predicateKey] = params.get(predicateKey) ?? initialState.predicates[predicateKey];
|
|
96
|
-
return acc;
|
|
97
|
-
}, {}),
|
|
98
162
|
sync
|
|
99
163
|
});
|
|
100
164
|
const [layout, setLayout] = useUrlSyncedState({
|
|
165
|
+
...LAYOUT_SERIALIZATION,
|
|
101
166
|
initialState: initialState.layout,
|
|
102
|
-
serializer: (_layout)=>[
|
|
103
|
-
[
|
|
104
|
-
'layout',
|
|
105
|
-
_layout
|
|
106
|
-
]
|
|
107
|
-
],
|
|
108
|
-
deserializer: (params)=>params.get('layout') ?? initialState.layout,
|
|
109
167
|
sync
|
|
110
168
|
});
|
|
111
169
|
const [dateRange, setDateRange] = useUrlSyncedState({
|
|
170
|
+
...DATE_RANGE_SERIALIZATION,
|
|
112
171
|
initialState: initialState.dateRange,
|
|
113
|
-
serializer: ([from, to])=>[
|
|
114
|
-
[
|
|
115
|
-
'from',
|
|
116
|
-
from?.toISOString() ?? ''
|
|
117
|
-
],
|
|
118
|
-
[
|
|
119
|
-
'to',
|
|
120
|
-
to?.toISOString() ?? ''
|
|
121
|
-
]
|
|
122
|
-
],
|
|
123
|
-
deserializer: (params)=>[
|
|
124
|
-
params.get('from') ? new Date(params.get('from')) : initialState.dateRange[0],
|
|
125
|
-
params.get('to') ? new Date(params.get('to')) : initialState.dateRange[1]
|
|
126
|
-
],
|
|
127
172
|
sync
|
|
128
173
|
});
|
|
129
174
|
const [columnVisibility, setColumnVisibility] = useUrlSyncedState({
|
|
175
|
+
...COLUMN_VISIBILITY_SERIALIZATION,
|
|
130
176
|
initialState: initialState.columnVisibility,
|
|
131
|
-
serializer: (columns)=>[
|
|
132
|
-
[
|
|
133
|
-
'show',
|
|
134
|
-
Object.entries(columns).filter(([, visible])=>visible === true).map(([columnName])=>columnName).join(',')
|
|
135
|
-
],
|
|
136
|
-
[
|
|
137
|
-
'hide',
|
|
138
|
-
Object.entries(columns).filter(([, visible])=>visible === false).map(([columnName])=>columnName).join(',')
|
|
139
|
-
]
|
|
140
|
-
],
|
|
141
|
-
deserializer: (params)=>{
|
|
142
|
-
if (!params.has('show') && !params.has('hide')) {
|
|
143
|
-
return initialState.columnVisibility;
|
|
144
|
-
}
|
|
145
|
-
const visible = params.get('show')?.split(',') ?? [];
|
|
146
|
-
const invisible = params.get('hide')?.split(',') ?? [];
|
|
147
|
-
const columns = {};
|
|
148
|
-
visible.forEach((column)=>{
|
|
149
|
-
columns[column] = true;
|
|
150
|
-
});
|
|
151
|
-
invisible.forEach((column)=>{
|
|
152
|
-
columns[column] = false;
|
|
153
|
-
});
|
|
154
|
-
return columns;
|
|
155
|
-
},
|
|
156
177
|
sync
|
|
157
178
|
});
|
|
158
179
|
// unsynced
|