@monolith-forensics/monolith-ui 1.1.90 → 1.1.91

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 (51) hide show
  1. package/dist/MonolithUIProvider/GlobalStyle.d.ts +1 -0
  2. package/dist/MonolithUIProvider/GlobalStyle.js +17 -0
  3. package/dist/NewTable/ActionButton.d.ts +4 -0
  4. package/dist/NewTable/ActionButton.js +11 -0
  5. package/dist/NewTable/ActionCell.d.ts +4 -0
  6. package/dist/NewTable/ActionCell.js +12 -0
  7. package/dist/NewTable/Column.d.ts +3 -0
  8. package/dist/NewTable/Column.js +5 -0
  9. package/dist/NewTable/ColumnResizer.d.ts +14 -0
  10. package/dist/NewTable/ColumnResizer.js +45 -0
  11. package/dist/NewTable/SelectionCell.d.ts +4 -0
  12. package/dist/NewTable/SelectionCell.js +12 -0
  13. package/dist/NewTable/StateStorage.d.ts +18 -0
  14. package/dist/NewTable/StateStorage.js +72 -0
  15. package/dist/NewTable/StaticRows.d.ts +5 -0
  16. package/dist/NewTable/StaticRows.js +10 -0
  17. package/dist/NewTable/Table.d.ts +3 -0
  18. package/dist/NewTable/Table.js +83 -0
  19. package/dist/NewTable/TableComponents.d.ts +16 -0
  20. package/dist/NewTable/TableComponents.js +139 -0
  21. package/dist/NewTable/TableDefaults.d.ts +20 -0
  22. package/dist/NewTable/TableDefaults.js +20 -0
  23. package/dist/NewTable/TableHeader.d.ts +3 -0
  24. package/dist/NewTable/TableHeader.js +92 -0
  25. package/dist/NewTable/TableProvider.d.ts +4 -0
  26. package/dist/NewTable/TableProvider.js +330 -0
  27. package/dist/NewTable/TableRow.d.ts +3 -0
  28. package/dist/NewTable/TableRow.js +27 -0
  29. package/dist/NewTable/Utils/index.d.ts +3 -0
  30. package/dist/NewTable/Utils/index.js +3 -0
  31. package/dist/NewTable/Utils/resizeHandler.d.ts +3 -0
  32. package/dist/NewTable/Utils/resizeHandler.js +84 -0
  33. package/dist/NewTable/Utils/resolveColumnReorder.d.ts +3 -0
  34. package/dist/NewTable/Utils/resolveColumnReorder.js +5 -0
  35. package/dist/NewTable/Utils/resolveColumnResize.d.ts +3 -0
  36. package/dist/NewTable/Utils/resolveColumnResize.js +5 -0
  37. package/dist/NewTable/Utils/syncColumnState.d.ts +3 -0
  38. package/dist/NewTable/Utils/syncColumnState.js +26 -0
  39. package/dist/NewTable/VirtualIzedRows.d.ts +12 -0
  40. package/dist/NewTable/VirtualIzedRows.js +26 -0
  41. package/dist/NewTable/enums.d.ts +6 -0
  42. package/dist/NewTable/enums.js +7 -0
  43. package/dist/NewTable/index.d.ts +4 -0
  44. package/dist/NewTable/index.js +4 -0
  45. package/dist/NewTable/types.d.ts +191 -0
  46. package/dist/NewTable/types.js +1 -0
  47. package/dist/NewTable/useTable.d.ts +3 -0
  48. package/dist/NewTable/useTable.js +10 -0
  49. package/dist/index.d.ts +2 -0
  50. package/dist/index.js +1 -0
  51. package/package.json +2 -1
