@monolith-forensics/monolith-ui 1.4.0 → 1.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Alert/Alert.d.ts +3 -0
- package/dist/Alert/Alert.js +50 -9
- package/dist/DropDownMenu/DropDownMenu.js +2 -2
- package/dist/DropDownMenu/components/MenuItemList.d.ts +2 -0
- package/dist/DropDownMenu/components/MenuItemList.js +100 -4
- package/dist/DropDownMenu/types.d.ts +3 -0
- package/dist/Modal/Modal.js +1 -0
- package/dist/QueryFilter/types.d.ts +2 -3
- package/dist/Table/StaticRows.js +1 -1
- package/dist/Table/Table.js +20 -4
- package/dist/Table/TableMenu/TableMenu.js +6 -6
- package/dist/Table/TableProvider.js +249 -244
- package/dist/Table/{VirtualIzedRows.js → VirtualizedRows.js} +1 -1
- package/dist/Table/types.d.ts +15 -3
- package/dist/TextAreaInput/TextAreaInput.d.ts +12 -21
- package/dist/TextAreaInput/TextAreaInput.js +54 -133
- package/dist/Utilities/index.d.ts +4 -0
- package/dist/Utilities/index.js +4 -0
- package/dist/Utilities/parseTimestamp.js +17 -3
- package/dist/Utilities/useControlled.d.ts +1 -0
- package/dist/Utilities/useControlled.js +12 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/package.json +1 -1
- /package/dist/Table/{VirtualIzedRows.d.ts → VirtualizedRows.d.ts} +0 -0
|
@@ -17,10 +17,28 @@ import TableDefaults from "./TableDefaults";
|
|
|
17
17
|
import shortUUID from "short-uuid";
|
|
18
18
|
import { SelectionStatus } from "./enums";
|
|
19
19
|
import moment from "moment";
|
|
20
|
+
import { useControlled } from "../Utilities";
|
|
21
|
+
const calculateSelectionTotal = (selectionState, totalRecords, dataLength = 0) => {
|
|
22
|
+
if (!selectionState) {
|
|
23
|
+
return 0;
|
|
24
|
+
}
|
|
25
|
+
switch (selectionState.selectionStatus) {
|
|
26
|
+
case SelectionStatus.All:
|
|
27
|
+
return totalRecords || dataLength;
|
|
28
|
+
case SelectionStatus.SomeIncluded:
|
|
29
|
+
return selectionState.selectedRowKeys.length;
|
|
30
|
+
case SelectionStatus.SomeExcluded:
|
|
31
|
+
return totalRecords
|
|
32
|
+
? totalRecords - selectionState.excludedRowKeys.length
|
|
33
|
+
: dataLength - selectionState.excludedRowKeys.length;
|
|
34
|
+
default:
|
|
35
|
+
return 0;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
20
38
|
export const TableContext = createContext(null);
|
|
21
39
|
const TableProvider = (_a) => {
|
|
22
|
-
var { children, columns, tableInstanceRef, stateStorage, height, maxHeight, minHeight, focusedRowId } = _a, props = __rest(_a, ["children", "columns", "tableInstanceRef", "stateStorage", "height", "maxHeight", "minHeight", "focusedRowId"]);
|
|
23
|
-
const _columns = columns
|
|
40
|
+
var { children, columns, data, keyField, tableInstanceRef, stateStorage, tableMenuOptions, manualSorting, manualFiltering, manualSearch, height, maxHeight, minHeight, focusedRowId, enableColumnResize, enableSorting, compact, totalRecords, onColumnStateChange, onColumnReorder, onColumnHeaderClick, onSort, onRowUpdated, tableElement, headerRowElm, tableDimensions, targetElm, listElm, defaultSelectionState, selectionState, onSelectionChange, defaultFilterState, filterState, onFilterChange } = _a, props = __rest(_a, ["children", "columns", "data", "keyField", "tableInstanceRef", "stateStorage", "tableMenuOptions", "manualSorting", "manualFiltering", "manualSearch", "height", "maxHeight", "minHeight", "focusedRowId", "enableColumnResize", "enableSorting", "compact", "totalRecords", "onColumnStateChange", "onColumnReorder", "onColumnHeaderClick", "onSort", "onRowUpdated", "tableElement", "headerRowElm", "tableDimensions", "targetElm", "listElm", "defaultSelectionState", "selectionState", "onSelectionChange", "defaultFilterState", "filterState", "onFilterChange"]);
|
|
41
|
+
const _columns = useMemo(() => columns
|
|
24
42
|
.map((child, index) => {
|
|
25
43
|
if (child.dataField === "__key") {
|
|
26
44
|
throw new Error("dataField cannot be __key");
|
|
@@ -34,36 +52,47 @@ const TableProvider = (_a) => {
|
|
|
34
52
|
? child.width < TableDefaults.td.minWidth
|
|
35
53
|
? child.width
|
|
36
54
|
: TableDefaults.td.minWidth
|
|
37
|
-
: TableDefaults.td.minWidth, columnId: shortUUID.generate(), enableResize: resolveColumnResize(child,
|
|
55
|
+
: TableDefaults.td.minWidth, columnId: shortUUID.generate(), enableResize: resolveColumnResize(child, enableColumnResize) });
|
|
38
56
|
})
|
|
39
|
-
.sort((a, b) => a.orderValue - b.orderValue);
|
|
57
|
+
.sort((a, b) => a.orderValue - b.orderValue), [columns, enableColumnResize]);
|
|
40
58
|
const savedTableState = useMemo(() => {
|
|
41
59
|
return (stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.enabled)
|
|
42
60
|
? StateStorage.getTableState(stateStorage.key)
|
|
43
61
|
: undefined;
|
|
44
62
|
}, [stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.key]);
|
|
45
63
|
const { columnState: savedColumnState, selectionState: savedSelectionState, sortState: savedSortState, searchState: savedSearchState, filterState: savedFilterState, } = savedTableState || {};
|
|
46
|
-
const [compactState, setCompactState] = useState(
|
|
64
|
+
const [compactState, setCompactState] = useState(compact || false);
|
|
47
65
|
const [columnState, setColumnState] = useState(syncColumnState(_columns, savedColumnState));
|
|
48
66
|
const [search, setSearch] = useState(savedSearchState || "");
|
|
49
|
-
const [
|
|
67
|
+
const [_filterState, _setFilterState] = useControlled(filterState, defaultFilterState ||
|
|
68
|
+
savedFilterState || {
|
|
69
|
+
combinator: "and",
|
|
70
|
+
rules: [],
|
|
71
|
+
});
|
|
50
72
|
const [sortState, setSortState] = useState(savedSortState);
|
|
51
|
-
const [
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
73
|
+
const [_selectionState, _setSelectionState] = useControlled(selectionState, defaultSelectionState || {
|
|
74
|
+
selectedRowKeys: (savedSelectionState === null || savedSelectionState === void 0 ? void 0 : savedSelectionState.selectedRowKeys) || [],
|
|
75
|
+
excludedRowKeys: (savedSelectionState === null || savedSelectionState === void 0 ? void 0 : savedSelectionState.excludedRowKeys) || [],
|
|
76
|
+
selectionStatus: (savedSelectionState === null || savedSelectionState === void 0 ? void 0 : savedSelectionState.selectionStatus) || SelectionStatus.None,
|
|
77
|
+
totalSelected: calculateSelectionTotal(savedSelectionState, totalRecords, data.length),
|
|
78
|
+
});
|
|
79
|
+
const selectionStatus = _selectionState.selectionStatus;
|
|
80
|
+
const excludedRowKeys = _selectionState.excludedRowKeys;
|
|
81
|
+
const selectedRowKeys = _selectionState.selectedRowKeys;
|
|
82
|
+
const setSelectionStatus = (selectionStatus) => {
|
|
83
|
+
_setSelectionState((prev) => {
|
|
84
|
+
return Object.assign(Object.assign({}, prev), { selectionStatus });
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
const setExcludedRowKeys = (excludedRowKeys) => {
|
|
88
|
+
_setSelectionState((prev) => {
|
|
89
|
+
return Object.assign(Object.assign({}, prev), { excludedRowKeys });
|
|
90
|
+
});
|
|
91
|
+
};
|
|
92
|
+
const setSelectedRowKeys = (selectedRowKeys) => {
|
|
93
|
+
_setSelectionState((prev) => {
|
|
94
|
+
return Object.assign(Object.assign({}, prev), { selectedRowKeys });
|
|
95
|
+
});
|
|
67
96
|
};
|
|
68
97
|
const getCalculatedSelectionTotal = () => {
|
|
69
98
|
return calculateSelectionTotal({
|
|
@@ -71,15 +100,14 @@ const TableProvider = (_a) => {
|
|
|
71
100
|
excludedRowKeys,
|
|
72
101
|
selectionStatus,
|
|
73
102
|
totalSelected: 0,
|
|
74
|
-
},
|
|
103
|
+
}, totalRecords, data.length);
|
|
75
104
|
};
|
|
76
105
|
const getColumnState = (dataField) => {
|
|
77
106
|
return columnState.find((col) => col.dataField === dataField);
|
|
78
107
|
};
|
|
79
108
|
const updateColumnState = (columnState) => {
|
|
80
|
-
var _a;
|
|
81
109
|
setColumnState(columnState);
|
|
82
|
-
|
|
110
|
+
onColumnStateChange === null || onColumnStateChange === void 0 ? void 0 : onColumnStateChange(columnState);
|
|
83
111
|
if (stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.enabled) {
|
|
84
112
|
if ((stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.type) === "localStorage") {
|
|
85
113
|
StateStorage.setColumnState(stateStorage.key, columnState);
|
|
@@ -87,7 +115,7 @@ const TableProvider = (_a) => {
|
|
|
87
115
|
}
|
|
88
116
|
};
|
|
89
117
|
const handleColumnReorder = (dragColumn, dropColumn) => {
|
|
90
|
-
var _a, _b
|
|
118
|
+
var _a, _b;
|
|
91
119
|
if (!dragColumn || !dropColumn)
|
|
92
120
|
return;
|
|
93
121
|
const dropColumnOrder = (_a = columnState.find((col) => col.dataField === dropColumn.dataField)) === null || _a === void 0 ? void 0 : _a.orderValue;
|
|
@@ -110,14 +138,13 @@ const TableProvider = (_a) => {
|
|
|
110
138
|
})
|
|
111
139
|
.sort((a, b) => a.orderValue - b.orderValue);
|
|
112
140
|
updateColumnState(newColumnState);
|
|
113
|
-
|
|
141
|
+
onColumnReorder === null || onColumnReorder === void 0 ? void 0 : onColumnReorder({
|
|
114
142
|
columnState: newColumnState,
|
|
115
143
|
column: dragColumn,
|
|
116
144
|
});
|
|
117
145
|
};
|
|
118
146
|
const handleColumnHeaderClick = (column) => {
|
|
119
|
-
|
|
120
|
-
if (props.enableSorting === true || column.enableSorting === true) {
|
|
147
|
+
if (enableSorting === true || column.enableSorting === true) {
|
|
121
148
|
let newSortState = {
|
|
122
149
|
dataField: column.dataField,
|
|
123
150
|
dir: "asc",
|
|
@@ -132,16 +159,17 @@ const TableProvider = (_a) => {
|
|
|
132
159
|
}
|
|
133
160
|
}
|
|
134
161
|
}
|
|
135
|
-
|
|
162
|
+
onColumnHeaderClick === null || onColumnHeaderClick === void 0 ? void 0 : onColumnHeaderClick({ column, sort: newSortState });
|
|
136
163
|
updateSortState(newSortState);
|
|
137
164
|
}
|
|
138
165
|
else {
|
|
139
|
-
|
|
166
|
+
onColumnHeaderClick === null || onColumnHeaderClick === void 0 ? void 0 : onColumnHeaderClick({ column, sort: undefined });
|
|
140
167
|
updateSortState(undefined);
|
|
141
168
|
}
|
|
142
169
|
};
|
|
143
170
|
const handleFilterChange = (query) => {
|
|
144
|
-
|
|
171
|
+
_setFilterState(query);
|
|
172
|
+
onFilterChange === null || onFilterChange === void 0 ? void 0 : onFilterChange(query);
|
|
145
173
|
if (stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.enabled) {
|
|
146
174
|
if ((stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.type) === "localStorage") {
|
|
147
175
|
StateStorage.setFilterState(stateStorage.key, query);
|
|
@@ -149,9 +177,9 @@ const TableProvider = (_a) => {
|
|
|
149
177
|
}
|
|
150
178
|
};
|
|
151
179
|
const updateSearchState = (searchState) => {
|
|
152
|
-
var _a, _b
|
|
180
|
+
var _a, _b;
|
|
153
181
|
setSearch(searchState);
|
|
154
|
-
(
|
|
182
|
+
(_b = (_a = tableMenuOptions === null || tableMenuOptions === void 0 ? void 0 : tableMenuOptions.searchOptions) === null || _a === void 0 ? void 0 : _a.onSearch) === null || _b === void 0 ? void 0 : _b.call(_a, searchState);
|
|
155
183
|
if (stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.enabled) {
|
|
156
184
|
if ((stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.type) === "localStorage") {
|
|
157
185
|
StateStorage.setSearchState(stateStorage.key, searchState);
|
|
@@ -165,10 +193,10 @@ const TableProvider = (_a) => {
|
|
|
165
193
|
updateSearchState("");
|
|
166
194
|
};
|
|
167
195
|
const updateSortState = (sortState) => {
|
|
168
|
-
var _a
|
|
196
|
+
var _a;
|
|
169
197
|
setSortState(sortState);
|
|
170
|
-
|
|
171
|
-
column: (
|
|
198
|
+
onSort === null || onSort === void 0 ? void 0 : onSort({
|
|
199
|
+
column: (_a = columnState.find((col) => col.dataField === (sortState === null || sortState === void 0 ? void 0 : sortState.dataField))) !== null && _a !== void 0 ? _a : {},
|
|
172
200
|
sort: sortState,
|
|
173
201
|
});
|
|
174
202
|
if (stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.enabled) {
|
|
@@ -179,7 +207,7 @@ const TableProvider = (_a) => {
|
|
|
179
207
|
};
|
|
180
208
|
const sortData = (sortState) => {
|
|
181
209
|
// sort data
|
|
182
|
-
return
|
|
210
|
+
return data.sort((a, b) => {
|
|
183
211
|
if (sortState) {
|
|
184
212
|
if (sortState.dir === "asc") {
|
|
185
213
|
if (a[sortState.dataField] < b[sortState.dataField]) {
|
|
@@ -212,7 +240,7 @@ const TableProvider = (_a) => {
|
|
|
212
240
|
};
|
|
213
241
|
const searchData = (searchText) => {
|
|
214
242
|
const columnKeys = columnState.map((col) => col.dataField);
|
|
215
|
-
return
|
|
243
|
+
return data.filter((row) => {
|
|
216
244
|
return columnKeys.some((key) => {
|
|
217
245
|
if (typeof row[key] === "string") {
|
|
218
246
|
return row[key].toLowerCase().includes(searchText.toLowerCase());
|
|
@@ -221,157 +249,114 @@ const TableProvider = (_a) => {
|
|
|
221
249
|
});
|
|
222
250
|
});
|
|
223
251
|
};
|
|
252
|
+
const rowMatchesRule = (row, rule) => {
|
|
253
|
+
var _a, _b, _c, _d;
|
|
254
|
+
const column = columnState.find((col) => col.dataField === rule.dataField);
|
|
255
|
+
const { value, operator, dataField } = rule;
|
|
256
|
+
if (operator.value === "isEmpty") {
|
|
257
|
+
return !row[dataField];
|
|
258
|
+
}
|
|
259
|
+
if (operator.value === "isNotEmpty") {
|
|
260
|
+
return !!row[dataField];
|
|
261
|
+
}
|
|
262
|
+
if (!value || value.length === 0) {
|
|
263
|
+
return true;
|
|
264
|
+
}
|
|
265
|
+
switch (operator.value) {
|
|
266
|
+
case "=":
|
|
267
|
+
if ((column === null || column === void 0 ? void 0 : column.dataType) === "date") {
|
|
268
|
+
return moment(row[dataField]).isSame(moment(value[0]), "day");
|
|
269
|
+
}
|
|
270
|
+
else if ((column === null || column === void 0 ? void 0 : column.dataType) === "datetime") {
|
|
271
|
+
return moment(row[dataField]).isSame(moment(value[0]));
|
|
272
|
+
}
|
|
273
|
+
return row[dataField] == value[0];
|
|
274
|
+
case "!=":
|
|
275
|
+
if ((column === null || column === void 0 ? void 0 : column.dataType) === "date") {
|
|
276
|
+
return !moment(row[dataField]).isSame(moment(value[0]), "day");
|
|
277
|
+
}
|
|
278
|
+
else if ((column === null || column === void 0 ? void 0 : column.dataType) === "datetime") {
|
|
279
|
+
return !moment(row[dataField]).isSame(moment(value[0]));
|
|
280
|
+
}
|
|
281
|
+
return row[dataField] != value[0];
|
|
282
|
+
case ">":
|
|
283
|
+
if ((column === null || column === void 0 ? void 0 : column.dataType) === "date") {
|
|
284
|
+
return moment(row[dataField]).isAfter(moment(value[0]), "day");
|
|
285
|
+
}
|
|
286
|
+
else if ((column === null || column === void 0 ? void 0 : column.dataType) === "datetime") {
|
|
287
|
+
return moment(row[dataField]).isAfter(moment(value[0]));
|
|
288
|
+
}
|
|
289
|
+
return row[dataField] > value[0];
|
|
290
|
+
case "<":
|
|
291
|
+
if ((column === null || column === void 0 ? void 0 : column.dataType) === "date") {
|
|
292
|
+
return moment(row[dataField]).isBefore(moment(value[0]), "day");
|
|
293
|
+
}
|
|
294
|
+
else if ((column === null || column === void 0 ? void 0 : column.dataType) === "datetime") {
|
|
295
|
+
return moment(row[dataField]).isBefore(moment(value[0]));
|
|
296
|
+
}
|
|
297
|
+
return row[dataField] < value[0];
|
|
298
|
+
case ">=":
|
|
299
|
+
if ((column === null || column === void 0 ? void 0 : column.dataType) === "date") {
|
|
300
|
+
return moment(row[dataField]).isSameOrAfter(moment(value[0]), "day");
|
|
301
|
+
}
|
|
302
|
+
else if ((column === null || column === void 0 ? void 0 : column.dataType) === "datetime") {
|
|
303
|
+
return moment(row[dataField]).isSameOrAfter(moment(value[0]));
|
|
304
|
+
}
|
|
305
|
+
return row[dataField] >= value[0];
|
|
306
|
+
case "<=":
|
|
307
|
+
if ((column === null || column === void 0 ? void 0 : column.dataType) === "date") {
|
|
308
|
+
return moment(row[dataField]).isSameOrBefore(moment(value[0]), "day");
|
|
309
|
+
}
|
|
310
|
+
else if ((column === null || column === void 0 ? void 0 : column.dataType) === "datetime") {
|
|
311
|
+
return moment(row[dataField]).isSameOrBefore(moment(value[0]));
|
|
312
|
+
}
|
|
313
|
+
return row[dataField] <= value[0];
|
|
314
|
+
case "between":
|
|
315
|
+
if ((column === null || column === void 0 ? void 0 : column.dataType) === "date") {
|
|
316
|
+
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", "[]");
|
|
317
|
+
}
|
|
318
|
+
else if ((column === null || column === void 0 ? void 0 : column.dataType) === "datetime") {
|
|
319
|
+
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, "[]");
|
|
320
|
+
}
|
|
321
|
+
return (row[dataField] >= value[0] &&
|
|
322
|
+
row[dataField] <= value[1]);
|
|
323
|
+
case "notBetween":
|
|
324
|
+
if ((column === null || column === void 0 ? void 0 : column.dataType) === "date") {
|
|
325
|
+
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", "[]");
|
|
326
|
+
}
|
|
327
|
+
else if ((column === null || column === void 0 ? void 0 : column.dataType) === "datetime") {
|
|
328
|
+
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, "[]");
|
|
329
|
+
}
|
|
330
|
+
return (row[dataField] < value[0] ||
|
|
331
|
+
row[dataField] > value[1]);
|
|
332
|
+
case "contains":
|
|
333
|
+
return (_a = row[dataField]) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes((_b = value[0]) === null || _b === void 0 ? void 0 : _b.toString().toLowerCase());
|
|
334
|
+
case "doesNotContain":
|
|
335
|
+
return !((_c = row[dataField]) === null || _c === void 0 ? void 0 : _c.toLowerCase().includes((_d = value[0]) === null || _d === void 0 ? void 0 : _d.toString().toLowerCase()));
|
|
336
|
+
case "in":
|
|
337
|
+
if (!Array.isArray(value) || value.length === 0) {
|
|
338
|
+
return true;
|
|
339
|
+
}
|
|
340
|
+
return !!value.find((v) => v == row[dataField]);
|
|
341
|
+
case "nin":
|
|
342
|
+
if (!Array.isArray(value) || value.length === 0) {
|
|
343
|
+
return true;
|
|
344
|
+
}
|
|
345
|
+
return !value.find((v) => v == row[dataField]);
|
|
346
|
+
default:
|
|
347
|
+
return true;
|
|
348
|
+
}
|
|
349
|
+
};
|
|
224
350
|
const filterData = (filter) => {
|
|
225
|
-
if (!
|
|
351
|
+
if (!data)
|
|
226
352
|
return [];
|
|
227
|
-
// create copy of data
|
|
228
|
-
let processedData = props.data.map((row) => row);
|
|
229
353
|
const { combinator, rules } = filter;
|
|
230
354
|
if (!combinator || !rules)
|
|
231
|
-
return
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
const { value, operator, dataField } = rule;
|
|
235
|
-
if (operator.value === "isEmpty" || operator.value === "isNotEmpty") {
|
|
236
|
-
processedData = processedData.filter((row) => {
|
|
237
|
-
return operator.value === "isEmpty"
|
|
238
|
-
? !row[dataField]
|
|
239
|
-
: row[dataField];
|
|
240
|
-
});
|
|
241
|
-
}
|
|
242
|
-
if (!value || value.length === 0) {
|
|
243
|
-
continue;
|
|
244
|
-
}
|
|
245
|
-
switch (operator.value) {
|
|
246
|
-
case "=":
|
|
247
|
-
processedData = processedData.filter((row) => {
|
|
248
|
-
if ((column === null || column === void 0 ? void 0 : column.dataType) === "date") {
|
|
249
|
-
return moment(row[dataField]).isSame(moment(value[0]), "day");
|
|
250
|
-
}
|
|
251
|
-
else if ((column === null || column === void 0 ? void 0 : column.dataType) === "datetime") {
|
|
252
|
-
return moment(row[dataField]).isSame(moment(value[0]));
|
|
253
|
-
}
|
|
254
|
-
return row[dataField] == value[0];
|
|
255
|
-
});
|
|
256
|
-
break;
|
|
257
|
-
case "!=":
|
|
258
|
-
processedData = processedData.filter((row) => {
|
|
259
|
-
if ((column === null || column === void 0 ? void 0 : column.dataType) === "date") {
|
|
260
|
-
return !moment(row[dataField]).isSame(moment(value[0]), "day");
|
|
261
|
-
}
|
|
262
|
-
else if ((column === null || column === void 0 ? void 0 : column.dataType) === "datetime") {
|
|
263
|
-
return !moment(row[dataField]).isSame(moment(value[0]));
|
|
264
|
-
}
|
|
265
|
-
return row[dataField] != value[0];
|
|
266
|
-
});
|
|
267
|
-
break;
|
|
268
|
-
case ">":
|
|
269
|
-
processedData = processedData.filter((row) => {
|
|
270
|
-
if ((column === null || column === void 0 ? void 0 : column.dataType) === "date") {
|
|
271
|
-
return moment(row[dataField]).isAfter(moment(value[0]), "day");
|
|
272
|
-
}
|
|
273
|
-
else if ((column === null || column === void 0 ? void 0 : column.dataType) === "datetime") {
|
|
274
|
-
return moment(row[dataField]).isAfter(moment(value[0]));
|
|
275
|
-
}
|
|
276
|
-
return row[dataField] > value[0];
|
|
277
|
-
});
|
|
278
|
-
break;
|
|
279
|
-
case "<":
|
|
280
|
-
processedData = processedData.filter((row) => {
|
|
281
|
-
if ((column === null || column === void 0 ? void 0 : column.dataType) === "date") {
|
|
282
|
-
return moment(row[dataField]).isBefore(moment(value[0]), "day");
|
|
283
|
-
}
|
|
284
|
-
else if ((column === null || column === void 0 ? void 0 : column.dataType) === "datetime") {
|
|
285
|
-
return moment(row[dataField]).isBefore(moment(value[0]));
|
|
286
|
-
}
|
|
287
|
-
return row[dataField] < value[0];
|
|
288
|
-
});
|
|
289
|
-
break;
|
|
290
|
-
case ">=":
|
|
291
|
-
processedData = processedData.filter((row) => {
|
|
292
|
-
if ((column === null || column === void 0 ? void 0 : column.dataType) === "date") {
|
|
293
|
-
return moment(row[dataField]).isSameOrAfter(moment(value[0]), "day");
|
|
294
|
-
}
|
|
295
|
-
else if ((column === null || column === void 0 ? void 0 : column.dataType) === "datetime") {
|
|
296
|
-
return moment(row[dataField]).isSameOrAfter(moment(value[0]));
|
|
297
|
-
}
|
|
298
|
-
return row[dataField] >= value[0];
|
|
299
|
-
});
|
|
300
|
-
break;
|
|
301
|
-
case "<=":
|
|
302
|
-
processedData = processedData.filter((row) => {
|
|
303
|
-
if ((column === null || column === void 0 ? void 0 : column.dataType) === "date") {
|
|
304
|
-
return moment(row[dataField]).isSameOrBefore(moment(value[0]), "day");
|
|
305
|
-
}
|
|
306
|
-
else if ((column === null || column === void 0 ? void 0 : column.dataType) === "datetime") {
|
|
307
|
-
return moment(row[dataField]).isSameOrBefore(moment(value[0]));
|
|
308
|
-
}
|
|
309
|
-
return row[dataField] <= value[0];
|
|
310
|
-
});
|
|
311
|
-
break;
|
|
312
|
-
case "between":
|
|
313
|
-
processedData = processedData.filter((row) => {
|
|
314
|
-
if ((column === null || column === void 0 ? void 0 : column.dataType) === "date") {
|
|
315
|
-
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", "[]");
|
|
316
|
-
}
|
|
317
|
-
else if ((column === null || column === void 0 ? void 0 : column.dataType) === "datetime") {
|
|
318
|
-
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, "[]");
|
|
319
|
-
}
|
|
320
|
-
return (row[dataField] >= value[0] &&
|
|
321
|
-
row[dataField] <= value[1]);
|
|
322
|
-
});
|
|
323
|
-
break;
|
|
324
|
-
case "notBetween":
|
|
325
|
-
processedData = processedData.filter((row) => {
|
|
326
|
-
if ((column === null || column === void 0 ? void 0 : column.dataType) === "date") {
|
|
327
|
-
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", "[]");
|
|
328
|
-
}
|
|
329
|
-
else if ((column === null || column === void 0 ? void 0 : column.dataType) === "datetime") {
|
|
330
|
-
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, "[]");
|
|
331
|
-
}
|
|
332
|
-
return (row[dataField] < value[0] ||
|
|
333
|
-
row[dataField] > value[1]);
|
|
334
|
-
});
|
|
335
|
-
break;
|
|
336
|
-
case "contains":
|
|
337
|
-
processedData = processedData.filter((row) => {
|
|
338
|
-
var _a, _b;
|
|
339
|
-
return (_a = row[dataField]) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes((_b = value[0]) === null || _b === void 0 ? void 0 : _b.toString().toLowerCase());
|
|
340
|
-
});
|
|
341
|
-
break;
|
|
342
|
-
case "doesNotContain":
|
|
343
|
-
processedData = processedData.filter((row) => {
|
|
344
|
-
var _a, _b;
|
|
345
|
-
return !((_a = row[dataField]) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes((_b = value[0]) === null || _b === void 0 ? void 0 : _b.toString().toLowerCase()));
|
|
346
|
-
});
|
|
347
|
-
break;
|
|
348
|
-
case "in":
|
|
349
|
-
if (!Array.isArray(value)) {
|
|
350
|
-
break;
|
|
351
|
-
}
|
|
352
|
-
else if (value.length === 0) {
|
|
353
|
-
break;
|
|
354
|
-
}
|
|
355
|
-
processedData = processedData.filter((row) => {
|
|
356
|
-
return value.find((v) => v == row[dataField]);
|
|
357
|
-
});
|
|
358
|
-
break;
|
|
359
|
-
case "nin":
|
|
360
|
-
if (!Array.isArray(value)) {
|
|
361
|
-
break;
|
|
362
|
-
}
|
|
363
|
-
else if (value.length === 0) {
|
|
364
|
-
break;
|
|
365
|
-
}
|
|
366
|
-
processedData = processedData.filter((row) => {
|
|
367
|
-
return !value.find((v) => v == row[dataField]);
|
|
368
|
-
});
|
|
369
|
-
break;
|
|
370
|
-
default:
|
|
371
|
-
break;
|
|
372
|
-
}
|
|
355
|
+
return data;
|
|
356
|
+
if (combinator === "or") {
|
|
357
|
+
return data.filter((row) => rules.some((rule) => rowMatchesRule(row, rule)));
|
|
373
358
|
}
|
|
374
|
-
return
|
|
359
|
+
return data.filter((row) => rules.every((rule) => rowMatchesRule(row, rule)));
|
|
375
360
|
};
|
|
376
361
|
const toggleColumnVisibility = (dataField) => {
|
|
377
362
|
const newColumnState = columnState.map((col) => {
|
|
@@ -386,8 +371,8 @@ const TableProvider = (_a) => {
|
|
|
386
371
|
setCompactState((prev) => !prev);
|
|
387
372
|
};
|
|
388
373
|
const getColumnVisibility = (dataField) => {
|
|
389
|
-
var _a;
|
|
390
|
-
return (((_a = columnState.find((col) => col.dataField === dataField)) === null || _a === void 0 ? void 0 : _a.visible)
|
|
374
|
+
var _a, _b;
|
|
375
|
+
return ((_b = (_a = columnState.find((col) => col.dataField === dataField)) === null || _a === void 0 ? void 0 : _a.visible) !== null && _b !== void 0 ? _b : true);
|
|
391
376
|
};
|
|
392
377
|
const saveSelectionState = (selectionState) => {
|
|
393
378
|
if (stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.enabled) {
|
|
@@ -396,38 +381,50 @@ const TableProvider = (_a) => {
|
|
|
396
381
|
}
|
|
397
382
|
}
|
|
398
383
|
};
|
|
384
|
+
const getRowKey = (row) => {
|
|
385
|
+
const key = !!keyField ? row[keyField] : row.__key;
|
|
386
|
+
return String(key);
|
|
387
|
+
};
|
|
399
388
|
const selectRow = (row) => {
|
|
400
|
-
|
|
401
|
-
const key = !!props.keyField ? row[props.keyField] : row.__key;
|
|
402
|
-
const keyField = !!props.keyField ? props.keyField : "__key";
|
|
389
|
+
const key = getRowKey(row);
|
|
403
390
|
const newSelectionState = {
|
|
404
391
|
selectedRowKeys,
|
|
405
392
|
excludedRowKeys,
|
|
406
393
|
selectionStatus,
|
|
407
394
|
totalSelected: 0,
|
|
408
395
|
};
|
|
409
|
-
if (
|
|
410
|
-
|
|
396
|
+
if (selectionStatus === SelectionStatus.All ||
|
|
397
|
+
selectionStatus === SelectionStatus.SomeExcluded) {
|
|
398
|
+
const nextExcluded = excludedRowKeys.filter((k) => k !== key);
|
|
399
|
+
newSelectionState.excludedRowKeys = nextExcluded;
|
|
400
|
+
newSelectionState.selectedRowKeys = [];
|
|
401
|
+
newSelectionState.selectionStatus =
|
|
402
|
+
nextExcluded.length === 0
|
|
403
|
+
? SelectionStatus.All
|
|
404
|
+
: SelectionStatus.SomeExcluded;
|
|
411
405
|
}
|
|
412
406
|
else {
|
|
413
|
-
|
|
407
|
+
const nextSelected = selectedRowKeys.includes(key)
|
|
408
|
+
? selectedRowKeys
|
|
409
|
+
: [...selectedRowKeys, key];
|
|
410
|
+
newSelectionState.selectedRowKeys = nextSelected;
|
|
411
|
+
newSelectionState.excludedRowKeys = excludedRowKeys.filter((k) => k !== key);
|
|
412
|
+
newSelectionState.selectionStatus =
|
|
413
|
+
nextSelected.length === 0
|
|
414
|
+
? SelectionStatus.None
|
|
415
|
+
: nextSelected.length === data.length
|
|
416
|
+
? SelectionStatus.All
|
|
417
|
+
: SelectionStatus.SomeIncluded;
|
|
414
418
|
}
|
|
415
|
-
newSelectionState.
|
|
416
|
-
...newSelectionState.selectedRowKeys,
|
|
417
|
-
key,
|
|
418
|
-
];
|
|
419
|
-
newSelectionState.excludedRowKeys =
|
|
420
|
-
newSelectionState.excludedRowKeys.filter((k) => k !== key);
|
|
421
|
-
newSelectionState.totalSelected = calculateSelectionTotal(newSelectionState, props === null || props === void 0 ? void 0 : props.totalRecords, props.data.length);
|
|
419
|
+
newSelectionState.totalSelected = calculateSelectionTotal(newSelectionState, totalRecords, data.length);
|
|
422
420
|
setSelectionStatus(newSelectionState.selectionStatus);
|
|
423
421
|
setSelectedRowKeys(newSelectionState.selectedRowKeys);
|
|
424
422
|
setExcludedRowKeys(newSelectionState.excludedRowKeys);
|
|
425
423
|
saveSelectionState(newSelectionState);
|
|
426
|
-
|
|
424
|
+
onSelectionChange === null || onSelectionChange === void 0 ? void 0 : onSelectionChange(newSelectionState);
|
|
427
425
|
};
|
|
428
426
|
const deselectRow = (row) => {
|
|
429
|
-
|
|
430
|
-
const key = !!props.keyField ? props.keyField : "__key";
|
|
427
|
+
const key = getRowKey(row);
|
|
431
428
|
const newSelectionState = {
|
|
432
429
|
selectedRowKeys,
|
|
433
430
|
excludedRowKeys,
|
|
@@ -436,27 +433,34 @@ const TableProvider = (_a) => {
|
|
|
436
433
|
};
|
|
437
434
|
if (selectionStatus === SelectionStatus.All ||
|
|
438
435
|
selectionStatus === SelectionStatus.SomeExcluded) {
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
...
|
|
442
|
-
|
|
443
|
-
];
|
|
436
|
+
const nextExcluded = excludedRowKeys.includes(key)
|
|
437
|
+
? excludedRowKeys
|
|
438
|
+
: [...excludedRowKeys, key];
|
|
439
|
+
const totalSelectableRows = totalRecords || data.length;
|
|
440
|
+
newSelectionState.selectedRowKeys = [];
|
|
441
|
+
newSelectionState.excludedRowKeys = nextExcluded;
|
|
442
|
+
newSelectionState.selectionStatus =
|
|
443
|
+
nextExcluded.length >= totalSelectableRows
|
|
444
|
+
? SelectionStatus.None
|
|
445
|
+
: SelectionStatus.SomeExcluded;
|
|
444
446
|
}
|
|
445
|
-
|
|
446
|
-
|
|
447
|
+
else {
|
|
448
|
+
const nextSelected = selectedRowKeys.filter((k) => k !== key);
|
|
449
|
+
newSelectionState.selectedRowKeys = nextSelected;
|
|
450
|
+
newSelectionState.selectionStatus =
|
|
451
|
+
nextSelected.length === 0
|
|
452
|
+
? SelectionStatus.None
|
|
453
|
+
: SelectionStatus.SomeIncluded;
|
|
447
454
|
}
|
|
448
|
-
newSelectionState.
|
|
449
|
-
newSelectionState.selectedRowKeys.filter((k) => k !== row[key]);
|
|
450
|
-
newSelectionState.totalSelected = calculateSelectionTotal(newSelectionState, props === null || props === void 0 ? void 0 : props.totalRecords, props.data.length);
|
|
455
|
+
newSelectionState.totalSelected = calculateSelectionTotal(newSelectionState, totalRecords, data.length);
|
|
451
456
|
setSelectionStatus(newSelectionState.selectionStatus);
|
|
452
457
|
setSelectedRowKeys(newSelectionState.selectedRowKeys);
|
|
453
458
|
setExcludedRowKeys(newSelectionState.excludedRowKeys);
|
|
454
459
|
saveSelectionState(newSelectionState);
|
|
455
|
-
|
|
460
|
+
onSelectionChange === null || onSelectionChange === void 0 ? void 0 : onSelectionChange(newSelectionState);
|
|
456
461
|
};
|
|
457
462
|
const selectAllRows = () => {
|
|
458
|
-
|
|
459
|
-
const keys = ((_a = props.data) === null || _a === void 0 ? void 0 : _a.map((row) => !!props.keyField ? row[props.keyField] : row.__key)) || [];
|
|
463
|
+
const keys = (data === null || data === void 0 ? void 0 : data.map((row) => getRowKey(row))) || [];
|
|
460
464
|
const newSelectionState = {
|
|
461
465
|
selectedRowKeys,
|
|
462
466
|
excludedRowKeys,
|
|
@@ -466,15 +470,14 @@ const TableProvider = (_a) => {
|
|
|
466
470
|
newSelectionState.selectedRowKeys = keys;
|
|
467
471
|
newSelectionState.excludedRowKeys = [];
|
|
468
472
|
newSelectionState.selectionStatus = SelectionStatus.All;
|
|
469
|
-
newSelectionState.totalSelected = calculateSelectionTotal(newSelectionState,
|
|
473
|
+
newSelectionState.totalSelected = calculateSelectionTotal(newSelectionState, totalRecords, data.length);
|
|
470
474
|
setSelectionStatus(newSelectionState.selectionStatus);
|
|
471
475
|
setSelectedRowKeys(newSelectionState.selectedRowKeys);
|
|
472
476
|
setExcludedRowKeys(newSelectionState.excludedRowKeys);
|
|
473
477
|
saveSelectionState(newSelectionState);
|
|
474
|
-
|
|
478
|
+
onSelectionChange === null || onSelectionChange === void 0 ? void 0 : onSelectionChange(newSelectionState);
|
|
475
479
|
};
|
|
476
480
|
const clearSelections = () => {
|
|
477
|
-
var _a;
|
|
478
481
|
const newSelectionState = {
|
|
479
482
|
selectedRowKeys,
|
|
480
483
|
excludedRowKeys,
|
|
@@ -484,16 +487,16 @@ const TableProvider = (_a) => {
|
|
|
484
487
|
newSelectionState.selectedRowKeys = [];
|
|
485
488
|
newSelectionState.excludedRowKeys = [];
|
|
486
489
|
newSelectionState.selectionStatus = SelectionStatus.None;
|
|
487
|
-
newSelectionState.totalSelected = calculateSelectionTotal(newSelectionState,
|
|
490
|
+
newSelectionState.totalSelected = calculateSelectionTotal(newSelectionState, totalRecords, data.length);
|
|
488
491
|
setSelectionStatus(newSelectionState.selectionStatus);
|
|
489
492
|
setSelectedRowKeys(newSelectionState.selectedRowKeys);
|
|
490
493
|
setExcludedRowKeys(newSelectionState.excludedRowKeys);
|
|
491
|
-
|
|
494
|
+
onSelectionChange === null || onSelectionChange === void 0 ? void 0 : onSelectionChange(newSelectionState);
|
|
492
495
|
saveSelectionState(newSelectionState);
|
|
493
496
|
};
|
|
494
497
|
const getSelectedRows = () => {
|
|
495
|
-
return
|
|
496
|
-
const key =
|
|
498
|
+
return data.filter((row) => {
|
|
499
|
+
const key = getRowKey(row);
|
|
497
500
|
return selectedRowKeys.includes(key);
|
|
498
501
|
});
|
|
499
502
|
};
|
|
@@ -501,7 +504,7 @@ const TableProvider = (_a) => {
|
|
|
501
504
|
return selectedRowKeys;
|
|
502
505
|
};
|
|
503
506
|
const isRowSelected = (row) => {
|
|
504
|
-
const key =
|
|
507
|
+
const key = getRowKey(row);
|
|
505
508
|
switch (selectionStatus) {
|
|
506
509
|
case SelectionStatus.All:
|
|
507
510
|
return true;
|
|
@@ -516,7 +519,7 @@ const TableProvider = (_a) => {
|
|
|
516
519
|
}
|
|
517
520
|
};
|
|
518
521
|
const isRowFocused = (row) => {
|
|
519
|
-
const key =
|
|
522
|
+
const key = getRowKey(row);
|
|
520
523
|
return focusedRowId === key;
|
|
521
524
|
};
|
|
522
525
|
if (tableInstanceRef) {
|
|
@@ -546,33 +549,30 @@ const TableProvider = (_a) => {
|
|
|
546
549
|
},
|
|
547
550
|
sortState,
|
|
548
551
|
searchState: search,
|
|
549
|
-
|
|
552
|
+
_filterState,
|
|
550
553
|
};
|
|
551
554
|
},
|
|
552
555
|
};
|
|
553
556
|
}
|
|
554
557
|
const _data = useMemo(() => {
|
|
555
|
-
let processedData =
|
|
556
|
-
if (
|
|
558
|
+
let processedData = data; // create a new array to avoid mutating the original data
|
|
559
|
+
if (manualSorting !== true) {
|
|
557
560
|
processedData = sortData(sortState);
|
|
558
561
|
}
|
|
559
|
-
if (
|
|
560
|
-
processedData = filterData(
|
|
562
|
+
if (manualFiltering !== true && _filterState) {
|
|
563
|
+
processedData = filterData(_filterState);
|
|
561
564
|
}
|
|
562
|
-
if (
|
|
565
|
+
if (manualSearch !== true && search) {
|
|
563
566
|
processedData = searchData(search);
|
|
564
567
|
}
|
|
565
568
|
return processedData;
|
|
566
|
-
}, [
|
|
567
|
-
return (_jsx(TableContext.Provider, { value: Object.assign(
|
|
569
|
+
}, [data, columnState, search, sortState, _filterState]);
|
|
570
|
+
return (_jsx(TableContext.Provider, { value: Object.assign({ columnState,
|
|
568
571
|
setColumnState,
|
|
569
|
-
sortState, searchState: search,
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
selectionStatus,
|
|
574
|
-
totalSelected: getCalculatedSelectionTotal(),
|
|
575
|
-
}, selectRow,
|
|
572
|
+
sortState, searchState: search, totalRecords,
|
|
573
|
+
keyField,
|
|
574
|
+
handleColumnReorder,
|
|
575
|
+
handleColumnHeaderClick, selectionState: _selectionState, selectRow,
|
|
576
576
|
deselectRow,
|
|
577
577
|
isRowSelected,
|
|
578
578
|
isRowFocused,
|
|
@@ -583,10 +583,15 @@ const TableProvider = (_a) => {
|
|
|
583
583
|
toggleColumnVisibility,
|
|
584
584
|
runSearch,
|
|
585
585
|
clearSearch,
|
|
586
|
-
handleFilterChange,
|
|
587
|
-
filterState,
|
|
588
|
-
compactState,
|
|
586
|
+
handleFilterChange, filterState: _filterState, compactState,
|
|
589
587
|
toggleCompact,
|
|
590
|
-
getCalculatedSelectionTotal,
|
|
588
|
+
getCalculatedSelectionTotal,
|
|
589
|
+
focusedRowId,
|
|
590
|
+
manualSorting,
|
|
591
|
+
manualSearch,
|
|
592
|
+
stateStorage, tableHeight: height, tableMaxHeight: maxHeight, tableMinHeight: minHeight, compact, tableElement: tableElement, headerRowElm: headerRowElm, tableDimensions: tableDimensions, targetElm: targetElm, listElm: listElm, enableColumnResize,
|
|
593
|
+
onSelectionChange,
|
|
594
|
+
onColumnStateChange,
|
|
595
|
+
onColumnReorder, onRowUpdated: onRowUpdated || (() => { }), tableMenuOptions, data: _data }, props), children: children }));
|
|
591
596
|
};
|
|
592
597
|
export default TableProvider;
|