@monolith-forensics/monolith-ui 1.1.90 → 1.2.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 (93) hide show
  1. package/dist/DateInput/DateInput.d.ts +2 -1
  2. package/dist/DateInput/DateInput.js +9 -6
  3. package/dist/DropDownMenu/DropDownMenu.js +41 -35
  4. package/dist/Input/Input.d.ts +1 -3
  5. package/dist/Input/Input.js +5 -4
  6. package/dist/Loader/Loader.js +0 -1
  7. package/dist/MonolithUIProvider/GlobalStyle.d.ts +1 -0
  8. package/dist/MonolithUIProvider/GlobalStyle.js +17 -0
  9. package/dist/MonolithUIProvider/MonolithUIProvider.d.ts +131 -7
  10. package/dist/MonolithUIProvider/MonolithUIProvider.js +4 -4
  11. package/dist/MonolithUIProvider/index.d.ts +1 -1
  12. package/dist/MonolithUIProvider/index.js +1 -1
  13. package/dist/QueryFilter/DefaultOperators.d.ts +77 -0
  14. package/dist/QueryFilter/DefaultOperators.js +22 -0
  15. package/dist/QueryFilter/QueryFilter.d.ts +5 -0
  16. package/dist/QueryFilter/QueryFilter.js +224 -0
  17. package/dist/QueryFilter/index.d.ts +3 -0
  18. package/dist/QueryFilter/index.js +3 -0
  19. package/dist/QueryFilter/types.d.ts +51 -0
  20. package/dist/QueryFilter/types.js +1 -0
  21. package/dist/QueryFilter/useQueryFilter.d.ts +3 -0
  22. package/dist/QueryFilter/useQueryFilter.js +36 -0
  23. package/dist/Table/ActionButton.d.ts +4 -0
  24. package/dist/Table/ActionButton.js +11 -0
  25. package/dist/Table/ActionCell.d.ts +4 -0
  26. package/dist/Table/ActionCell.js +13 -0
  27. package/dist/Table/Column.d.ts +3 -0
  28. package/dist/Table/Column.js +5 -0
  29. package/dist/Table/ColumnResizer.d.ts +14 -0
  30. package/dist/Table/ColumnResizer.js +45 -0
  31. package/dist/Table/LoadingIndicator.d.ts +4 -0
  32. package/dist/Table/LoadingIndicator.js +76 -0
  33. package/dist/Table/RenderSkeleton.d.ts +6 -0
  34. package/dist/Table/RenderSkeleton.js +25 -0
  35. package/dist/Table/SelectionCell.d.ts +4 -0
  36. package/dist/Table/SelectionCell.js +12 -0
  37. package/dist/Table/StateStorage.d.ts +27 -0
  38. package/dist/Table/StateStorage.js +98 -0
  39. package/dist/Table/StaticRows.d.ts +5 -0
  40. package/dist/Table/StaticRows.js +10 -0
  41. package/dist/Table/Table.d.ts +2 -92
  42. package/dist/Table/Table.js +73 -679
  43. package/dist/Table/TableComponents.d.ts +16 -0
  44. package/dist/Table/TableComponents.js +144 -0
  45. package/dist/Table/TableDefaults.d.ts +25 -0
  46. package/dist/Table/TableDefaults.js +25 -0
  47. package/dist/Table/TableHeader.d.ts +3 -0
  48. package/dist/Table/TableHeader.js +93 -0
  49. package/dist/Table/TableMenu/InfoBadge.d.ts +10 -0
  50. package/dist/Table/TableMenu/InfoBadge.js +23 -0
  51. package/dist/Table/TableMenu/TableMenu.d.ts +2 -0
  52. package/dist/Table/TableMenu/TableMenu.js +108 -0
  53. package/dist/Table/TableMenu/index.d.ts +2 -0
  54. package/dist/Table/TableMenu/index.js +2 -0
  55. package/dist/Table/TableProvider.d.ts +4 -0
  56. package/dist/Table/TableProvider.js +499 -0
  57. package/dist/Table/TableRow.d.ts +3 -0
  58. package/dist/Table/TableRow.js +27 -0
  59. package/dist/Table/Utils/index.d.ts +3 -0
  60. package/dist/Table/Utils/index.js +3 -0
  61. package/dist/Table/Utils/resizeHandler.d.ts +3 -0
  62. package/dist/Table/Utils/resizeHandler.js +84 -0
  63. package/dist/Table/Utils/resolveColumnReorder.d.ts +3 -0
  64. package/dist/Table/Utils/resolveColumnReorder.js +5 -0
  65. package/dist/Table/Utils/resolveColumnResize.d.ts +3 -0
  66. package/dist/Table/Utils/resolveColumnResize.js +5 -0
  67. package/dist/Table/Utils/syncColumnState.d.ts +3 -0
  68. package/dist/Table/Utils/syncColumnState.js +26 -0
  69. package/dist/Table/VirtualIzedRows.d.ts +11 -0
  70. package/dist/Table/VirtualIzedRows.js +26 -0
  71. package/dist/Table/enums.d.ts +10 -0
  72. package/dist/Table/enums.js +12 -0
  73. package/dist/Table/index.d.ts +4 -3
  74. package/dist/Table/index.js +4 -2
  75. package/dist/Table/types.d.ts +267 -0
  76. package/dist/Table/types.js +1 -0
  77. package/dist/Table/useTable.d.ts +3 -0
  78. package/dist/Table/useTable.js +10 -0
  79. package/dist/TextInput/TextInput.d.ts +2 -3
  80. package/dist/TextInput/TextInput.js +5 -4
  81. package/dist/hooks/index.d.ts +1 -0
  82. package/dist/hooks/index.js +1 -0
  83. package/dist/hooks/useDelayedBoolean.d.ts +2 -0
  84. package/dist/hooks/useDelayedBoolean.js +17 -0
  85. package/dist/index.d.ts +3 -3
  86. package/dist/index.js +3 -2
  87. package/dist/theme/getTheme.d.ts +3 -0
  88. package/dist/theme/getTheme.js +13 -0
  89. package/dist/theme/index.d.ts +3 -168
  90. package/dist/theme/index.js +3 -12
  91. package/dist/theme/variants.d.ts +7 -172
  92. package/dist/theme/variants.js +6 -5
  93. package/package.json +2 -1
