@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.
Files changed (28) hide show
  1. package/.turbo/turbo-build.log +3 -3
  2. package/.turbo/turbo-test.log +49 -49
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/cjs/components/table/index.d.ts +1 -1
  5. package/dist/cjs/components/table/index.d.ts.map +1 -1
  6. package/dist/cjs/components/table/index.js.map +1 -1
  7. package/dist/cjs/components/table/use-table.d.ts.map +1 -1
  8. package/dist/cjs/components/table/use-table.js +177 -162
  9. package/dist/cjs/components/table/use-table.js.map +1 -1
  10. package/dist/cjs/components/table/use-url-synced-state.d.ts +8 -4
  11. package/dist/cjs/components/table/use-url-synced-state.d.ts.map +1 -1
  12. package/dist/cjs/components/table/use-url-synced-state.js +94 -67
  13. package/dist/cjs/components/table/use-url-synced-state.js.map +1 -1
  14. package/dist/esm/components/table/index.d.ts +1 -1
  15. package/dist/esm/components/table/index.d.ts.map +1 -1
  16. package/dist/esm/components/table/index.js.map +1 -1
  17. package/dist/esm/components/table/use-table.d.ts.map +1 -1
  18. package/dist/esm/components/table/use-table.js +116 -95
  19. package/dist/esm/components/table/use-table.js.map +1 -1
  20. package/dist/esm/components/table/use-url-synced-state.d.ts +8 -4
  21. package/dist/esm/components/table/use-url-synced-state.d.ts.map +1 -1
  22. package/dist/esm/components/table/use-url-synced-state.js +59 -44
  23. package/dist/esm/components/table/use-url-synced-state.js.map +1 -1
  24. package/package.json +1 -1
  25. package/src/components/table/__tests__/use-url-synced-state.unit.spec.ts +2 -1
  26. package/src/components/table/index.ts +1 -1
  27. package/src/components/table/use-table.ts +109 -79
  28. package/src/components/table/use-url-synced-state.ts +79 -64
@@ -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":["renderTableCell","flexRender","useTable","useTableContext","useUrlSyncedState"],"mappings":";;;;;;;;;;;IAAsBA,eAAe;eAA7BC,sBAAU;;IAKVC,QAAQ;eAARA,kBAAQ;;IADRC,eAAe;eAAfA,6BAAe;;IAEfC,iBAAiB;eAAjBA,oCAAiB;;;;0BANmB;uBAC9B;4BAGgB;wBACiD;iCAC/C"}
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":["renderTableCell","flexRender","useTable","useTableContext","useUrlSyncedState"],"mappings":";;;;;;;;;;;IAAsBA,eAAe;eAA7BC,sBAAU;;IAKVC,QAAQ;eAARA,kBAAQ;;IADRC,eAAe;eAAfA,6BAAe;;IAEfC,iBAAiB;eAAjBA,oCAAiB;;;;0BANmB;uBAC9B;4BAGgB;wBACiD;iCACO"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-table.d.ts","sourceRoot":"","sources":["../../../../src/components/table/use-table.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAC,MAAM,sBAAsB,CAAC;AAEjG,OAAO,EAAC,QAAQ,EAAE,cAAc,EAAiC,MAAM,OAAO,CAAC;AAC/E,OAAO,EAAC,KAAK,oBAAoB,EAAC,MAAM,sBAAsB,CAAC;AAI/D,KAAK,WAAW,CAAC,CAAC,IAAI;KACjB,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAClE,CAAC;AAEF,MAAM,WAAW,UAAU,CAAC,KAAK,GAAG,OAAO;IACvC;;;;OAIG;IACH,UAAU,EAAE,eAAe,CAAC;IAC5B;;;;;;OAMG;IACH,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B;;;;OAIG;IACH,OAAO,EAAE,YAAY,CAAC;IACtB;;;;OAIG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;;;OAIG;IACH,QAAQ,EAAE,aAAa,CAAC;IACxB;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC;;;;OAIG;IACH,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB;;;;OAIG;IACH,SAAS,EAAE,oBAAoB,CAAC;IAChC;;;;OAIG;IACH,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACpC;;;;OAIG;IACH,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,UAAU,CAAC,KAAK,GAAG,OAAO;IACvC;;OAEG;IACH,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IACzB;;OAEG;IACH,aAAa,EAAE,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACzE;;OAEG;IACH,eAAe,EAAE,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAC7E;;OAEG;IACH,UAAU,EAAE,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACnE;;OAEG;IACH,eAAe,EAAE,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAC7E;;OAEG;IACH,WAAW,EAAE,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACrE;;OAEG;IACH,aAAa,EAAE,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACzE;;OAEG;IACH,SAAS,EAAE,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACjE;;OAEG;IACH,YAAY,EAAE,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACvE;;OAEG;IACH,eAAe,EAAE,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAC7E;;OAEG;IACH,mBAAmB,EAAE,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IACrF;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB;;OAEG;IACH,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B;;OAEG;IACH,eAAe,EAAE,MAAM,KAAK,EAAE,CAAC;IAC/B;;OAEG;IACH,cAAc,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC;IACnC;;OAEG;IACH,wBAAwB,EAAE,OAAO,CAAC;IAClC;;OAEG;IACH,mBAAmB,EAAE,OAAO,CAAC;IAC7B;;OAEG;IACH,kBAAkB,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe,CAAC,KAAK,GAAG,OAAO;IAC5C;;OAEG;IACH,YAAY,CAAC,EAAE,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AAwBD,eAAO,MAAM,QAAQ,GAAI,KAAK,gBAAe,eAAe,CAAC,KAAK,CAAC,KAAQ,UAAU,CAAC,KAAK,CAqN1F,CAAC"}
1
+ {"version":3,"file":"use-table.d.ts","sourceRoot":"","sources":["../../../../src/components/table/use-table.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,8 @@ Object.defineProperty(exports, "useTable", {
10
10
  });
11
11
  var _instanceof = require("@swc/helpers/_/_instanceof");
12
12
  var _interop_require_default = require("@swc/helpers/_/_interop_require_default");
13
+ var _object_spread = require("@swc/helpers/_/_object_spread");
14
+ var _object_spread_props = require("@swc/helpers/_/_object_spread_props");
13
15
  var _sliced_to_array = require("@swc/helpers/_/_sliced_to_array");
14
16
  var _hooks = require("@mantine/hooks");
15
17
  var _lodashdefaultsdeep = /*#__PURE__*/ _interop_require_default._(require("lodash.defaultsdeep"));
@@ -38,6 +40,166 @@ var defaultState = {
38
40
  rowSelection: {},
39
41
  columnVisibility: {}
40
42
  };