@@ -0,0 +1,92 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import ColumnResizer from "./ColumnResizer";
4
+ import { InnerCellContent, TH, THead, THR } from "./TableComponents";
5
+ import { resolveColumnResize } from "./Utils";
6
+ import useTable from "./useTable";
7
+ import CheckBox from "../CheckBox";
8
+ import { ArrowDownIcon, ArrowUpIcon } from "lucide-react";
9
+ import resolveColumnReorder from "./Utils/resolveColumnReorder";
10
+ const TableHeader = ({ headerRowElm }) => {
11
+ var _a;
12
+ const { columnState, sortState, setColumnState, onColumnResize, handleColumnReorder, enableColumnReorder, handleColumnHeaderClick, enableColumnResize, headerRowHeight, enableActionButton, enableSelection, selectionState, disableSelectAll, selectAllRows, clearSelections, } = useTable();
13
+ const [dragColumn, setDragColumn] = useState(null);
14
+ const [dropColumn, setDropColumn] = useState(null);
15
+ const handleResize = (e) => {
16
+ const columnId = e.column.columnId;
17
+ setColumnState((prevColumnState) => {
18
+ const newState = prevColumnState.map((col) => {
19
+ if (col.columnId === columnId) {
20
+ return Object.assign(Object.assign({}, col), { width: Number(e.newWidth) });
21
+ }
22
+ return col;
23
+ });
24
+ onColumnResize === null || onColumnResize === void 0 ? void 0 : onColumnResize({
25
+ column: Object.assign(Object.assign({}, e.column), { width: Number(e.newWidth) }),
26
+ columnState: newState,
27
+ });
28
+ return newState;
29
+ });
30
+ };
31
+ const handleChangeSelection = (e) => {
32
+ e ? selectAllRows() : clearSelections();
33
+ };
34
+ return (_jsx(THead, { className: "mfui-thead", children: _jsxs(THR, { ref: headerRowElm, height: headerRowHeight, children: [enableSelection && (_jsx(TH, { className: `mfui-th column-action`, style: {
35
+ width: "40px",
36
+ minWidth: "40px",
37
+ maxWidth: "40px",
38
+ display: "flex",
39
+ justifyContent: "center",
40
+ alignItems: "center",
41
+ }, children: _jsx(InnerCellContent, { className: "mfui inner-cell-content", children: disableSelectAll !== true && (_jsx(CheckBox, { value: selectionState.selectionStatus === "all", partialCheck: (_a = selectionState.selectionStatus) === null || _a === void 0 ? void 0 : _a.includes("some"), onChange: handleChangeSelection })) }) })), enableActionButton && (_jsx(TH, { className: `mfui-th column-action`, style: {
42
+ width: "40px",
43
+ minWidth: "40px",
44
+ maxWidth: "40px",
45
+ }, children: _jsx(InnerCellContent, { className: "mfui inner-cell-content" }) })), columnState.map((column) => {
46
+ if (column.visible === false)
47
+ return null;
48
+ const canReorder = resolveColumnReorder(column, enableColumnReorder);
49
+ const canResize = resolveColumnResize(column, enableColumnResize);
50
+ const dndEvents = canReorder
51
+ ? {
52
+ onDragOver: (e) => {
53
+ e.preventDefault();
54
+ e.dataTransfer.dropEffect = "move";
55
+ },
56
+ onDragEnter: (e) => {
57
+ e.target.classList.add("dragover");
58
+ setDropColumn(column);
59
+ },
60
+ onDragLeave: (e) => {
61
+ e.target.classList.remove("dragover");
62
+ },
63
+ onDrop: (e) => {
64
+ e.preventDefault();
65
+ e.target.classList.remove("dragover");
66
+ if (dragColumn && dropColumn) {
67
+ handleColumnReorder(dragColumn, dropColumn);
68
+ }
69
+ },
70
+ onDragStart: (e) => {
71
+ //set dragging class
72
+ setDragColumn(column);
73
+ e.target.classList.add("dragging");
74
+ },
75
+ onDragEnd: (e) => {
76
+ e.target.classList.remove("dragging");
77
+ },
78
+ }
79
+ : {};
80
+ return (_jsxs(TH, Object.assign({ className: `mfui-th column-${column.columnId}`, "data-field": column.dataField, draggable: canReorder, onClick: () => handleColumnHeaderClick(column) }, dndEvents, { style: {
81
+ width: column.width,
82
+ minWidth: column.minWidth,
83
+ flex: column.width ? "0 0 auto" : "1",
84
+ }, children: [canResize && (_jsx(ColumnResizer, { column: column, showOnHover: true, onResize: (e) => {
85
+ // console.log("onResize", e);
86
+ }, onResizeFinished: (e) => {
87
+ handleResize(e);
88
+ } })), _jsxs(InnerCellContent, { className: "mfui inner-cell-content", children: [column.caption, (sortState === null || sortState === void 0 ? void 0 : sortState.dataField) === column.dataField &&
89
+ (sortState.dir === "asc" ? (_jsx(ArrowUpIcon, { size: 14 })) : (_jsx(ArrowDownIcon, { size: 14 })))] })] }), column.columnId));
90
+ })] }) }));
91
+ };
92
+ export default TableHeader;
@@ -0,0 +1,4 @@
1
+ import { TableContextType, TableProviderProps } from "./types";
2
+ export declare const TableContext: import("react").Context<TableContextType>;
3
+ declare const TableProvider: React.FC<TableProviderProps>;
4
+ export default TableProvider;
@@ -0,0 +1,330 @@
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
+ const defaultSelectionState = {
20
+ selectedRowKeys: [],
21
+ excludedRowKeys: [],
22
+ selectionStatus: SelectionStatus.None,
23
+ };
24
+ export const TableContext = createContext({
25
+ columnState: [],
26
+ data: [],
27
+ setColumnState: () => { },
28
+ onColumnResize: () => { },
29
+ onColumnStateChange: () => { },
30
+ handleColumnReorder: () => { },
31
+ handleColumnHeaderClick: () => { },
32
+ onSelectionChange: () => { },
33
+ selectedRowKeys: [],
34
+ selectionState: defaultSelectionState,
35
+ isRowSelected: () => false,
36
+ selectRow: () => { },
37
+ deselectRow: () => { },
38
+ getSelectedRowKeys: () => [],
39
+ selectAllRows: () => { },
40
+ clearSelections: () => { },
41
+ });
42
+ const TableProvider = (_a) => {
43
+ var { children, columns, tableInstanceRef, stateStorage } = _a, props = __rest(_a, ["children", "columns", "tableInstanceRef", "stateStorage"]);
44
+ const _columns = columns
45
+ .map((child, index) => {
46
+ if (child.dataField === "__key") {
47
+ throw new Error("dataField cannot be __key");
48
+ }
49
+ // check for duplicate dataFields
50
+ const dataFieldCount = columns.filter((col) => col.dataField === child.dataField).length;
51
+ if (dataFieldCount > 1) {
52
+ throw new Error(`Duplicate dataField found: ${child.dataField}. dataField must be unique.`);
53
+ }
54
+ 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)
55
+ ? child.width < TableDefaults.td.minWidth
56
+ ? child.width
57
+ : TableDefaults.td.minWidth
58
+ : TableDefaults.td.minWidth, columnId: shortUUID.generate(), enableResize: resolveColumnResize(child, props.enableColumnResize) });
59
+ })
60
+ .sort((a, b) => a.orderValue - b.orderValue);
61
+ const savedTableState = useMemo(() => {
62
+ return (stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.enabled)
63
+ ? StateStorage.getTableState(stateStorage.key)
64
+ : undefined;
65
+ }, []);
66
+ const { columnState: savedColumnState, selectionState: savedSelectionState, sortState: savedSortState, } = savedTableState || {};
67
+ const [columnState, setColumnState] = useState(syncColumnState(_columns, savedColumnState));
68
+ const [search, setSearch] = useState();
69
+ const [sortState, setSortState] = useState(savedSortState);
70
+ const [selectionStatus, setSelectionStatus] = useState((savedSelectionState === null || savedSelectionState === void 0 ? void 0 : savedSelectionState.selectionStatus) || SelectionStatus.None);
71
+ const [excludedRowKeys, setExcludedRowKeys] = useState((savedSelectionState === null || savedSelectionState === void 0 ? void 0 : savedSelectionState.excludedRowKeys) || []);
72
+ const [selectedRowKeys, setSelectedRowKeys] = useState((savedSelectionState === null || savedSelectionState === void 0 ? void 0 : savedSelectionState.selectedRowKeys) || []);
73
+ const getColumnState = (dataField) => {
74
+ return columnState.find((col) => col.dataField === dataField);
75
+ };
76
+ const handleColumnReorder = (dragColumn, dropColumn) => {
77
+ var _a, _b, _c;
78
+ if (!dragColumn || !dropColumn)
79
+ return;
80
+ const dropColumnOrder = (_a = columnState.find((col) => col.dataField === dropColumn.dataField)) === null || _a === void 0 ? void 0 : _a.orderValue;
81
+ const dragColumnOrder = (_b = columnState.find((col) => col.dataField === dragColumn.dataField)) === null || _b === void 0 ? void 0 : _b.orderValue;
82
+ if (dropColumnOrder === undefined || dragColumnOrder === undefined)
83
+ return;
84
+ const moveDirection = dragColumnOrder < dropColumnOrder ? "right" : "left";
85
+ const newColumnState = columnState
86
+ .map((col) => {
87
+ if (col.dataField === dragColumn.dataField) {
88
+ col.orderValue =
89
+ dropColumnOrder + (moveDirection === "right" ? 1 : -1);
90
+ }
91
+ else {
92
+ if (col.orderValue > dropColumnOrder) {
93
+ col.orderValue = col.orderValue + 1;
94
+ }
95
+ }
96
+ return col;
97
+ })
98
+ .sort((a, b) => a.orderValue - b.orderValue);
99
+ setColumnState(newColumnState);
100
+ (_c = props.onColumnReorder) === null || _c === void 0 ? void 0 : _c.call(props, {
101
+ columnState: newColumnState,
102
+ column: dragColumn,
103
+ });
104
+ };
105
+ const handleColumnHeaderClick = (column) => {
106
+ var _a;
107
+ if (props.enableSorting === true || column.enableSorting === true) {
108
+ setSortState((prevSortState) => {
109
+ var _a;
110
+ let newSortState = {
111
+ dataField: column.dataField,
112
+ dir: "asc",
113
+ };
114
+ if ((prevSortState === null || prevSortState === void 0 ? void 0 : prevSortState.dataField) === column.dataField) {
115
+ if (prevSortState.dir === "desc") {
116
+ newSortState = null;
117
+ }
118
+ else {
119
+ if (newSortState) {
120
+ newSortState.dir = prevSortState.dir === "asc" ? "desc" : "asc";
121
+ }
122
+ }
123
+ }
124
+ (_a = props.onColumnHeaderClick) === null || _a === void 0 ? void 0 : _a.call(props, { column, sort: newSortState });
125
+ return newSortState;
126
+ });
127
+ }
128
+ else {
129
+ (_a = props.onColumnHeaderClick) === null || _a === void 0 ? void 0 : _a.call(props, { column, sort: null });
130
+ }
131
+ };
132
+ const runSearch = (searchText) => {
133
+ setSearch(searchText);
134
+ };
135
+ const sortData = (sortState) => {
136
+ // sort data
137
+ return props.data.sort((a, b) => {
138
+ if (sortState) {
139
+ if (sortState.dir === "asc") {
140
+ if (a[sortState.dataField] < b[sortState.dataField]) {
141
+ return -1;
142
+ }
143
+ if (a[sortState.dataField] > b[sortState.dataField]) {
144
+ return 1;
145
+ }
146
+ return 0;
147
+ }
148
+ else if (sortState.dir === "desc") {
149
+ if (a[sortState.dataField] > b[sortState.dataField]) {
150
+ return -1;
151
+ }
152
+ if (a[sortState.dataField] < b[sortState.dataField]) {
153
+ return 1;
154
+ }
155
+ return 0;
156
+ }
157
+ }
158
+ // sort by __index
159
+ if (a.__index < b.__index) {
160
+ return -1;
161
+ }
162
+ if (a.__index > b.__index) {
163
+ return 1;
164
+ }
165
+ return 0;
166
+ });
167
+ };
168
+ const searchData = (searchText) => {
169
+ return props.data.filter((row) => {
170
+ return Object.keys(row)
171
+ .filter((key) => key !== "__key" && key !== "__index")
172
+ .some((key) => {
173
+ if (typeof row[key] === "string") {
174
+ return row[key].toLowerCase().includes(searchText.toLowerCase());
175
+ }
176
+ return false;
177
+ });
178
+ });
179
+ };
180
+ const toggleColumnVisibility = (dataField) => {
181
+ setColumnState((prevColumnState) => {
182
+ return prevColumnState.map((col) => {
183
+ if (col.dataField === dataField) {
184
+ return Object.assign(Object.assign({}, col), { visible: !col.visible });
185
+ }
186
+ return col;
187
+ });
188
+ });
189
+ };
190
+ const getColumnVisibility = (dataField) => {
191
+ var _a;
192
+ return (((_a = columnState.find((col) => col.dataField === dataField)) === null || _a === void 0 ? void 0 : _a.visible) || true);
193
+ };
194
+ const selectRow = (row) => {
195
+ const key = !!props.keyField ? row[props.keyField] : row.__key;
196
+ const keyField = !!props.keyField ? props.keyField : "__key";
197
+ if (props.data.length === selectedRowKeys.length + 1) {
198
+ setSelectionStatus(SelectionStatus.All);
199
+ }
200
+ else {
201
+ setSelectionStatus(SelectionStatus.SomeIncluded);
202
+ }
203
+ setSelectedRowKeys((prevSelectedRowKeys) => {
204
+ return [...prevSelectedRowKeys, key];
205
+ });
206
+ setExcludedRowKeys((prev) => prev.filter((k) => k !== key));
207
+ };
208
+ const deselectRow = (row) => {
209
+ const key = !!props.keyField ? props.keyField : "__key";
210
+ if (selectionStatus === SelectionStatus.All ||
211
+ selectionStatus === SelectionStatus.SomeExcluded) {
212
+ setSelectionStatus(SelectionStatus.SomeExcluded);
213
+ setExcludedRowKeys((prev) => [...prev, row[key]]);
214
+ }
215
+ if (selectedRowKeys.length === 1) {
216
+ setSelectionStatus(SelectionStatus.None);
217
+ }
218
+ setSelectedRowKeys((prevSelectedRowKeys) => {
219
+ return prevSelectedRowKeys.filter((k) => k !== row[key]);
220
+ });
221
+ };
222
+ const selectAllRows = () => {
223
+ var _a;
224
+ const keys = ((_a = props.data) === null || _a === void 0 ? void 0 : _a.map((row) => !!props.keyField ? row[props.keyField] : row.__key)) || [];
225
+ setSelectedRowKeys(keys);
226
+ setSelectionStatus(SelectionStatus.All);
227
+ setExcludedRowKeys([]);
228
+ };
229
+ const clearSelections = () => {
230
+ setSelectedRowKeys([]);
231
+ setSelectionStatus(SelectionStatus.None);
232
+ setExcludedRowKeys([]);
233
+ };
234
+ const getSelectedRows = () => {
235
+ return props.data.filter((row) => {
236
+ const key = !!props.keyField ? row[props.keyField] : row.__key;
237
+ return selectedRowKeys.includes(key);
238
+ });
239
+ };
240
+ const getSelectedRowKeys = () => {
241
+ return selectedRowKeys;
242
+ };
243
+ const isRowSelected = (row) => {
244
+ const key = !!props.keyField ? row[props.keyField] : row.__key;
245
+ return selectedRowKeys.includes(key);
246
+ };
247
+ useEffect(() => {
248
+ var _a;
249
+ (_a = props.onColumnStateChange) === null || _a === void 0 ? void 0 : _a.call(props, columnState);
250
+ if (stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.enabled) {
251
+ if ((stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.type) === "localStorage") {
252
+ StateStorage.setColumnState(stateStorage.key, columnState);
253
+ }
254
+ }
255
+ if (tableInstanceRef) {
256
+ tableInstanceRef.current = {
257
+ columnState,
258
+ setColumnState,
259
+ getColumnState,
260
+ toggleColumnVisibility,
261
+ getColumnVisibility,
262
+ getSelectedRows,
263
+ getSelectedRowKeys,
264
+ selectRow,
265
+ deselectRow,
266
+ selectAllRows,
267
+ clearSelections,
268
+ runSearch,
269
+ };
270
+ }
271
+ }, [columnState]);
272
+ useEffect(() => {
273
+ var _a;
274
+ (_a = props === null || props === void 0 ? void 0 : props.onSelectionChange) === null || _a === void 0 ? void 0 : _a.call(props, {
275
+ selectedRowKeys,
276
+ excludedRowKeys,
277
+ selectionStatus,
278
+ });
279
+ if (stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.enabled) {
280
+ if ((stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.type) === "localStorage") {
281
+ StateStorage.setSelectionState(stateStorage.key, {
282
+ selectedRowKeys,
283
+ excludedRowKeys,
284
+ selectionStatus,
285
+ });
286
+ }
287
+ }
288
+ }, [
289
+ selectedRowKeys,
290
+ selectionStatus,
291
+ excludedRowKeys,
292
+ props === null || props === void 0 ? void 0 : props.onSelectionChange,
293
+ stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.enabled,
294
+ stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.type,
295
+ stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.key,
296
+ ]);
297
+ useEffect(() => {
298
+ if (stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.enabled) {
299
+ if ((stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.type) === "localStorage") {
300
+ StateStorage.setSortState(stateStorage.key, sortState);
301
+ }
302
+ }
303
+ }, [sortState]);
304
+ const _data = useMemo(() => {
305
+ let processedData = props.data;
306
+ if (props.manualSorting !== true) {
307
+ processedData = sortData(sortState);
308
+ }
309
+ if (search) {
310
+ processedData = searchData(search);
311
+ }
312
+ return processedData;
313
+ }, [props.data, columnState, search, sortState]);
314
+ return (_jsx(TableContext.Provider, { value: Object.assign(Object.assign({ columnState,
315
+ setColumnState,
316
+ sortState,
317
+ handleColumnReorder,
318
+ handleColumnHeaderClick, selectionState: {
319
+ selectedRowKeys,
320
+ excludedRowKeys,
321
+ selectionStatus,
322
+ }, selectRow,
323
+ deselectRow,
324
+ isRowSelected,
325
+ selectedRowKeys,
326
+ getSelectedRowKeys,
327
+ selectAllRows,
328
+ clearSelections }, props), { data: _data }), children: children }));
329
+ };
330
+ 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, children: [enableSelection && (_jsx(ActionCell, { className: `mfui-td column-select`, children: _jsx(InnerCellContent, { className: "mfui inner-cell-content", children: _jsx(CheckBox, { value: selected, onChange: (e) => handleSelectionChange(e) }) }) })), enableActionButton && (_jsx(ActionCell, { className: `mfui-td column-action`, children: _jsx(InnerCellContent, { className: "mfui inner-cell-content", 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;
@@ -0,0 +1,26 @@
1
+ // Synchronizes columnDefs and stored column state
2
+ // Ensures if ColumnDefs are updated, the column state is updated as well
3
+ function syncColumnState(initialState, columnState) {
4
+ if (!columnState) {
5
+ return initialState;
6
+ }
7
+ const newColumnState = [...initialState];
8
+ // remove columns that are no longer in columnDefs
9
+ columnState = columnState.filter((savedColumn) => initialState.find((c) => savedColumn.dataField.includes("custom_field_") || // ignore custom fields
10
+ c.dataField === savedColumn.dataField));
11
+ for (const savedColumn of columnState) {
12
+ const column = initialState.find((c) => c.dataField === savedColumn.dataField);
13
+ if (column) {
14
+ column.visible = savedColumn.visible;
15
+ // column.sorting = savedColumn.sorting;
16
+ column.columnId = savedColumn.columnId;
17
+ column.width = savedColumn.width;
18
+ column.orderValue = savedColumn.orderValue;
19
+ }
20
+ else {
21
+ newColumnState.push(savedColumn);
22
+ }
23
+ }
24
+ return newColumnState.sort((a, b) => a.orderValue - b.orderValue);
25
+ }
26
+ export default syncColumnState;
@@ -0,0 +1,12 @@
1
+ declare const VirtualizedRows: React.FC<{
2
+ tableDimensions: {
3
+ width: number;
4
+ height: number;
5
+ };
6
+ targetElm: React.RefObject<HTMLDivElement>;
7
+ listElm: React.RefObject<HTMLDivElement>;
8
+ rowHeight?: number;
9
+ headerRowHeight?: number;
10
+ compact?: boolean;
11
+ }>;
12
+ export default VirtualizedRows;
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { FixedSizeList } from "react-window";
3
+ import { TableViewPort } from "./TableComponents";
4
+ import useTable from "./useTable";
5
+ import TableDefaults from "./TableDefaults";
6
+ import TableRow from "./TableRow";
7
+ const VirtualizedRows = ({ tableDimensions, targetElm, listElm, rowHeight, headerRowHeight, compact, }) => {
8
+ const { data } = useTable();
9
+ return (_jsx(TableViewPort, { className: "mfui-tbody-viewport", ref: targetElm, style: tableDimensions, children: _jsx(FixedSizeList, { itemData: { data }, overscanCount: 10, height: tableDimensions.height -
10
+ (headerRowHeight
11
+ ? headerRowHeight
12
+ : compact
13
+ ? TableDefaults.row.height.compact
14
+ : TableDefaults.row.height.normal), width: tableDimensions.width, itemCount: (data === null || data === void 0 ? void 0 : data.length) || 0, itemSize: rowHeight
15
+ ? rowHeight
16
+ : compact
17
+ ? TableDefaults.row.height.compact
18
+ : TableDefaults.row.height.normal, outerRef: listElm, innerElementType: (props) => {
19
+ return _jsx("tbody", Object.assign({ className: "mfui-tbody" }, props));
20
+ }, children: ({ data, index, style }) => {
21
+ var _a;
22
+ const row = ((_a = data === null || data === void 0 ? void 0 : data.data) === null || _a === void 0 ? void 0 : _a[index]) || {};
23
+ return (_jsx(TableRow, { rowData: row, rowStyle: Object.assign(Object.assign({}, style), { height: rowHeight }) }, index));
24
+ } }) }));
25
+ };
26
+ export default VirtualizedRows;
@@ -0,0 +1,6 @@
1
+ export declare enum SelectionStatus {
2
+ None = "none",
3
+ SomeIncluded = "someIncluded",
4
+ SomeExcluded = "someExcluded",
5
+ All = "all"
6
+ }