@@ -0,0 +1,499 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { jsx as _jsx } from "react/jsx-runtime";
13
+ import { createContext, useEffect, useMemo, useState } from "react";
14
+ import StateStorage from "./StateStorage";
15
+ import { resolveColumnResize, syncColumnState } from "./Utils";
16
+ import TableDefaults from "./TableDefaults";
17
+ import shortUUID from "short-uuid";
18
+ import { SelectionStatus } from "./enums";
19
+ import moment from "moment";
20
+ export const TableContext = createContext(null);
21
+ const TableProvider = (_a) => {
22
+ var { children, columns, tableInstanceRef, stateStorage } = _a, props = __rest(_a, ["children", "columns", "tableInstanceRef", "stateStorage"]);
23
+ const _columns = columns
24
+ .map((child, index) => {
25
+ if (child.dataField === "__key") {
26
+ throw new Error("dataField cannot be __key");
27
+ }
28
+ // check for duplicate dataFields
29
+ const dataFieldCount = columns.filter((col) => col.dataField === child.dataField).length;
30
+ if (dataFieldCount > 1) {
31
+ throw new Error(`Duplicate dataField found: ${child.dataField}. dataField must be unique.`);
32
+ }
33
+ return Object.assign(Object.assign({}, child), { visible: child.visible === undefined ? true : child.visible, orderValue: index, minWidth: (child === null || child === void 0 ? void 0 : child.width)
34
+ ? child.width < TableDefaults.td.minWidth
35
+ ? child.width
36
+ : TableDefaults.td.minWidth
37
+ : TableDefaults.td.minWidth, columnId: shortUUID.generate(), enableResize: resolveColumnResize(child, props.enableColumnResize) });
38
+ })
39
+ .sort((a, b) => a.orderValue - b.orderValue);
40
+ const savedTableState = useMemo(() => {
41
+ return (stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.enabled)
42
+ ? StateStorage.getTableState(stateStorage.key)
43
+ : undefined;
44
+ }, []);
45
+ const { columnState: savedColumnState, selectionState: savedSelectionState, sortState: savedSortState, searchState: savedSearchState, filterState: savedFilterState, } = savedTableState || {};
46
+ const [compactState, setCompactState] = useState(props.compact || false);
47
+ const [columnState, setColumnState] = useState(syncColumnState(_columns, savedColumnState));
48
+ const [search, setSearch] = useState(savedSearchState || "");
49
+ const [filterState, setFilterState] = useState(savedFilterState);
50
+ const [sortState, setSortState] = useState(savedSortState);
51
+ const [selectionStatus, setSelectionStatus] = useState((savedSelectionState === null || savedSelectionState === void 0 ? void 0 : savedSelectionState.selectionStatus) || SelectionStatus.None);
52
+ const [excludedRowKeys, setExcludedRowKeys] = useState((savedSelectionState === null || savedSelectionState === void 0 ? void 0 : savedSelectionState.excludedRowKeys) || []);
53
+ const [selectedRowKeys, setSelectedRowKeys] = useState((savedSelectionState === null || savedSelectionState === void 0 ? void 0 : savedSelectionState.selectedRowKeys) || []);
54
+ const getColumnState = (dataField) => {
55
+ return columnState.find((col) => col.dataField === dataField);
56
+ };
57
+ const handleColumnReorder = (dragColumn, dropColumn) => {
58
+ var _a, _b, _c;
59
+ if (!dragColumn || !dropColumn)
60
+ return;
61
+ const dropColumnOrder = (_a = columnState.find((col) => col.dataField === dropColumn.dataField)) === null || _a === void 0 ? void 0 : _a.orderValue;
62
+ const dragColumnOrder = (_b = columnState.find((col) => col.dataField === dragColumn.dataField)) === null || _b === void 0 ? void 0 : _b.orderValue;
63
+ if (dropColumnOrder === undefined || dragColumnOrder === undefined)
64
+ return;
65
+ const moveDirection = dragColumnOrder < dropColumnOrder ? "right" : "left";
66
+ const newColumnState = columnState
67
+ .map((col) => {
68
+ if (col.dataField === dragColumn.dataField) {
69
+ col.orderValue =
70
+ dropColumnOrder + (moveDirection === "right" ? 1 : -1);
71
+ }
72
+ else {
73
+ if (col.orderValue > dropColumnOrder) {
74
+ col.orderValue = col.orderValue + 1;
75
+ }
76
+ }
77
+ return col;
78
+ })
79
+ .sort((a, b) => a.orderValue - b.orderValue);
80
+ setColumnState(newColumnState);
81
+ (_c = props.onColumnReorder) === null || _c === void 0 ? void 0 : _c.call(props, {
82
+ columnState: newColumnState,
83
+ column: dragColumn,
84
+ });
85
+ };
86
+ const handleColumnHeaderClick = (column) => {
87
+ var _a;
88
+ if (props.enableSorting === true || column.enableSorting === true) {
89
+ setSortState((prevSortState) => {
90
+ var _a;
91
+ let newSortState = {
92
+ dataField: column.dataField,
93
+ dir: "asc",
94
+ };
95
+ if ((prevSortState === null || prevSortState === void 0 ? void 0 : prevSortState.dataField) === column.dataField) {
96
+ if (prevSortState.dir === "desc") {
97
+ newSortState = null;
98
+ }
99
+ else {
100
+ if (newSortState) {
101
+ newSortState.dir = prevSortState.dir === "asc" ? "desc" : "asc";
102
+ }
103
+ }
104
+ }
105
+ (_a = props.onColumnHeaderClick) === null || _a === void 0 ? void 0 : _a.call(props, { column, sort: newSortState });
106
+ return newSortState;
107
+ });
108
+ }
109
+ else {
110
+ (_a = props.onColumnHeaderClick) === null || _a === void 0 ? void 0 : _a.call(props, { column, sort: null });
111
+ }
112
+ };
113
+ const handleFilterChange = (query) => {
114
+ setFilterState(query);
115
+ };
116
+ const runSearch = (searchText) => {
117
+ setSearch(searchText);
118
+ };
119
+ const sortData = (sortState) => {
120
+ // sort data
121
+ return props.data.sort((a, b) => {
122
+ if (sortState) {
123
+ if (sortState.dir === "asc") {
124
+ if (a[sortState.dataField] < b[sortState.dataField]) {
125
+ return -1;
126
+ }
127
+ if (a[sortState.dataField] > b[sortState.dataField]) {
128
+ return 1;
129
+ }
130
+ return 0;
131
+ }
132
+ else if (sortState.dir === "desc") {
133
+ if (a[sortState.dataField] > b[sortState.dataField]) {
134
+ return -1;
135
+ }
136
+ if (a[sortState.dataField] < b[sortState.dataField]) {
137
+ return 1;
138
+ }
139
+ return 0;
140
+ }
141
+ }
142
+ // sort by __index
143
+ if (a.__index < b.__index) {
144
+ return -1;
145
+ }
146
+ if (a.__index > b.__index) {
147
+ return 1;
148
+ }
149
+ return 0;
150
+ });
151
+ };
152
+ const searchData = (searchText) => {
153
+ return props.data.filter((row) => {
154
+ return Object.keys(row)
155
+ .filter((key) => key !== "__key" && key !== "__index")
156
+ .some((key) => {
157
+ if (typeof row[key] === "string") {
158
+ return row[key].toLowerCase().includes(searchText.toLowerCase());
159
+ }
160
+ return false;
161
+ });
162
+ });
163
+ };
164
+ const filterData = (filter) => {
165
+ // create copy of data
166
+ let processedData = props.data.map((row) => row);
167
+ const { combinator, rules } = filter;
168
+ if (!combinator || !rules)
169
+ return props.data;
170
+ for (const rule of rules) {
171
+ const column = columnState.find((col) => col.dataField === rule.dataField);
172
+ const { value, operator, dataField } = rule;
173
+ if (!value) {
174
+ continue;
175
+ }
176
+ switch (operator.value) {
177
+ case "=":
178
+ processedData = processedData.filter((row) => {
179
+ if ((column === null || column === void 0 ? void 0 : column.dataType) === "date") {
180
+ return moment(row[dataField]).isSame(moment(value), "day");
181
+ }
182
+ else if ((column === null || column === void 0 ? void 0 : column.dataType) === "datetime") {
183
+ return moment(row[dataField]).isSame(moment(value));
184
+ }
185
+ return row[dataField] == value;
186
+ });
187
+ break;
188
+ case "!=":
189
+ processedData = processedData.filter((row) => {
190
+ if ((column === null || column === void 0 ? void 0 : column.dataType) === "date") {
191
+ return !moment(row[dataField]).isSame(moment(value), "day");
192
+ }
193
+ else if ((column === null || column === void 0 ? void 0 : column.dataType) === "datetime") {
194
+ return !moment(row[dataField]).isSame(moment(value));
195
+ }
196
+ return row[dataField] != value;
197
+ });
198
+ break;
199
+ case ">":
200
+ processedData = processedData.filter((row) => {
201
+ if ((column === null || column === void 0 ? void 0 : column.dataType) === "date") {
202
+ return moment(row[dataField]).isAfter(moment(value), "day");
203
+ }
204
+ else if ((column === null || column === void 0 ? void 0 : column.dataType) === "datetime") {
205
+ return moment(row[dataField]).isAfter(moment(value));
206
+ }
207
+ return row[dataField] > value;
208
+ });
209
+ break;
210
+ case "<":
211
+ processedData = processedData.filter((row) => {
212
+ if ((column === null || column === void 0 ? void 0 : column.dataType) === "date") {
213
+ return moment(row[dataField]).isBefore(moment(value), "day");
214
+ }
215
+ else if ((column === null || column === void 0 ? void 0 : column.dataType) === "datetime") {
216
+ return moment(row[dataField]).isBefore(moment(value));
217
+ }
218
+ return row[dataField] < value;
219
+ });
220
+ break;
221
+ case ">=":
222
+ processedData = processedData.filter((row) => {
223
+ if ((column === null || column === void 0 ? void 0 : column.dataType) === "date") {
224
+ return moment(row[dataField]).isSameOrAfter(moment(value), "day");
225
+ }
226
+ else if ((column === null || column === void 0 ? void 0 : column.dataType) === "datetime") {
227
+ return moment(row[dataField]).isSameOrAfter(moment(value));
228
+ }
229
+ return row[dataField] >= value;
230
+ });
231
+ break;
232
+ case "<=":
233
+ processedData = processedData.filter((row) => {
234
+ if ((column === null || column === void 0 ? void 0 : column.dataType) === "date") {
235
+ return moment(row[dataField]).isSameOrBefore(moment(value), "day");
236
+ }
237
+ else if ((column === null || column === void 0 ? void 0 : column.dataType) === "datetime") {
238
+ return moment(row[dataField]).isSameOrBefore(moment(value));
239
+ }
240
+ return row[dataField] <= value;
241
+ });
242
+ break;
243
+ case "between":
244
+ processedData = processedData.filter((row) => {
245
+ if ((column === null || column === void 0 ? void 0 : column.dataType) === "date") {
246
+ return moment(row[dataField]).isBetween(moment(value === null || value === void 0 ? void 0 : value[0]), moment(value === null || value === void 0 ? void 0 : value[1]), "day", "[]");
247
+ }
248
+ else if ((column === null || column === void 0 ? void 0 : column.dataType) === "datetime") {
249
+ return moment(row[dataField]).isBetween(moment(value === null || value === void 0 ? void 0 : value[0]), moment(value === null || value === void 0 ? void 0 : value[1]), undefined, "[]");
250
+ }
251
+ return (row[dataField] >= value[0] &&
252
+ row[dataField] <= value[1]);
253
+ });
254
+ break;
255
+ case "notBetween":
256
+ processedData = processedData.filter((row) => {
257
+ if ((column === null || column === void 0 ? void 0 : column.dataType) === "date") {
258
+ return !moment(row[dataField]).isBetween(moment(value === null || value === void 0 ? void 0 : value[0]), moment(value === null || value === void 0 ? void 0 : value[1]), "day", "[]");
259
+ }
260
+ else if ((column === null || column === void 0 ? void 0 : column.dataType) === "datetime") {
261
+ return !moment(row[dataField]).isBetween(moment(value === null || value === void 0 ? void 0 : value[0]), moment(value === null || value === void 0 ? void 0 : value[1]), undefined, "[]");
262
+ }
263
+ return (row[dataField] < value[0] ||
264
+ row[dataField] > value[1]);
265
+ });
266
+ break;
267
+ case "contains":
268
+ processedData = processedData.filter((row) => {
269
+ return row[dataField]
270
+ .toLowerCase()
271
+ .includes(value.toLowerCase());
272
+ });
273
+ break;
274
+ case "doesNotContain":
275
+ processedData = processedData.filter((row) => {
276
+ return !row[dataField]
277
+ .toLowerCase()
278
+ .includes(value.toLowerCase());
279
+ });
280
+ break;
281
+ case "in":
282
+ if (!Array.isArray(value)) {
283
+ break;
284
+ }
285
+ else if (value.length === 0) {
286
+ break;
287
+ }
288
+ processedData = processedData.filter((row) => {
289
+ return value.find((v) => v == row[dataField]);
290
+ });
291
+ break;
292
+ case "nin":
293
+ if (!Array.isArray(value)) {
294
+ break;
295
+ }
296
+ else if (value.length === 0) {
297
+ break;
298
+ }
299
+ processedData = processedData.filter((row) => {
300
+ return !value.find((v) => v == row[dataField]);
301
+ });
302
+ break;
303
+ default:
304
+ break;
305
+ }
306
+ }
307
+ return processedData;
308
+ };
309
+ const toggleColumnVisibility = (dataField) => {
310
+ setColumnState((prevColumnState) => {
311
+ return prevColumnState.map((col) => {
312
+ if (col.dataField === dataField) {
313
+ return Object.assign(Object.assign({}, col), { visible: !col.visible });
314
+ }
315
+ return col;
316
+ });
317
+ });
318
+ };
319
+ const toggleCompact = () => {
320
+ setCompactState((prev) => !prev);
321
+ };
322
+ const getColumnVisibility = (dataField) => {
323
+ var _a;
324
+ return (((_a = columnState.find((col) => col.dataField === dataField)) === null || _a === void 0 ? void 0 : _a.visible) || true);
325
+ };
326
+ const selectRow = (row) => {
327
+ const key = !!props.keyField ? row[props.keyField] : row.__key;
328
+ const keyField = !!props.keyField ? props.keyField : "__key";
329
+ if (props.data.length === selectedRowKeys.length + 1) {
330
+ setSelectionStatus(SelectionStatus.All);
331
+ }
332
+ else {
333
+ setSelectionStatus(SelectionStatus.SomeIncluded);
334
+ }
335
+ setSelectedRowKeys((prevSelectedRowKeys) => {
336
+ return [...prevSelectedRowKeys, key];
337
+ });
338
+ setExcludedRowKeys((prev) => prev.filter((k) => k !== key));
339
+ };
340
+ const deselectRow = (row) => {
341
+ const key = !!props.keyField ? props.keyField : "__key";
342
+ if (selectionStatus === SelectionStatus.All ||
343
+ selectionStatus === SelectionStatus.SomeExcluded) {
344
+ setSelectionStatus(SelectionStatus.SomeExcluded);
345
+ setExcludedRowKeys((prev) => [...prev, row[key]]);
346
+ }
347
+ if (selectedRowKeys.length === 1) {
348
+ setSelectionStatus(SelectionStatus.None);
349
+ }
350
+ setSelectedRowKeys((prevSelectedRowKeys) => {
351
+ return prevSelectedRowKeys.filter((k) => k !== row[key]);
352
+ });
353
+ };
354
+ const selectAllRows = () => {
355
+ var _a;
356
+ const keys = ((_a = props.data) === null || _a === void 0 ? void 0 : _a.map((row) => !!props.keyField ? row[props.keyField] : row.__key)) || [];
357
+ setSelectedRowKeys(keys);
358
+ setSelectionStatus(SelectionStatus.All);
359
+ setExcludedRowKeys([]);
360
+ };
361
+ const clearSelections = () => {
362
+ setSelectedRowKeys([]);
363
+ setSelectionStatus(SelectionStatus.None);
364
+ setExcludedRowKeys([]);
365
+ };
366
+ const getSelectedRows = () => {
367
+ return props.data.filter((row) => {
368
+ const key = !!props.keyField ? row[props.keyField] : row.__key;
369
+ return selectedRowKeys.includes(key);
370
+ });
371
+ };
372
+ const getSelectedRowKeys = () => {
373
+ return selectedRowKeys;
374
+ };
375
+ const isRowSelected = (row) => {
376
+ const key = !!props.keyField ? row[props.keyField] : row.__key;
377
+ return selectedRowKeys.includes(key);
378
+ };
379
+ const getCalculatedSelectionTotal = () => {
380
+ switch (selectionStatus) {
381
+ case SelectionStatus.All:
382
+ return (props === null || props === void 0 ? void 0 : props.totalRecords) || props.data.length;
383
+ case SelectionStatus.SomeIncluded:
384
+ return selectedRowKeys.length;
385
+ case SelectionStatus.SomeExcluded:
386
+ return (props === null || props === void 0 ? void 0 : props.totalRecords)
387
+ ? props.totalRecords - excludedRowKeys.length
388
+ : props.data.length - excludedRowKeys.length;
389
+ default:
390
+ return 0;
391
+ }
392
+ };
393
+ useEffect(() => {
394
+ var _a;
395
+ (_a = props.onColumnStateChange) === null || _a === void 0 ? void 0 : _a.call(props, columnState);
396
+ if (stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.enabled) {
397
+ if ((stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.type) === "localStorage") {
398
+ StateStorage.setColumnState(stateStorage.key, columnState);
399
+ }
400
+ }
401
+ if (tableInstanceRef) {
402
+ tableInstanceRef.current = {
403
+ columnState,
404
+ setColumnState,
405
+ getColumnState,
406
+ toggleColumnVisibility,
407
+ getColumnVisibility,
408
+ getSelectedRows,
409
+ getSelectedRowKeys,
410
+ selectRow,
411
+ deselectRow,
412
+ selectAllRows,
413
+ clearSelections,
414
+ runSearch,
415
+ };
416
+ }
417
+ }, [columnState]);
418
+ useEffect(() => {
419
+ var _a;
420
+ (_a = props === null || props === void 0 ? void 0 : props.onSelectionChange) === null || _a === void 0 ? void 0 : _a.call(props, {
421
+ selectedRowKeys,
422
+ excludedRowKeys,
423
+ selectionStatus,
424
+ });
425
+ if (stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.enabled) {
426
+ if ((stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.type) === "localStorage") {
427
+ StateStorage.setSelectionState(stateStorage.key, {
428
+ selectedRowKeys,
429
+ excludedRowKeys,
430
+ selectionStatus,
431
+ });
432
+ }
433
+ }
434
+ }, [
435
+ selectedRowKeys,
436
+ selectionStatus,
437
+ excludedRowKeys,
438
+ props === null || props === void 0 ? void 0 : props.onSelectionChange,
439
+ stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.enabled,
440
+ stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.type,
441
+ stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.key,
442
+ ]);
443
+ useEffect(() => {
444
+ if (stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.enabled) {
445
+ if ((stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.type) === "localStorage") {
446
+ StateStorage.setSortState(stateStorage.key, sortState);
447
+ }
448
+ }
449
+ }, [sortState]);
450
+ useEffect(() => {
451
+ if (stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.enabled) {
452
+ if ((stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.type) === "localStorage") {
453
+ StateStorage.setSearchState(stateStorage.key, search);
454
+ }
455
+ }
456
+ }, [search]);
457
+ useEffect(() => {
458
+ if (stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.enabled) {
459
+ if ((stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.type) === "localStorage") {
460
+ StateStorage.setFilterState(stateStorage.key, filterState);
461
+ }
462
+ }
463
+ }, [filterState]);
464
+ const _data = useMemo(() => {
465
+ let processedData = props.data;
466
+ if (props.manualSorting !== true) {
467
+ processedData = sortData(sortState);
468
+ }
469
+ if (props.manualFiltering !== true && filterState) {
470
+ processedData = filterData(filterState);
471
+ }
472
+ if (props.manualSearch !== true && search) {
473
+ processedData = searchData(search);
474
+ }
475
+ return processedData;
476
+ }, [props.data, columnState, search, sortState, filterState]);
477
+ return (_jsx(TableContext.Provider, { value: Object.assign(Object.assign({ columnState,
478
+ setColumnState,
479
+ sortState, searchState: search, handleColumnReorder,
480
+ handleColumnHeaderClick, selectionState: {
481
+ selectedRowKeys,
482
+ excludedRowKeys,
483
+ selectionStatus,
484
+ }, selectRow,
485
+ deselectRow,
486
+ isRowSelected,
487
+ selectedRowKeys,
488
+ getSelectedRowKeys,
489
+ selectAllRows,
490
+ clearSelections,
491
+ toggleColumnVisibility,
492
+ runSearch,
493
+ handleFilterChange,
494
+ filterState,
495
+ compactState,
496
+ toggleCompact,
497
+ getCalculatedSelectionTotal }, props), { data: _data }), children: children }));
498
+ };
499
+ export default TableProvider;
@@ -0,0 +1,3 @@
1
+ import { TableRowProps } from "./types";
2
+ declare const TableRow: React.FC<TableRowProps>;
3
+ export default TableRow;
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Maximize2Icon } from "lucide-react";
3
+ import ColumnResizer from "./ColumnResizer";
4
+ import { InnerCellContent, TD, TR } from "./TableComponents";
5
+ import useTable from "./useTable";
6
+ import ActionCell from "./ActionCell";
7
+ import ActionButton from "./ActionButton";
8
+ import CheckBox from "../CheckBox";
9
+ const TableRow = ({ rowData, rowStyle }) => {
10
+ const { columnState, enableActionButton, onActionButtonClick, actionButtonIcon: Icon, enableSelection, selectRow, deselectRow, isRowSelected, } = useTable();
11
+ const selected = isRowSelected(rowData);
12
+ const handleSelectionChange = (e) => {
13
+ e === true ? selectRow(rowData) : deselectRow(rowData);
14
+ };
15
+ return (_jsxs(TR, { className: "mfui-tr", style: rowStyle, "data-key": rowData.__key, "data-selected": selected, children: [enableSelection && (_jsx(ActionCell, { className: `mfui-td column-select`, children: _jsx(InnerCellContent, { className: "mfui inner-cell-content row-action", children: _jsx(CheckBox, { className: `mfui-checkbox`, value: selected, onChange: (e) => handleSelectionChange(e) }) }) })), enableActionButton && (_jsx(ActionCell, { className: `mfui-td column-action`, children: _jsx(InnerCellContent, { className: "mfui inner-cell-content row-action", children: _jsx(ActionButton, { variant: "subtle", onClick: () => onActionButtonClick === null || onActionButtonClick === void 0 ? void 0 : onActionButtonClick(rowData), children: Icon ? _jsx(Icon, { size: 14 }) : _jsx(Maximize2Icon, { size: 14 }) }) }) })), columnState.map((column, index) => {
16
+ if (column.visible === false)
17
+ return null;
18
+ return (_jsxs(TD, { className: `mfui-td column-${column.columnId}`, "data-field": column.dataField, style: {
19
+ width: column.width,
20
+ minWidth: column.minWidth,
21
+ flex: column.width ? "0 0 auto" : "1",
22
+ }, children: [(column === null || column === void 0 ? void 0 : column.enableResize) === true && _jsx(ColumnResizer, { column: column }), _jsx(InnerCellContent, { className: "mfui inner-cell-content", children: column.render
23
+ ? column.render(rowData)
24
+ : rowData[column.dataField] })] }, index));
25
+ })] }));
26
+ };
27
+ export default TableRow;
@@ -0,0 +1,3 @@
1
+ export { default as resolveColumnResize } from "./resolveColumnResize";
2
+ export { default as syncColumnState } from "./syncColumnState";
3
+ export { default as resizeHandler } from "./resizeHandler";
@@ -0,0 +1,3 @@
1
+ export { default as resolveColumnResize } from "./resolveColumnResize";
2
+ export { default as syncColumnState } from "./syncColumnState";
3
+ export { default as resizeHandler } from "./resizeHandler";
@@ -0,0 +1,3 @@
1
+ import { ResizeHandlerProps } from "../types";
2
+ declare const resizeHandler: ({ event, columnId, columnProps, onResize, onResizeFinished, }: ResizeHandlerProps) => void;
3
+ export default resizeHandler;
@@ -0,0 +1,84 @@
1
+ import TableDefaults from "../TableDefaults";
2
+ const enableResizeClass = (dataField) => {
3
+ if (dataField === undefined) {
4
+ return;
5
+ }
6
+ document.querySelectorAll(`.resizer.col-${dataField}`).forEach((resizer) => {
7
+ resizer.classList.add("isResizing");
8
+ });
9
+ };
10
+ const disableResizeClass = (dataField) => {
11
+ if (dataField === undefined) {
12
+ return;
13
+ }
14
+ document.querySelectorAll(`.resizer.col-${dataField}`).forEach((resizer) => {
15
+ resizer.classList.remove("isResizing");
16
+ });
17
+ };
18
+ const resizeHandler = ({ event, columnId, columnProps, onResize, onResizeFinished, }) => {
19
+ let col = event.target
20
+ .parentElement;
21
+ let newColumns = [];
22
+ let x = 0;
23
+ let w = 0;
24
+ const mouseMoveHandler = function (e) {
25
+ const selectedColumn = document.querySelectorAll(`.column-${columnId}`);
26
+ const columnHeaders = document.querySelectorAll(`.mfui-th.column-${columnId}`);
27
+ const dx = e.clientX - x;
28
+ let newWidth = w + dx;
29
+ // Calculate what the minimum width should be
30
+ // min width should be the defined column width or the default min width
31
+ if (columnProps.minWidth === undefined) {
32
+ if (newWidth < TableDefaults.td.minWidth)
33
+ newWidth = TableDefaults.td.minWidth;
34
+ }
35
+ else {
36
+ if (newWidth < columnProps.minWidth)
37
+ newWidth = columnProps.minWidth;
38
+ }
39
+ selectedColumn.forEach((col) => {
40
+ var _a;
41
+ col.style.width = `${newWidth}px`;
42
+ col.style.flex = "0 0 auto";
43
+ // col.style.maxWidth = `${newWidth}px`;
44
+ // col.style.minWidth = `${newWidth}px`;
45
+ newColumns.push({
46
+ dataField: ((_a = col === null || col === void 0 ? void 0 : col.dataset) === null || _a === void 0 ? void 0 : _a.field) || "",
47
+ width: newWidth,
48
+ });
49
+ });
50
+ newColumns = Array.from(columnHeaders).map((col) => {
51
+ var _a;
52
+ return {
53
+ dataField: ((_a = col === null || col === void 0 ? void 0 : col.dataset) === null || _a === void 0 ? void 0 : _a.field) || "",
54
+ width: newWidth,
55
+ };
56
+ });
57
+ onResize({
58
+ columns: newColumns,
59
+ });
60
+ };
61
+ const mouseUpHandler = function () {
62
+ var _a, _b, _c;
63
+ let newWidth = ((_c = (_b = (_a = document === null || document === void 0 ? void 0 : document.querySelector) === null || _a === void 0 ? void 0 : _a.call(document, `.column-${columnId}`)) === null || _b === void 0 ? void 0 : _b.style) === null || _c === void 0 ? void 0 : _c.width) || null;
64
+ if (newWidth) {
65
+ newWidth = newWidth.replace("px", "");
66
+ }
67
+ disableResizeClass(columnId);
68
+ document.removeEventListener("mousemove", mouseMoveHandler);
69
+ document.removeEventListener("mouseup", mouseUpHandler);
70
+ onResizeFinished === null || onResizeFinished === void 0 ? void 0 : onResizeFinished({
71
+ column: columnProps,
72
+ columnId: columnId,
73
+ targetColumn: document.querySelector(`.column-${columnId}`),
74
+ newWidth,
75
+ });
76
+ };
77
+ x = event.clientX;
78
+ const styles = window.getComputedStyle(col);
79
+ w = parseInt(styles.width, 10);
80
+ document.addEventListener("mousemove", mouseMoveHandler);
81
+ document.addEventListener("mouseup", mouseUpHandler);
82
+ enableResizeClass(columnId);
83
+ };
84
+ export default resizeHandler;
@@ -0,0 +1,3 @@
1
+ import { ColumnProps } from "../types";
2
+ declare const resolveColumnReorder: (column: ColumnProps, enableColumnReorder?: boolean) => boolean;
3
+ export default resolveColumnReorder;
@@ -0,0 +1,5 @@
1
+ const resolveColumnReorder = (column, enableColumnReorder) => {
2
+ return ((enableColumnReorder === true && column.enableReorder === undefined) ||
3
+ column.enableReorder === true);
4
+ };
5
+ export default resolveColumnReorder;
@@ -0,0 +1,3 @@
1
+ import { ColumnProps } from "../types";
2
+ declare const resolveColumnResize: (column: ColumnProps, enableColumnResize?: boolean) => boolean;
3
+ export default resolveColumnResize;
@@ -0,0 +1,5 @@
1
+ const resolveColumnResize = (column, enableColumnResize) => {
2
+ return ((enableColumnResize === true && column.enableResize === undefined) ||
3
+ column.enableResize === true);
4
+ };
5
+ export default resolveColumnResize;
@@ -0,0 +1,3 @@
1
+ import { ColumnState } from "../types";
2
+ declare function syncColumnState(initialState: ColumnState[], columnState?: ColumnState[]): ColumnState[];
3
+ export default syncColumnState;