43
+ var serialization = function(input) {
44
+ return Object.freeze(input);
45
+ };
46
+ var PAGINATION_SERIALIZATION = serialization({
47
+ serializer: function(param) {
48
+ var pageIndex = param.pageIndex, pageSize = param.pageSize;
49
+ return [
50
+ [
51
+ 'page',
52
+ (pageIndex + 1).toString()
53
+ ],
54
+ [
55
+ 'pageSize',
56
+ pageSize.toString()
57
+ ]
58
+ ];
59
+ },
60
+ deserializer: function(params, initialState) {
61
+ return (0, _lodashdefaultsdeep.default)({
62
+ pageIndex: params.get('page') ? Math.max(1, parseInt(params.get('page'), 10)) - 1 : undefined,
63
+ pageSize: params.get('pageSize') ? parseInt(params.get('pageSize'), 10) : undefined
64
+ }, initialState);
65
+ }
66
+ });
67
+ var SORTING_SERIALIZATION = serialization({
68
+ serializer: function(sorting) {
69
+ return [
70
+ [
71
+ 'sortBy',
72
+ sorting.map(function(param) {
73
+ var id = param.id, desc = param.desc;
74
+ return "".concat(id, ".").concat(desc ? 'desc' : 'asc');
75
+ }).join(',')
76
+ ]
77
+ ];
78
+ },
79
+ deserializer: function(params, initialState) {
80
+ var _params_get;
81
+ if (!params.has('sortBy')) {
82
+ return initialState;
83
+ }
84
+ var _params_get_split;
85
+ var sorts = (_params_get_split = (_params_get = params.get('sortBy')) === null || _params_get === void 0 ? void 0 : _params_get.split(',')) !== null && _params_get_split !== void 0 ? _params_get_split : [];
86
+ return sorts.map(function(sort) {
87
+ var _sort_split = _sliced_to_array._(sort.split('.'), 2), id = _sort_split[0], order = _sort_split[1];
88
+ return {
89
+ id: id,
90
+ desc: order === 'desc'
91
+ };
92
+ });
93
+ }
94
+ });
95
+ var GLOBAL_FILTER_SERIALIZATION = serialization({
96
+ serializer: function(filter) {
97
+ return [
98
+ [
99
+ 'filter',
100
+ filter
101
+ ]
102
+ ];
103
+ },
104
+ deserializer: function(params, initialState) {
105
+ var _params_get;
106
+ return (_params_get = params.get('filter')) !== null && _params_get !== void 0 ? _params_get : initialState;
107
+ }
108
+ });
109
+ var PREDICATES_SERIALIZATION = serialization({
110
+ serializer: function(predicates) {
111
+ return Object.entries(predicates);
112
+ },
113
+ deserializer: function(params, initialState) {
114
+ return Object.keys(initialState).reduce(function(acc, predicateKey) {
115
+ var _params_get;
116
+ acc[predicateKey] = (_params_get = params.get(predicateKey)) !== null && _params_get !== void 0 ? _params_get : initialState[predicateKey];
117
+ return acc;
118
+ }, {});
119
+ }
120
+ });
121
+ var LAYOUT_SERIALIZATION = serialization({
122
+ serializer: function(_layout) {
123
+ return [
124
+ [
125
+ 'layout',
126
+ _layout
127
+ ]
128
+ ];
129
+ },
130
+ deserializer: function(params, initialState) {
131
+ var _params_get;
132
+ return (_params_get = params.get('layout')) !== null && _params_get !== void 0 ? _params_get : initialState;
133
+ }
134
+ });
135
+ var DATE_RANGE_SERIALIZATION = serialization({
136
+ serializer: function(param) {
137
+ var _param = _sliced_to_array._(param, 2), from = _param[0], to = _param[1];
138
+ var _from_toISOString, _to_toISOString;
139
+ return [
140
+ [
141
+ 'from',
142
+ (_from_toISOString = from === null || from === void 0 ? void 0 : from.toISOString()) !== null && _from_toISOString !== void 0 ? _from_toISOString : '',
143
+ true
144
+ ],
145
+ [
146
+ 'to',
147
+ (_to_toISOString = to === null || to === void 0 ? void 0 : to.toISOString()) !== null && _to_toISOString !== void 0 ? _to_toISOString : '',
148
+ true
149
+ ]
150
+ ];
151
+ },
152
+ deserializer: function(params, initial) {
153
+ return [
154
+ params.get('from') ? new Date(params.get('from')) : initial[0],
155
+ params.get('to') ? new Date(params.get('to')) : initial[1]
156
+ ];
157
+ }
158
+ });
159
+ var COLUMN_VISIBILITY_SERIALIZATION = serialization({
160
+ serializer: function(columns) {
161
+ return [
162
+ [
163
+ 'show',
164
+ Object.entries(columns).filter(function(param) {
165
+ var _param = _sliced_to_array._(param, 2), visible = _param[1];
166
+ return visible === true;
167
+ }).map(function(param) {
168
+ var _param = _sliced_to_array._(param, 1), columnName = _param[0];
169
+ return columnName;
170
+ }).join(',')
171
+ ],
172
+ [
173
+ 'hide',
174
+ Object.entries(columns).filter(function(param) {
175
+ var _param = _sliced_to_array._(param, 2), visible = _param[1];
176
+ return visible === false;
177
+ }).map(function(param) {
178
+ var _param = _sliced_to_array._(param, 1), columnName = _param[0];
179
+ return columnName;
180
+ }).join(',')
181
+ ]
182
+ ];
183
+ },
184
+ deserializer: function(params, initial) {
185
+ var _params_get, _params_get1;
186
+ if (!params.has('show') && !params.has('hide')) {
187
+ return initial;
188
+ }
189
+ var _params_get_split;
190
+ var visible = (_params_get_split = (_params_get = params.get('show')) === null || _params_get === void 0 ? void 0 : _params_get.split(',')) !== null && _params_get_split !== void 0 ? _params_get_split : [];
191
+ var _params_get_split1;
192
+ var invisible = (_params_get_split1 = (_params_get1 = params.get('hide')) === null || _params_get1 === void 0 ? void 0 : _params_get1.split(',')) !== null && _params_get_split1 !== void 0 ? _params_get_split1 : [];
193
+ var columns = {};
194
+ visible.forEach(function(column) {
195
+ columns[column] = true;
196
+ });
197
+ invisible.forEach(function(column) {
198
+ columns[column] = false;
199
+ });
200
+ return columns;
201
+ }
202
+ });
41
203
  var useTable = function() {
42
204
  var userOptions = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
43
205
  var options = (0, _lodashdefaultsdeep.default)({}, userOptions, defaultOptions);
@@ -46,182 +208,35 @@ var useTable = function() {
46
208
  * The `useUrlSyncedState` hook defaults to synchronize, but the table wants to default to not synchronize,
47
209
  * so always pass the sync option as a resolved boolean value.
48
210
  */ var sync = !!options.syncWithUrl;
49
- // synced with url
50
- var _useUrlSyncedState = _sliced_to_array._((0, _useurlsyncedstate.useUrlSyncedState)({
211
+ // (Optionally) synced with url
212
+ var _useUrlSyncedState = _sliced_to_array._((0, _useurlsyncedstate.useUrlSyncedState)(_object_spread_props._(_object_spread._({}, PAGINATION_SERIALIZATION), {
51
213
  initialState: initialState.pagination,
52
- serializer: function(param) {
53
- var pageIndex = param.pageIndex, pageSize = param.pageSize;
54
- return [
55
- [
56
- 'page',
57
- (pageIndex + 1).toString()
58
- ],
59
- [
60
- 'pageSize',
61
- pageSize.toString()
62
- ]
63
- ];
64
- },
65
- deserializer: function(params) {
66
- return (0, _lodashdefaultsdeep.default)({
67
- pageIndex: params.get('page') ? parseInt(params.get('page'), 10) - 1 : undefined,
68
- pageSize: params.get('pageSize') ? parseInt(params.get('pageSize'), 10) : undefined
69
- }, initialState.pagination);
70
- },
71
214
  sync: sync
72
- }), 2), pagination = _useUrlSyncedState[0], setPagination = _useUrlSyncedState[1];
73
- var _useUrlSyncedState1 = _sliced_to_array._((0, _useurlsyncedstate.useUrlSyncedState)({
215
+ })), 2), pagination = _useUrlSyncedState[0], setPagination = _useUrlSyncedState[1];
216
+ var _useUrlSyncedState1 = _sliced_to_array._((0, _useurlsyncedstate.useUrlSyncedState)(_object_spread_props._(_object_spread._({}, SORTING_SERIALIZATION), {
74
217
  initialState: initialState.sorting,
75
- serializer: function(_sorting) {
76
- return [
77
- [
78
- 'sortBy',
79
- _sorting.map(function(param) {
80
- var id = param.id, desc = param.desc;
81
- return "".concat(id, ".").concat(desc ? 'desc' : 'asc');
82
- }).join(',')
83
- ]
84
- ];
85
- },
86
- deserializer: function(params) {
87
- var _params_get;
88
- if (!params.has('sortBy')) {
89
- return initialState.sorting;
90
- }
91
- var _params_get_split;
92
- var sorts = (_params_get_split = (_params_get = params.get('sortBy')) === null || _params_get === void 0 ? void 0 : _params_get.split(',')) !== null && _params_get_split !== void 0 ? _params_get_split : [];
93
- return sorts.map(function(sort) {
94
- var _sort_split = _sliced_to_array._(sort.split('.'), 2), id = _sort_split[0], order = _sort_split[1];
95
- return {
96
- id: id,
97
- desc: order === 'desc'
98
- };
99
- });
100
- },
101
218
  sync: sync
102
- }), 2), sorting = _useUrlSyncedState1[0], setSorting = _useUrlSyncedState1[1];
103
- var _useUrlSyncedState2 = _sliced_to_array._((0, _useurlsyncedstate.useUrlSyncedState)({
219
+ })), 2), sorting = _useUrlSyncedState1[0], setSorting = _useUrlSyncedState1[1];
220
+ var _useUrlSyncedState2 = _sliced_to_array._((0, _useurlsyncedstate.useUrlSyncedState)(_object_spread_props._(_object_spread._({}, GLOBAL_FILTER_SERIALIZATION), {
104
221
  initialState: initialState.globalFilter,
105
- serializer: function(filter) {
106
- return [
107
- [
108
- 'filter',
109
- filter
110
- ]
111
- ];
112
- },
113
- deserializer: function(params) {
114
- var _params_get;
115
- return (_params_get = params.get('filter')) !== null && _params_get !== void 0 ? _params_get : initialState.globalFilter;
116
- },
117
222
  sync: sync
118
- }), 2), globalFilter = _useUrlSyncedState2[0], setGlobalFilter = _useUrlSyncedState2[1];
119
- var _useUrlSyncedState3 = _sliced_to_array._((0, _useurlsyncedstate.useUrlSyncedState)({
223
+ })), 2), globalFilter = _useUrlSyncedState2[0], setGlobalFilter = _useUrlSyncedState2[1];
224
+ var _useUrlSyncedState3 = _sliced_to_array._((0, _useurlsyncedstate.useUrlSyncedState)(_object_spread_props._(_object_spread._({}, PREDICATES_SERIALIZATION), {
120
225
  initialState: initialState.predicates,
121
- serializer: function(_predicates) {
122
- return Object.entries(_predicates).map(function(param) {
123
- var _param = _sliced_to_array._(param, 2), key = _param[0], value = _param[1];
124
- return [
125
- key,
126
- value
127
- ];
128
- });
129
- },
130
- deserializer: function(params) {
131
- return Object.keys(initialState.predicates).reduce(function(acc, predicateKey) {
132
- var _params_get;
133
- acc[predicateKey] = (_params_get = params.get(predicateKey)) !== null && _params_get !== void 0 ? _params_get : initialState.predicates[predicateKey];
134
- return acc;
135
- }, {});
136
- },
137
226
  sync: sync
138
- }), 2), predicates = _useUrlSyncedState3[0], setPredicates = _useUrlSyncedState3[1];
139
- var _useUrlSyncedState4 = _sliced_to_array._((0, _useurlsyncedstate.useUrlSyncedState)({
227
+ })), 2), predicates = _useUrlSyncedState3[0], setPredicates = _useUrlSyncedState3[1];
228
+ var _useUrlSyncedState4 = _sliced_to_array._((0, _useurlsyncedstate.useUrlSyncedState)(_object_spread_props._(_object_spread._({}, LAYOUT_SERIALIZATION), {
140
229
  initialState: initialState.layout,
141
- serializer: function(_layout) {
142
- return [
143
- [
144
- 'layout',
145
- _layout
146
- ]
147
- ];
148
- },
149
- deserializer: function(params) {
150
- var _params_get;
151
- return (_params_get = params.get('layout')) !== null && _params_get !== void 0 ? _params_get : initialState.layout;
152
- },
153
230
  sync: sync
154
- }), 2), layout = _useUrlSyncedState4[0], setLayout = _useUrlSyncedState4[1];
155
- var _useUrlSyncedState5 = _sliced_to_array._((0, _useurlsyncedstate.useUrlSyncedState)({
231
+ })), 2), layout = _useUrlSyncedState4[0], setLayout = _useUrlSyncedState4[1];
232
+ var _useUrlSyncedState5 = _sliced_to_array._((0, _useurlsyncedstate.useUrlSyncedState)(_object_spread_props._(_object_spread._({}, DATE_RANGE_SERIALIZATION), {
156
233
  initialState: initialState.dateRange,
157
- serializer: function(param) {
158
- var _param = _sliced_to_array._(param, 2), from = _param[0], to = _param[1];
159
- var _from_toISOString, _to_toISOString;
160
- return [
161
- [
162
- 'from',
163
- (_from_toISOString = from === null || from === void 0 ? void 0 : from.toISOString()) !== null && _from_toISOString !== void 0 ? _from_toISOString : ''
164
- ],
165
- [
166
- 'to',
167
- (_to_toISOString = to === null || to === void 0 ? void 0 : to.toISOString()) !== null && _to_toISOString !== void 0 ? _to_toISOString : ''
168
- ]
169
- ];
170
- },
171
- deserializer: function(params) {
172
- return [
173
- params.get('from') ? new Date(params.get('from')) : initialState.dateRange[0],
174
- params.get('to') ? new Date(params.get('to')) : initialState.dateRange[1]
175
- ];
176
- },
177
234
  sync: sync
178
- }), 2), dateRange = _useUrlSyncedState5[0], setDateRange = _useUrlSyncedState5[1];
179
- var _useUrlSyncedState6 = _sliced_to_array._((0, _useurlsyncedstate.useUrlSyncedState)({
235
+ })), 2), dateRange = _useUrlSyncedState5[0], setDateRange = _useUrlSyncedState5[1];
236
+ var _useUrlSyncedState6 = _sliced_to_array._((0, _useurlsyncedstate.useUrlSyncedState)(_object_spread_props._(_object_spread._({}, COLUMN_VISIBILITY_SERIALIZATION), {
180
237
  initialState: initialState.columnVisibility,
181
- serializer: function(columns) {
182
- return [
183
- [
184
- 'show',
185
- Object.entries(columns).filter(function(param) {
186
- var _param = _sliced_to_array._(param, 2), visible = _param[1];
187
- return visible === true;
188
- }).map(function(param) {
189
- var _param = _sliced_to_array._(param, 1), columnName = _param[0];
190
- return columnName;
191
- }).join(',')
192
- ],
193
- [
194
- 'hide',
195
- Object.entries(columns).filter(function(param) {
196
- var _param = _sliced_to_array._(param, 2), visible = _param[1];
197
- return visible === false;
198
- }).map(function(param) {
199
- var _param = _sliced_to_array._(param, 1), columnName = _param[0];
200
- return columnName;
201
- }).join(',')
202
- ]
203
- ];
204
- },
205
- deserializer: function(params) {
206
- var _params_get, _params_get1;
207
- if (!params.has('show') && !params.has('hide')) {
208
- return initialState.columnVisibility;
209
- }
210
- var _params_get_split;
211
- var visible = (_params_get_split = (_params_get = params.get('show')) === null || _params_get === void 0 ? void 0 : _params_get.split(',')) !== null && _params_get_split !== void 0 ? _params_get_split : [];
212
- var _params_get_split1;
213
- var invisible = (_params_get_split1 = (_params_get1 = params.get('hide')) === null || _params_get1 === void 0 ? void 0 : _params_get1.split(',')) !== null && _params_get_split1 !== void 0 ? _params_get_split1 : [];
214
- var columns = {};
215
- visible.forEach(function(column) {
216
- columns[column] = true;
217
- });
218
- invisible.forEach(function(column) {
219
- columns[column] = false;
220
- });
221
- return columns;
222
- },
223
238
  sync: sync
224
- }), 2), columnVisibility = _useUrlSyncedState6[0], setColumnVisibility = _useUrlSyncedState6[1];
239
+ })), 2), columnVisibility = _useUrlSyncedState6[0], setColumnVisibility = _useUrlSyncedState6[1];
225
240
  // unsynced
226
241
  var _useState = _sliced_to_array._((0, _react.useState)(initialState.totalEntries), 2), totalEntries = _useState[0], _setTotalEntries = _useState[1];
227
242
  var _useState1 = _sliced_to_array._((0, _react.useState)(initialState.totalEntries), 2), unfilteredTotalEntries = _useState1[0], setUnfilteredTotalEntries = _useState1[1];
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/table/use-table.ts"],"sourcesContent":["import {useDidUpdate} from '@mantine/hooks';\nimport {type ExpandedState, type PaginationState, type SortingState} from '@tanstack/table-core';\nimport defaultsDeep from 'lodash.defaultsdeep';\nimport {Dispatch, SetStateAction, useCallback, useMemo, useState} from 'react';\nimport {type DateRangePickerValue} from '../date-range-picker';\nimport {useUrlSyncedState} from './use-url-synced-state';\n\n// Create a deeply optional version of another type\ntype DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];\n};\n\nexport interface TableState<TData = unknown> {\n /**\n * Current pagination state\n *\n * @default { pageIndex: 0, pageSize: 50 }\n */\n pagination: PaginationState;\n /**\n * Total number of entries in the table.\n * This number is used to calculate the number of pages in the pagination.\n * When null, the number of pages is calculated using the current data length.\n *\n * @default null\n */\n totalEntries: number | null;\n /**\n * Current sorting state\n *\n * @default []\n */\n sorting: SortingState;\n /**\n * Current global filter value\n *\n * @default ''\n */\n globalFilter: string;\n\n /**\n * Current expanded state\n *\n * @default {}\n */\n expanded: ExpandedState;\n /**\n * Predicates and their current value\n *\n * @default {}\n */\n predicates: Record<string, string>;\n /**\n * Layout currently selected. When null, the first layout is used.\n *\n * @default null\n */\n layout: string | null;\n /**\n * Currently selected date range\n *\n * @default [null, null]\n */\n dateRange: DateRangePickerValue;\n /**\n * Currently selected rows\n *\n * @default {}\n */\n rowSelection: Record<string, TData>;\n /**\n * Columns that are currently visible\n *\n * @default {}\n */\n columnVisibility: Record<string, boolean>;\n}\n\nexport interface TableStore<TData = unknown> {\n /**\n * Current state of the table.\n */\n state: TableState<TData>;\n /**\n * Allows to change the pagination state.\n */\n setPagination: Dispatch<SetStateAction<TableState<TData>['pagination']>>;\n /**\n * Allows to change the total number of entries.\n */\n setTotalEntries: Dispatch<SetStateAction<TableState<TData>['totalEntries']>>;\n /**\n * Allows to change the sorting state.\n */\n setSorting: Dispatch<SetStateAction<TableState<TData>['sorting']>>;\n /**\n * Allows to change the global filter value.\n */\n setGlobalFilter: Dispatch<SetStateAction<TableState<TData>['globalFilter']>>;\n /**\n * Allows to change the rows expanded state.\n */\n setExpanded: Dispatch<SetStateAction<TableState<TData>['expanded']>>;\n /**\n * Allows to change the predicates values.\n */\n setPredicates: Dispatch<SetStateAction<TableState<TData>['predicates']>>;\n /**\n * Allows to change the selected layout.\n */\n setLayout: Dispatch<SetStateAction<TableState<TData>['layout']>>;\n /**\n * Allows to change the selected date range.\n */\n setDateRange: Dispatch<SetStateAction<TableState<TData>['dateRange']>>;\n /**\n * Allows to change the current row selection.\n */\n setRowSelection: Dispatch<SetStateAction<TableState<TData>['rowSelection']>>;\n /**\n * Allows to change the visible columns.\n */\n setColumnVisibility: Dispatch<SetStateAction<TableState<TData>['columnVisibility']>>;\n /**\n * Whether the table is currently filtered.\n */\n isFiltered: boolean;\n /**\n * Whether the table has data when unfiltered.\n *\n * This is derived from the totalEntries so make sure you set that number correctly, even if you're using a client side table.\n */\n isVacant: boolean;\n /**\n * Clear currently applied filters.\n */\n clearFilters: () => void;\n /**\n * Deselects all currently selected rows.\n */\n clearRowSelection: () => void;\n /**\n * Get currently selected rows.\n */\n getSelectedRows: () => TData[];\n /**\n * Get currently selected row\n */\n getSelectedRow: () => TData | null;\n /**\n * Whether the user can select multiple rows at the same time.\n */\n multiRowSelectionEnabled: boolean;\n /**\n * Whether rows can be selected.\n */\n rowSelectionEnabled: boolean;\n /**\n * Whether row selection is forced.\n */\n rowSelectionForced: boolean;\n}\n\nexport interface UseTableOptions<TData = unknown> {\n /**\n * Initial state of the table.\n */\n initialState?: DeepPartial<TableState<TData>>;\n /**\n * Whether rows can be selected.\n *\n * @default true\n */\n enableRowSelection?: boolean;\n /**\n * Whether multiple rows can be selected at the same time.\n *\n * @default false\n */\n enableMultiRowSelection?: boolean;\n /**\n * Forces the user to always have one row selected.\n * When activating that setting, a good practice is to have a row already selected in the initial state.\n *\n * @default false\n */\n forceSelection?: boolean;\n /**\n * Whether to sync the table state with the URL.\n *\n * @default false\n */\n syncWithUrl?: boolean;\n}\n\nconst defaultOptions: UseTableOptions = {\n enableRowSelection: true,\n enableMultiRowSelection: false,\n forceSelection: false,\n syncWithUrl: false,\n};\n\nconst defaultState: Partial<TableState> = {\n pagination: {\n pageIndex: 0,\n pageSize: 50,\n },\n totalEntries: null,\n sorting: [],\n globalFilter: '',\n predicates: {},\n layout: null,\n dateRange: [null, null],\n rowSelection: {},\n columnVisibility: {},\n};\n\nexport const useTable = <TData>(userOptions: UseTableOptions<TData> = {}): TableStore<TData> => {\n const options = defaultsDeep({}, userOptions, defaultOptions) as UseTableOptions<TData>;\n const initialState = defaultsDeep({}, options.initialState, defaultState) as TableState<TData>;\n /**\n * The `useUrlSyncedState` hook defaults to synchronize, but the table wants to default to not synchronize,\n * so always pass the sync option as a resolved boolean value.\n */\n const sync = !!options.syncWithUrl;\n\n // synced with url\n const [pagination, setPagination] = useUrlSyncedState<TableState<TData>['pagination']>({\n initialState: initialState.pagination,\n serializer: ({pageIndex, pageSize}) => [\n ['page', (pageIndex + 1).toString()],\n ['pageSize', pageSize.toString()],\n ],\n deserializer: (params) =>\n defaultsDeep(\n {\n pageIndex: params.get('page') ? parseInt(params.get('page'), 10) - 1 : undefined,\n pageSize: params.get('pageSize') ? parseInt(params.get('pageSize'), 10) : undefined,\n },\n initialState.pagination,\n ),\n sync,\n });\n const [sorting, setSorting] = useUrlSyncedState<TableState<TData>['sorting']>({\n initialState: initialState.sorting,\n serializer: (_sorting) => [\n ['sortBy', _sorting.map(({id, desc}) => `${id}.${desc ? 'desc' : 'asc'}`).join(',')],\n ],\n deserializer: (params) => {\n if (!params.has('sortBy')) {\n return initialState.sorting;\n }\n const sorts = params.get('sortBy')?.split(',') ?? [];\n return sorts.map((sort) => {\n const [id, order] = sort.split('.');\n return {id, desc: order === 'desc'};\n });\n },\n sync,\n });\n const [globalFilter, setGlobalFilter] = useUrlSyncedState<TableState<TData>['globalFilter']>({\n initialState: initialState.globalFilter,\n serializer: (filter) => [['filter', filter]],\n deserializer: (params) => params.get('filter') ?? initialState.globalFilter,\n sync,\n });\n const [predicates, setPredicates] = useUrlSyncedState<TableState<TData>['predicates']>({\n initialState: initialState.predicates,\n serializer: (_predicates) => Object.entries(_predicates).map(([key, value]) => [key, value]),\n deserializer: (params) =>\n Object.keys(initialState.predicates).reduce(\n (acc, predicateKey) => {\n acc[predicateKey] = params.get(predicateKey) ?? initialState.predicates[predicateKey];\n return acc;\n },\n {} as TableState<TData>['predicates'],\n ),\n sync,\n });\n const [layout, setLayout] = useUrlSyncedState<TableState<TData>['layout']>({\n initialState: initialState.layout,\n serializer: (_layout) => [['layout', _layout]],\n deserializer: (params) => params.get('layout') ?? initialState.layout,\n sync,\n });\n const [dateRange, setDateRange] = useUrlSyncedState<TableState<TData>['dateRange']>({\n initialState: initialState.dateRange,\n serializer: ([from, to]) => [\n ['from', from?.toISOString() ?? ''],\n ['to', to?.toISOString() ?? ''],\n ],\n deserializer: (params) => [\n params.get('from') ? new Date(params.get('from') as string) : initialState.dateRange[0],\n params.get('to') ? new Date(params.get('to') as string) : initialState.dateRange[1],\n ],\n sync,\n });\n const [columnVisibility, setColumnVisibility] = useUrlSyncedState<TableState<TData>['columnVisibility']>({\n initialState: initialState.columnVisibility,\n serializer: (columns) => [\n [\n 'show',\n Object.entries(columns)\n .filter(([, visible]) => visible === true)\n .map(([columnName]) => columnName)\n .join(','),\n ],\n [\n 'hide',\n Object.entries(columns)\n .filter(([, visible]) => visible === false)\n .map(([columnName]) => columnName)\n .join(','),\n ],\n ],\n deserializer: (params) => {\n if (!params.has('show') && !params.has('hide')) {\n return initialState.columnVisibility;\n }\n const visible = params.get('show')?.split(',') ?? [];\n const invisible = params.get('hide')?.split(',') ?? [];\n const columns = {} as TableState<TData>['columnVisibility'];\n visible.forEach((column) => {\n columns[column] = true;\n });\n invisible.forEach((column) => {\n columns[column] = false;\n });\n return columns;\n },\n sync,\n });\n\n // unsynced\n const [totalEntries, _setTotalEntries] = useState<TableState<TData>['totalEntries']>(initialState.totalEntries);\n const [unfilteredTotalEntries, setUnfilteredTotalEntries] = useState<TableState<TData>['totalEntries']>(\n initialState.totalEntries,\n );\n const [expanded, setExpanded] = useState<TableState<TData>['expanded']>(initialState.expanded);\n const [rowSelection, setRowSelection] = useState<TableState<TData>['rowSelection']>(initialState.rowSelection);\n\n const isFiltered =\n !!globalFilter ||\n Object.keys(predicates).some((predicate) => !!predicates[predicate]) ||\n !!dateRange?.[0] ||\n !!dateRange?.[1];\n\n const isVacant = unfilteredTotalEntries === 0;\n\n const setTotalEntries: typeof _setTotalEntries = useCallback(\n (updater) => {\n _setTotalEntries((old) => {\n const newTotalEntries = updater instanceof Function ? updater(old) : updater;\n if (!isFiltered) {\n setUnfilteredTotalEntries(newTotalEntries);\n }\n return newTotalEntries;\n });\n },\n [isFiltered],\n );\n\n const clearFilters = useCallback(() => {\n setPredicates(initialState.predicates);\n setGlobalFilter('');\n }, []);\n\n const clearRowSelection = useCallback(() => {\n setRowSelection({});\n }, []);\n\n const getSelectedRows = useCallback(() => Object.values(rowSelection), [rowSelection]);\n\n const getSelectedRow = () => getSelectedRows()[0] ?? null;\n\n useDidUpdate(() => {\n if (!options.enableMultiRowSelection) {\n clearRowSelection();\n }\n }, [globalFilter, pagination, sorting, dateRange, predicates]);\n\n const state = useMemo(\n () => ({\n pagination,\n totalEntries,\n sorting,\n globalFilter,\n expanded,\n predicates,\n layout,\n dateRange,\n rowSelection,\n columnVisibility,\n }),\n [\n pagination,\n totalEntries,\n sorting,\n globalFilter,\n expanded,\n predicates,\n layout,\n dateRange,\n rowSelection,\n columnVisibility,\n ],\n );\n\n return {\n state,\n setPagination,\n setTotalEntries,\n setSorting,\n setGlobalFilter,\n setExpanded,\n setPredicates,\n setLayout,\n setDateRange,\n setRowSelection,\n setColumnVisibility,\n isFiltered,\n isVacant,\n clearFilters,\n clearRowSelection,\n getSelectedRows,\n getSelectedRow,\n rowSelectionEnabled: options.enableRowSelection,\n rowSelectionForced: options.forceSelection,\n multiRowSelectionEnabled: options.enableMultiRowSelection,\n };\n};\n"],"names":["useTable","defaultOptions","enableRowSelection","enableMultiRowSelection","forceSelection","syncWithUrl","defaultState","pagination","pageIndex","pageSize","totalEntries","sorting","globalFilter","predicates","layout","dateRange","rowSelection","columnVisibility","userOptions","options","defaultsDeep","initialState","sync","useUrlSyncedState","serializer","toString","deserializer","params","get","parseInt","undefined","setPagination","_sorting","map","id","desc","join","has","sorts","split","sort","order","setSorting","filter","setGlobalFilter","_predicates","Object","entries","key","value","keys","reduce","acc","predicateKey","setPredicates","_layout","setLayout","from","to","toISOString","Date","setDateRange","columns","visible","columnName","invisible","forEach","column","setColumnVisibility","useState","_setTotalEntries","unfilteredTotalEntries","setUnfilteredTotalEntries","expanded","setExpanded","setRowSelection","isFiltered","some","predicate","isVacant","setTotalEntries","useCallback","updater","old","newTotalEntries","Function","clearFilters","clearRowSelection","getSelectedRows","values","getSelectedRow","useDidUpdate","state","useMemo","rowSelectionEnabled","rowSelectionForced","multiRowSelectionEnabled"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/table/use-table.ts"],"sourcesContent":["import {useDidUpdate} from '@mantine/hooks';\nimport {type ExpandedState, type PaginationState, type SortingState} from '@tanstack/table-core';\nimport defaultsDeep from 'lodash.defaultsdeep';\nimport {Dispatch, SetStateAction, useCallback, useMemo, useState} from 'react';\nimport {type DateRangePickerValue} from '../date-range-picker';\nimport {useUrlSyncedState, UseUrlSyncedStateOptions} from './use-url-synced-state';\n\n// Create a deeply optional version of another type\ntype DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];\n};\n\nexport interface TableState<TData = unknown> {\n /**\n * Current pagination state\n *\n * @default { pageIndex: 0, pageSize: 50 }\n */\n pagination: PaginationState;\n /**\n * Total number of entries in the table.\n * This number is used to calculate the number of pages in the pagination.\n * When null, the number of pages is calculated using the current data length.\n *\n * @default null\n */\n totalEntries: number | null;\n /**\n * Current sorting state\n *\n * @default []\n */\n sorting: SortingState;\n /**\n * Current global filter value\n *\n * @default ''\n */\n globalFilter: string;\n\n /**\n * Current expanded state\n *\n * @default {}\n */\n expanded: ExpandedState;\n /**\n * Predicates and their current value\n *\n * @default {}\n */\n predicates: Record<string, string>;\n /**\n * Layout currently selected. When null, the first layout is used.\n *\n * @default null\n */\n layout: string | null;\n /**\n * Currently selected date range\n *\n * @default [null, null]\n */\n dateRange: DateRangePickerValue;\n /**\n * Currently selected rows\n *\n * @default {}\n */\n rowSelection: Record<string, TData>;\n /**\n * Columns that are currently visible\n *\n * @default {}\n */\n columnVisibility: Record<string, boolean>;\n}\n\nexport interface TableStore<TData = unknown> {\n /**\n * Current state of the table.\n */\n state: TableState<TData>;\n /**\n * Allows to change the pagination state.\n */\n setPagination: Dispatch<SetStateAction<TableState<TData>['pagination']>>;\n /**\n * Allows to change the total number of entries.\n */\n setTotalEntries: Dispatch<SetStateAction<TableState<TData>['totalEntries']>>;\n /**\n * Allows to change the sorting state.\n */\n setSorting: Dispatch<SetStateAction<TableState<TData>['sorting']>>;\n /**\n * Allows to change the global filter value.\n */\n setGlobalFilter: Dispatch<SetStateAction<TableState<TData>['globalFilter']>>;\n /**\n * Allows to change the rows expanded state.\n */\n setExpanded: Dispatch<SetStateAction<TableState<TData>['expanded']>>;\n /**\n * Allows to change the predicates values.\n */\n setPredicates: Dispatch<SetStateAction<TableState<TData>['predicates']>>;\n /**\n * Allows to change the selected layout.\n */\n setLayout: Dispatch<SetStateAction<TableState<TData>['layout']>>;\n /**\n * Allows to change the selected date range.\n */\n setDateRange: Dispatch<SetStateAction<TableState<TData>['dateRange']>>;\n /**\n * Allows to change the current row selection.\n */\n setRowSelection: Dispatch<SetStateAction<TableState<TData>['rowSelection']>>;\n /**\n * Allows to change the visible columns.\n */\n setColumnVisibility: Dispatch<SetStateAction<TableState<TData>['columnVisibility']>>;\n /**\n * Whether the table is currently filtered.\n */\n isFiltered: boolean;\n /**\n * Whether the table has data when unfiltered.\n *\n * This is derived from the totalEntries so make sure you set that number correctly, even if you're using a client side table.\n */\n isVacant: boolean;\n /**\n * Clear currently applied filters.\n */\n clearFilters: () => void;\n /**\n * Deselects all currently selected rows.\n */\n clearRowSelection: () => void;\n /**\n * Get currently selected rows.\n */\n getSelectedRows: () => TData[];\n /**\n * Get currently selected row\n */\n getSelectedRow: () => TData | null;\n /**\n * Whether the user can select multiple rows at the same time.\n */\n multiRowSelectionEnabled: boolean;\n /**\n * Whether rows can be selected.\n */\n rowSelectionEnabled: boolean;\n /**\n * Whether row selection is forced.\n */\n rowSelectionForced: boolean;\n}\n\nexport interface UseTableOptions<TData = unknown> {\n /**\n * Initial state of the table.\n */\n initialState?: DeepPartial<TableState<TData>>;\n /**\n * Whether rows can be selected.\n *\n * @default true\n */\n enableRowSelection?: boolean;\n /**\n * Whether multiple rows can be selected at the same time.\n *\n * @default false\n */\n enableMultiRowSelection?: boolean;\n /**\n * Forces the user to always have one row selected.\n * When activating that setting, a good practice is to have a row already selected in the initial state.\n *\n * @default false\n */\n forceSelection?: boolean;\n /**\n * Whether to sync the table state with the URL.\n *\n * @default false\n */\n syncWithUrl?: boolean;\n}\n\nconst defaultOptions: UseTableOptions = {\n enableRowSelection: true,\n enableMultiRowSelection: false,\n forceSelection: false,\n syncWithUrl: false,\n};\n\nconst defaultState: Partial<TableState> = {\n pagination: {\n pageIndex: 0,\n pageSize: 50,\n },\n totalEntries: null,\n sorting: [],\n globalFilter: '',\n predicates: {},\n layout: null,\n dateRange: [null, null],\n rowSelection: {},\n columnVisibility: {},\n};\n\nconst serialization = <K extends keyof TableState>(\n input: Pick<UseUrlSyncedStateOptions<TableState[K]>, 'serializer' | 'deserializer'>,\n) => Object.freeze(input);\n\nconst PAGINATION_SERIALIZATION = serialization<'pagination'>({\n serializer: ({pageIndex, pageSize}) => [\n ['page', (pageIndex + 1).toString()],\n ['pageSize', pageSize.toString()],\n ],\n deserializer: (params, initialState) =>\n defaultsDeep(\n {\n pageIndex: params.get('page') ? Math.max(1, parseInt(params.get('page'), 10)) - 1 : undefined,\n pageSize: params.get('pageSize') ? parseInt(params.get('pageSize'), 10) : undefined,\n },\n initialState,\n ),\n});\n\nconst SORTING_SERIALIZATION = serialization<'sorting'>({\n serializer: (sorting) => [['sortBy', sorting.map(({id, desc}) => `${id}.${desc ? 'desc' : 'asc'}`).join(',')]],\n deserializer: (params, initialState) => {\n if (!params.has('sortBy')) {\n return initialState;\n }\n const sorts = params.get('sortBy')?.split(',') ?? [];\n return sorts.map((sort) => {\n const [id, order] = sort.split('.');\n return {id, desc: order === 'desc'};\n });\n },\n});\n\nconst GLOBAL_FILTER_SERIALIZATION = serialization<'globalFilter'>({\n serializer: (filter) => [['filter', filter]],\n deserializer: (params, initialState) => params.get('filter') ?? initialState,\n});\n\nconst PREDICATES_SERIALIZATION = serialization<'predicates'>({\n serializer: (predicates) => Object.entries(predicates),\n deserializer: (params, initialState) =>\n Object.keys(initialState).reduce(\n (acc, predicateKey) => {\n acc[predicateKey] = params.get(predicateKey) ?? initialState[predicateKey];\n return acc;\n },\n {} as TableState['predicates'],\n ),\n});\n\nconst LAYOUT_SERIALIZATION = serialization<'layout'>({\n serializer: (_layout) => [['layout', _layout]],\n deserializer: (params, initialState) => params.get('layout') ?? initialState,\n});\n\nconst DATE_RANGE_SERIALIZATION = serialization<'dateRange'>({\n serializer: ([from, to]) => [\n ['from', from?.toISOString() ?? '', true],\n ['to', to?.toISOString() ?? '', true],\n ],\n deserializer: (params, initial) => [\n params.get('from') ? new Date(params.get('from') as string) : initial[0],\n params.get('to') ? new Date(params.get('to') as string) : initial[1],\n ],\n});\n\nconst COLUMN_VISIBILITY_SERIALIZATION = serialization<'columnVisibility'>({\n serializer: (columns) => [\n [\n 'show',\n Object.entries(columns)\n .filter(([, visible]) => visible === true)\n .map(([columnName]) => columnName)\n .join(','),\n ],\n [\n 'hide',\n Object.entries(columns)\n .filter(([, visible]) => visible === false)\n .map(([columnName]) => columnName)\n .join(','),\n ],\n ],\n deserializer: (params, initial) => {\n if (!params.has('show') && !params.has('hide')) {\n return initial;\n }\n const visible = params.get('show')?.split(',') ?? [];\n const invisible = params.get('hide')?.split(',') ?? [];\n const columns = {} as TableState['columnVisibility'];\n visible.forEach((column) => {\n columns[column] = true;\n });\n invisible.forEach((column) => {\n columns[column] = false;\n });\n return columns;\n },\n});\n\nexport const useTable = <TData>(userOptions: UseTableOptions<TData> = {}): TableStore<TData> => {\n const options = defaultsDeep({}, userOptions, defaultOptions) as UseTableOptions<TData>;\n const initialState = defaultsDeep({}, options.initialState, defaultState) as TableState<TData>;\n /**\n * The `useUrlSyncedState` hook defaults to synchronize, but the table wants to default to not synchronize,\n * so always pass the sync option as a resolved boolean value.\n */\n const sync = !!options.syncWithUrl;\n\n // (Optionally) synced with url\n const [pagination, setPagination] = useUrlSyncedState<TableState<TData>['pagination']>({\n ...PAGINATION_SERIALIZATION,\n initialState: initialState.pagination,\n sync,\n });\n const [sorting, setSorting] = useUrlSyncedState<TableState<TData>['sorting']>({\n ...SORTING_SERIALIZATION,\n initialState: initialState.sorting,\n sync,\n });\n const [globalFilter, setGlobalFilter] = useUrlSyncedState<TableState<TData>['globalFilter']>({\n ...GLOBAL_FILTER_SERIALIZATION,\n initialState: initialState.globalFilter,\n sync,\n });\n const [predicates, setPredicates] = useUrlSyncedState<TableState<TData>['predicates']>({\n ...PREDICATES_SERIALIZATION,\n initialState: initialState.predicates,\n sync,\n });\n const [layout, setLayout] = useUrlSyncedState<TableState<TData>['layout']>({\n ...LAYOUT_SERIALIZATION,\n initialState: initialState.layout,\n sync,\n });\n const [dateRange, setDateRange] = useUrlSyncedState<TableState<TData>['dateRange']>({\n ...DATE_RANGE_SERIALIZATION,\n initialState: initialState.dateRange,\n sync,\n });\n const [columnVisibility, setColumnVisibility] = useUrlSyncedState<TableState<TData>['columnVisibility']>({\n ...COLUMN_VISIBILITY_SERIALIZATION,\n initialState: initialState.columnVisibility,\n sync,\n });\n\n // unsynced\n const [totalEntries, _setTotalEntries] = useState<TableState<TData>['totalEntries']>(initialState.totalEntries);\n const [unfilteredTotalEntries, setUnfilteredTotalEntries] = useState<TableState<TData>['totalEntries']>(\n initialState.totalEntries,\n );\n const [expanded, setExpanded] = useState<TableState<TData>['expanded']>(initialState.expanded);\n const [rowSelection, setRowSelection] = useState<TableState<TData>['rowSelection']>(initialState.rowSelection);\n\n const isFiltered =\n !!globalFilter ||\n Object.keys(predicates).some((predicate) => !!predicates[predicate]) ||\n !!dateRange?.[0] ||\n !!dateRange?.[1];\n\n const isVacant = unfilteredTotalEntries === 0;\n\n const setTotalEntries: typeof _setTotalEntries = useCallback(\n (updater) => {\n _setTotalEntries((old) => {\n const newTotalEntries = updater instanceof Function ? updater(old) : updater;\n if (!isFiltered) {\n setUnfilteredTotalEntries(newTotalEntries);\n }\n return newTotalEntries;\n });\n },\n [isFiltered],\n );\n\n const clearFilters = useCallback(() => {\n setPredicates(initialState.predicates);\n setGlobalFilter('');\n }, []);\n\n const clearRowSelection = useCallback(() => {\n setRowSelection({});\n }, []);\n\n const getSelectedRows = useCallback(() => Object.values(rowSelection), [rowSelection]);\n\n const getSelectedRow = () => getSelectedRows()[0] ?? null;\n\n useDidUpdate(() => {\n if (!options.enableMultiRowSelection) {\n clearRowSelection();\n }\n }, [globalFilter, pagination, sorting, dateRange, predicates]);\n\n const state = useMemo(\n () => ({\n pagination,\n totalEntries,\n sorting,\n globalFilter,\n expanded,\n predicates,\n layout,\n dateRange,\n rowSelection,\n columnVisibility,\n }),\n [\n pagination,\n totalEntries,\n sorting,\n globalFilter,\n expanded,\n predicates,\n layout,\n dateRange,\n rowSelection,\n columnVisibility,\n ],\n );\n\n return {\n state,\n setPagination,\n setTotalEntries,\n setSorting,\n setGlobalFilter,\n setExpanded,\n setPredicates,\n setLayout,\n setDateRange,\n setRowSelection,\n setColumnVisibility,\n isFiltered,\n isVacant,\n clearFilters,\n clearRowSelection,\n getSelectedRows,\n getSelectedRow,\n rowSelectionEnabled: options.enableRowSelection,\n rowSelectionForced: options.forceSelection,\n multiRowSelectionEnabled: options.enableMultiRowSelection,\n };\n};\n"],"names":["useTable","defaultOptions","enableRowSelection","enableMultiRowSelection","forceSelection","syncWithUrl","defaultState","pagination","pageIndex","pageSize","totalEntries","sorting","globalFilter","predicates","layout","dateRange","rowSelection","columnVisibility","serialization","input","Object","freeze","PAGINATION_SERIALIZATION","serializer","toString","deserializer","params","initialState","defaultsDeep","get","Math","max","parseInt","undefined","SORTING_SERIALIZATION","map","id","desc","join","has","sorts","split","sort","order","GLOBAL_FILTER_SERIALIZATION","filter","PREDICATES_SERIALIZATION","entries","keys","reduce","acc","predicateKey","LAYOUT_SERIALIZATION","_layout","DATE_RANGE_SERIALIZATION","from","to","toISOString","initial","Date","COLUMN_VISIBILITY_SERIALIZATION","columns","visible","columnName","invisible","forEach","column","userOptions","options","sync","useUrlSyncedState","setPagination","setSorting","setGlobalFilter","setPredicates","setLayout","setDateRange","setColumnVisibility","useState","_setTotalEntries","unfilteredTotalEntries","setUnfilteredTotalEntries","expanded","setExpanded","setRowSelection","isFiltered","some","predicate","isVacant","setTotalEntries","useCallback","updater","old","newTotalEntries","Function","clearFilters","clearRowSelection","getSelectedRows","values","getSelectedRow","useDidUpdate","state","useMemo","rowSelectionEnabled","rowSelectionForced","multiRowSelectionEnabled"],"mappings":"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"}
@@ -1,15 +1,18 @@
1
1
  import { Dispatch, SetStateAction } from 'react';
2
2
  /**
3
- * A search param entry defines the key (index 0) and value (index 1) of a search parameter.
3
+ * A search param entry defines the encoded value of a search parameter as `[key, value, alwaysEmit?]`.
4
+ * The third entry is an optional boolean that defaults to `false`.
5
+ * Setting `alwaysEmit` to `true` means any non-nullish value is always written to the search params,
6
+ * even if it matches the initial value. It is also written on initialization.
4
7
  */
5
- export type SearchParamEntry = [string, string | null | undefined];
8
+ export type SearchParamEntry = [string, string | null | undefined, boolean?];
6
9
  export interface UseUrlSyncedStateOptions<T> {
7
10
  /**
8
11
  * The initial state to use, if there would be no search params to deserialize from.
9
12
  * These values are also treated as defaults, and if the current state matches the initialState,
10
13
  * no value will be written to the search params.
11
14
  */
12
- initialState: T extends object ? Readonly<T> : T;
15
+ initialState: T | (() => T);
13
16
  /**
14
17
  * The serializer function is used to determine how the state is translated to url search parameters.
15
18
  * Called each time the state changes.
@@ -26,10 +29,11 @@ export interface UseUrlSyncedStateOptions<T> {
26
29
  * May return a partial state, values that are not deserialed are taken from the `initialState`.
27
30
  * Called only once when initializing the state.
28
31
  * @param params All the search parameters of the current url.
32
+ * @param initialState The initialState, can be used to take defaults from.
29
33
  * @returns The initial state based on the current url.
30
34
  * @example (params) => params.get('filter') ?? '',
31
35
  */
32
- deserializer: (params: URLSearchParams) => T;
36
+ deserializer: (params: URLSearchParams, initialState: T) => T;
33
37
  /**
34
38
  * Whether the state should be synced with the url, defaults to `true`.
35
39
  * When set to `false`, the hook behaves just like a regular `useState` hook from react.
@@ -1 +1 @@
1
- {"version":3,"file":"use-url-synced-state.d.ts","sourceRoot":"","sources":["../../../../src/components/table/use-url-synced-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,cAAc,EAAoB,MAAM,OAAO,CAAC;AAElE;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AA8CnE,MAAM,WAAW,wBAAwB,CAAC,CAAC;IACvC;;;;OAIG;IACH,YAAY,EAAE,CAAC,SAAS,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACjD;;;;;;;;;OASG;IACH,UAAU,EAAE,CAAC,UAAU,EAAE,CAAC,KAAK,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC1D;;;;;;;OAOG;IACH,YAAY,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,CAAC,CAAC;IAC7C;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,iBAAiB,GAAI,CAAC,WAAW,wBAAwB,CAAC,CAAC,CAAC,8CAkCxE,CAAC"}
1
+ {"version":3,"file":"use-url-synced-state.d.ts","sourceRoot":"","sources":["../../../../src/components/table/use-url-synced-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,cAAc,EAAoB,MAAM,OAAO,CAAC;AAElE;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;AAyC7E,MAAM,WAAW,wBAAwB,CAAC,CAAC;IACvC;;;;OAIG;IACH,YAAY,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5B;;;;;;;;;OASG;IACH,UAAU,EAAE,CAAC,UAAU,EAAE,CAAC,KAAK,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC1D;;;;;;;;OAQG;IACH,YAAY,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC;IAC9D;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAClB;AAKD,eAAO,MAAM,iBAAiB,GAAI,CAAC,WAAW,wBAAwB,CAAC,CAAC,CAAC,8CA+CxE,CAAC"}