@pdg/react-table 1.0.20 → 1.0.22
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/Table/Table.d.ts +4 -1
- package/dist/Table/Table.types.d.ts +13 -7
- package/dist/TableBodyCell/TableBodyCell.types.d.ts +5 -0
- package/dist/TableBodyRow/TableBodyRow.types.d.ts +2 -0
- package/dist/TableContext/TableContext.types.d.ts +8 -0
- package/dist/TableHeadCell/TableHeadCell.types.d.ts +4 -0
- package/dist/index.esm.js +376 -52
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +375 -51
- package/dist/index.js.map +1 -1
- package/package.json +4 -2
package/dist/index.esm.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import*as React from'react';import React__default,{useRef,useEffect,cloneElement,useState,isValidElement,createRef,PureComponent,useLayoutEffect,createContext,useContext,useMemo,useCallback,useId}from'react';import {styled,TableRow,lighten,TableCell,Box,Tooltip,Stack,Pagination,Paper,Table as Table$1,TableHead,TableBody,Icon,TableFooter,Grid,Button,Popper,Grow,ClickAwayListener}from'@mui/material';import {findDOMNode}from'react-dom';import {useSortable,sortableKeyboardCoordinates,arrayMove,SortableContext,verticalListSortingStrategy}from'@dnd-kit/sortable';import dayjs from'dayjs';import {useSensors,useSensor,MouseSensor,TouchSensor,KeyboardSensor,DndContext,closestCenter}from'@dnd-kit/core';import {Search,SearchGroup,FormHidden}from'@pdg/react-form';/******************************************************************************
|
|
1
|
+
import*as React from'react';import React__default,{useRef,useEffect,cloneElement,useState,isValidElement,createRef,PureComponent,useLayoutEffect,createContext,useContext,useMemo,useCallback,useId}from'react';import {styled,TableRow,lighten,TableCell,Box,Checkbox,Tooltip,Stack,Pagination,Paper,Table as Table$1,TableHead,TableBody,Icon,TableFooter,Grid,Button,Popper,Grow,ClickAwayListener}from'@mui/material';import {findDOMNode}from'react-dom';import {useSortable,sortableKeyboardCoordinates,arrayMove,SortableContext,verticalListSortingStrategy}from'@dnd-kit/sortable';import dayjs from'dayjs';import {useSensors,useSensor,MouseSensor,TouchSensor,KeyboardSensor,DndContext,closestCenter}from'@dnd-kit/core';import {Search,SearchGroup,FormHidden}from'@pdg/react-form';/******************************************************************************
|
|
2
2
|
Copyright (c) Microsoft Corporation.
|
|
3
3
|
|
|
4
4
|
Permission to use, copy, modify, and/or distribute this software for any
|
|
@@ -8339,8 +8339,14 @@ var equal = function (v1, v2) {
|
|
|
8339
8339
|
}var TableContextDefaultValue = {
|
|
8340
8340
|
menuOpen: false,
|
|
8341
8341
|
openMenuId: undefined,
|
|
8342
|
-
|
|
8342
|
+
/* eslint-disable */
|
|
8343
8343
|
setMenuOpen: function () { },
|
|
8344
|
+
setItemColumnChecked: function () { },
|
|
8345
|
+
setItemColumnCheckDisabled: function () { },
|
|
8346
|
+
setItemColumnCommands: function () { },
|
|
8347
|
+
setHeadColumnChecked: function () { },
|
|
8348
|
+
setHeadColumnCommands: function () { },
|
|
8349
|
+
/* eslint-enable */
|
|
8344
8350
|
};var TableContext = createContext(TableContextDefaultValue);function useTableState() {
|
|
8345
8351
|
var value = useContext(TableContext);
|
|
8346
8352
|
if (value === undefined) {
|
|
@@ -8453,7 +8459,11 @@ var TableCommonCell = function (_a) {
|
|
|
8453
8459
|
}, [column, index, initSx, item, type]);
|
|
8454
8460
|
// Event Handler ---------------------------------------------------------------------------------------------------
|
|
8455
8461
|
var handleClick = useCallback(function (e) {
|
|
8456
|
-
if (!menuOpen
|
|
8462
|
+
if (!menuOpen &&
|
|
8463
|
+
column.type !== 'check' &&
|
|
8464
|
+
column.type !== 'button' &&
|
|
8465
|
+
column.type !== 'buttons' &&
|
|
8466
|
+
column.type !== 'img') {
|
|
8457
8467
|
e.stopPropagation();
|
|
8458
8468
|
if (type === 'body') {
|
|
8459
8469
|
if (item != null && index != null) {
|
|
@@ -8474,8 +8484,43 @@ var TableCommonCell = function (_a) {
|
|
|
8474
8484
|
var templateObject_1$1;var StyledButtonsBox = styled(Box)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n display: flex;\n flex-wrap: wrap;\n gap: 5px;\n"], ["\n display: flex;\n flex-wrap: wrap;\n gap: 5px;\n"])));
|
|
8475
8485
|
var TableBodyCell = function (_a) {
|
|
8476
8486
|
// Use ---------------------------------------------------------------------------------------------------------------
|
|
8477
|
-
var item = _a.item, index = _a.index, column = _a.column, defaultAlign = _a.defaultAlign, defaultEllipsis = _a.defaultEllipsis, onClick = _a.onClick;
|
|
8478
|
-
var
|
|
8487
|
+
var item = _a.item, index = _a.index, column = _a.column, defaultAlign = _a.defaultAlign, defaultEllipsis = _a.defaultEllipsis, onClick = _a.onClick, onCheckChange = _a.onCheckChange;
|
|
8488
|
+
var _b = useTableState(), menuOpen = _b.menuOpen, setItemColumnChecked = _b.setItemColumnChecked, setItemColumnCheckDisabled = _b.setItemColumnCheckDisabled, setItemColumnCommands = _b.setItemColumnCommands;
|
|
8489
|
+
// State -------------------------------------------------------------------------------------------------------------
|
|
8490
|
+
var _c = useState(false), checked = _c[0], setChecked = _c[1];
|
|
8491
|
+
var _d = useState(false), checkDisabled = _d[0], setCheckDisabled = _d[1];
|
|
8492
|
+
// Effect ------------------------------------------------------------------------------------------------------------
|
|
8493
|
+
useEffect(function () {
|
|
8494
|
+
if (column.type === 'check') {
|
|
8495
|
+
setChecked(column.onInitChecked ? column.onInitChecked(item) : false);
|
|
8496
|
+
setCheckDisabled(column.onCheckDisabled ? column.onCheckDisabled(item) : false);
|
|
8497
|
+
}
|
|
8498
|
+
setItemColumnCommands(item, column, {
|
|
8499
|
+
setChecked: function (checked) {
|
|
8500
|
+
if (column.type === 'check') {
|
|
8501
|
+
setChecked(checked);
|
|
8502
|
+
}
|
|
8503
|
+
},
|
|
8504
|
+
setCheckDisabled: function (disabled) {
|
|
8505
|
+
if (column.type === 'check') {
|
|
8506
|
+
setCheckDisabled(disabled);
|
|
8507
|
+
}
|
|
8508
|
+
},
|
|
8509
|
+
});
|
|
8510
|
+
}, [column, item, setItemColumnCommands]);
|
|
8511
|
+
useEffect(function () {
|
|
8512
|
+
if (column.type === 'check') {
|
|
8513
|
+
setItemColumnChecked(item, column, checked);
|
|
8514
|
+
column.onCheckChange && column.onCheckChange(item, checked);
|
|
8515
|
+
}
|
|
8516
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
8517
|
+
}, [checked]);
|
|
8518
|
+
useEffect(function () {
|
|
8519
|
+
if (column.type === 'check') {
|
|
8520
|
+
setItemColumnCheckDisabled(item, column, checkDisabled);
|
|
8521
|
+
}
|
|
8522
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
8523
|
+
}, [checkDisabled]);
|
|
8479
8524
|
// Memo --------------------------------------------------------------------------------------------------------------
|
|
8480
8525
|
var buttonsBoxJustifyContent = useMemo(function () {
|
|
8481
8526
|
switch (getTableColumnAlign(column, defaultAlign)) {
|
|
@@ -8487,20 +8532,19 @@ var TableBodyCell = function (_a) {
|
|
|
8487
8532
|
return 'start';
|
|
8488
8533
|
}
|
|
8489
8534
|
}, [column, defaultAlign]);
|
|
8490
|
-
|
|
8491
|
-
var _b = useState(), data = _b[0], setData = _b[1];
|
|
8492
|
-
// Effect ----------------------------------------------------------------------------------------------------------
|
|
8493
|
-
useEffect(function () {
|
|
8535
|
+
var data = useMemo(function () {
|
|
8494
8536
|
var _a, _b;
|
|
8495
8537
|
var data;
|
|
8496
|
-
if (column.
|
|
8497
|
-
|
|
8498
|
-
|
|
8499
|
-
|
|
8500
|
-
|
|
8501
|
-
|
|
8502
|
-
|
|
8503
|
-
|
|
8538
|
+
if (column.type !== 'check') {
|
|
8539
|
+
if (column.onRender) {
|
|
8540
|
+
data = column.onRender(item, index);
|
|
8541
|
+
}
|
|
8542
|
+
else if (column.name) {
|
|
8543
|
+
data = item[column.name];
|
|
8544
|
+
}
|
|
8545
|
+
else {
|
|
8546
|
+
data = undefined;
|
|
8547
|
+
}
|
|
8504
8548
|
}
|
|
8505
8549
|
switch (column.type) {
|
|
8506
8550
|
case 'number':
|
|
@@ -8508,6 +8552,13 @@ var TableBodyCell = function (_a) {
|
|
|
8508
8552
|
data = numberWithThousandSeparator(data);
|
|
8509
8553
|
}
|
|
8510
8554
|
break;
|
|
8555
|
+
case 'check':
|
|
8556
|
+
data = (React__default.createElement(Box, { className: 'TableBoxyCell-check-box', onClick: menuOpen ? undefined : function (e) { return e.stopPropagation(); } },
|
|
8557
|
+
React__default.createElement(Checkbox, { checked: checked, disabled: checkDisabled, onChange: function (e, newChecked) {
|
|
8558
|
+
setChecked(newChecked);
|
|
8559
|
+
onCheckChange && onCheckChange(item, column, newChecked);
|
|
8560
|
+
} })));
|
|
8561
|
+
break;
|
|
8511
8562
|
case 'button':
|
|
8512
8563
|
data = (React__default.createElement(Box, { className: 'TableBoxyCell-button-box', onClick: menuOpen ? undefined : function (e) { return e.stopPropagation(); } }, data));
|
|
8513
8564
|
break;
|
|
@@ -8550,8 +8601,8 @@ var TableBodyCell = function (_a) {
|
|
|
8550
8601
|
}
|
|
8551
8602
|
break;
|
|
8552
8603
|
}
|
|
8553
|
-
|
|
8554
|
-
}, [
|
|
8604
|
+
return data;
|
|
8605
|
+
}, [column, item, index, menuOpen, checked, checkDisabled, buttonsBoxJustifyContent, onCheckChange]);
|
|
8555
8606
|
// Event Handler ---------------------------------------------------------------------------------------------------
|
|
8556
8607
|
var handleClick = useCallback(function (item, index) {
|
|
8557
8608
|
if (column.onClick) {
|
|
@@ -8579,9 +8630,9 @@ var templateObject_1;var StyledBodyRow = styled(TableRow)(function (_a) {
|
|
|
8579
8630
|
var TableBodyRow = function (_a) {
|
|
8580
8631
|
var className = _a.className, style = _a.style,
|
|
8581
8632
|
//--------------------------------------------------------------------------------------------------------------------
|
|
8582
|
-
id = _a.id, index = _a.index, defaultAlign = _a.defaultAlign, defaultEllipsis = _a.defaultEllipsis, sortable = _a.sortable, columns = _a.columns, item = _a.item, onClick = _a.onClick,
|
|
8633
|
+
id = _a.id, index = _a.index, defaultAlign = _a.defaultAlign, defaultEllipsis = _a.defaultEllipsis, sortable = _a.sortable, columns = _a.columns, item = _a.item, onClick = _a.onClick, onCheckChange = _a.onCheckChange,
|
|
8583
8634
|
// -------------------------------------------------------------------------------------------------------------------
|
|
8584
|
-
props = __rest$1(_a, ["className", "style", "id", "index", "defaultAlign", "defaultEllipsis", "sortable", "columns", "item", "onClick"]);
|
|
8635
|
+
props = __rest$1(_a, ["className", "style", "id", "index", "defaultAlign", "defaultEllipsis", "sortable", "columns", "item", "onClick", "onCheckChange"]);
|
|
8585
8636
|
var _b = useSortable({ id: id }), attributes = _b.attributes, listeners = _b.listeners, setNodeRef = _b.setNodeRef, transform = _b.transform, transition = _b.transition;
|
|
8586
8637
|
var finalStyle = useMemo(function () {
|
|
8587
8638
|
return sortable
|
|
@@ -8591,20 +8642,49 @@ var TableBodyRow = function (_a) {
|
|
|
8591
8642
|
return sortable
|
|
8592
8643
|
? __assign$1(__assign$1({ ref: setNodeRef }, attributes), listeners) : {};
|
|
8593
8644
|
}, [attributes, listeners, setNodeRef, sortable]);
|
|
8594
|
-
return (React__default.createElement(StyledBodyRow, __assign$1({ className: classNames('TableBodyRow', className), style: finalStyle }, props, sortableProps), columns.map(function (column, columnIdx) { return (React__default.createElement(TableBodyCell, { key: columnIdx, index: index, item: item, defaultAlign: defaultAlign, defaultEllipsis: defaultEllipsis, column: column, onClick: onClick })); })));
|
|
8645
|
+
return (React__default.createElement(StyledBodyRow, __assign$1({ className: classNames('TableBodyRow', className), style: finalStyle }, props, sortableProps), columns.map(function (column, columnIdx) { return (React__default.createElement(TableBodyCell, { key: columnIdx, index: index, item: item, defaultAlign: defaultAlign, defaultEllipsis: defaultEllipsis, column: column, onClick: onClick, onCheckChange: onCheckChange })); })));
|
|
8595
8646
|
};
|
|
8596
8647
|
TableBodyRow.displayName = 'TableBodyRow';
|
|
8597
8648
|
TableBodyRow.defaultProps = TableBodyRowDefaultProps;var TableHeadCell = function (_a) {
|
|
8598
|
-
|
|
8649
|
+
// Use ---------------------------------------------------------------------------------------------------------------
|
|
8650
|
+
var column = _a.column, defaultAlign = _a.defaultAlign, onCheckChange = _a.onCheckChange;
|
|
8651
|
+
var _b = useTableState(), setHeadColumnChecked = _b.setHeadColumnChecked, setHeadColumnCommands = _b.setHeadColumnCommands;
|
|
8652
|
+
// State -------------------------------------------------------------------------------------------------------------
|
|
8653
|
+
var _c = useState(false), checked = _c[0], setChecked = _c[1];
|
|
8654
|
+
// Effect ------------------------------------------------------------------------------------------------------------
|
|
8655
|
+
useEffect(function () {
|
|
8656
|
+
if (column.type === 'check') {
|
|
8657
|
+
setHeadColumnChecked(column, checked);
|
|
8658
|
+
}
|
|
8659
|
+
}, [column, checked, setHeadColumnChecked]);
|
|
8660
|
+
useEffect(function () {
|
|
8661
|
+
setHeadColumnCommands(column, {
|
|
8662
|
+
setChecked: function (checked) {
|
|
8663
|
+
if (column.type === 'check') {
|
|
8664
|
+
setChecked(checked);
|
|
8665
|
+
}
|
|
8666
|
+
},
|
|
8667
|
+
});
|
|
8668
|
+
}, [setHeadColumnCommands, column]);
|
|
8669
|
+
// Memo --------------------------------------------------------------------------------------------------------------
|
|
8599
8670
|
var data = useMemo(function () {
|
|
8600
8671
|
var _a, _b;
|
|
8601
|
-
if (
|
|
8602
|
-
return (
|
|
8672
|
+
if (column.type === 'check') {
|
|
8673
|
+
return (React__default.createElement(Checkbox, { checked: checked, onChange: function (e, newChecked) {
|
|
8674
|
+
setChecked(newChecked);
|
|
8675
|
+
onCheckChange && onCheckChange(column, newChecked);
|
|
8676
|
+
} }));
|
|
8603
8677
|
}
|
|
8604
8678
|
else {
|
|
8605
|
-
|
|
8679
|
+
if ((_a = column.head) === null || _a === void 0 ? void 0 : _a.onRender) {
|
|
8680
|
+
return (_b = column.head) === null || _b === void 0 ? void 0 : _b.onRender();
|
|
8681
|
+
}
|
|
8682
|
+
else {
|
|
8683
|
+
return column.label;
|
|
8684
|
+
}
|
|
8606
8685
|
}
|
|
8607
|
-
}, [column]);
|
|
8686
|
+
}, [checked, column, onCheckChange]);
|
|
8687
|
+
// Render ------------------------------------------------------------------------------------------------------------
|
|
8608
8688
|
return (React__default.createElement(TableCommonCell, { type: 'head', className: 'TableHeadCell', column: column, defaultAlign: defaultAlign }, data));
|
|
8609
8689
|
};var TableFooterCell = function (_a) {
|
|
8610
8690
|
var column = _a.column, defaultAlign = _a.defaultAlign;
|
|
@@ -8716,14 +8796,76 @@ TableBodyRow.defaultProps = TableBodyRowDefaultProps;var TableHeadCell = functio
|
|
|
8716
8796
|
styleInject(css_248z);var TableContextProvider = function (_a) {
|
|
8717
8797
|
var children = _a.children, value = _a.value;
|
|
8718
8798
|
return React__default.createElement(TableContext.Provider, { value: value }, children);
|
|
8719
|
-
}
|
|
8799
|
+
};// Unique ID creation requires a high quality random # generator. In the browser we therefore
|
|
8800
|
+
// require the crypto API and do not support built-in fallback to lower quality random number
|
|
8801
|
+
// generators (like Math.random()).
|
|
8802
|
+
let getRandomValues;
|
|
8803
|
+
const rnds8 = new Uint8Array(16);
|
|
8804
|
+
function rng() {
|
|
8805
|
+
// lazy load so that environments that need to polyfill have a chance to do so
|
|
8806
|
+
if (!getRandomValues) {
|
|
8807
|
+
// getRandomValues needs to be invoked in a context where "this" is a Crypto implementation.
|
|
8808
|
+
getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);
|
|
8809
|
+
|
|
8810
|
+
if (!getRandomValues) {
|
|
8811
|
+
throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');
|
|
8812
|
+
}
|
|
8813
|
+
}
|
|
8814
|
+
|
|
8815
|
+
return getRandomValues(rnds8);
|
|
8816
|
+
}/**
|
|
8817
|
+
* Convert array of 16 byte values to UUID string format of the form:
|
|
8818
|
+
* XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
|
|
8819
|
+
*/
|
|
8820
|
+
|
|
8821
|
+
const byteToHex = [];
|
|
8822
|
+
|
|
8823
|
+
for (let i = 0; i < 256; ++i) {
|
|
8824
|
+
byteToHex.push((i + 0x100).toString(16).slice(1));
|
|
8825
|
+
}
|
|
8826
|
+
|
|
8827
|
+
function unsafeStringify(arr, offset = 0) {
|
|
8828
|
+
// Note: Be careful editing this code! It's been tuned for performance
|
|
8829
|
+
// and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
|
|
8830
|
+
return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();
|
|
8831
|
+
}const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);
|
|
8832
|
+
var native = {
|
|
8833
|
+
randomUUID
|
|
8834
|
+
};function v4(options, buf, offset) {
|
|
8835
|
+
if (native.randomUUID && !buf && !options) {
|
|
8836
|
+
return native.randomUUID();
|
|
8837
|
+
}
|
|
8838
|
+
|
|
8839
|
+
options = options || {};
|
|
8840
|
+
const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
|
|
8841
|
+
|
|
8842
|
+
rnds[6] = rnds[6] & 0x0f | 0x40;
|
|
8843
|
+
rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided
|
|
8844
|
+
|
|
8845
|
+
if (buf) {
|
|
8846
|
+
offset = offset || 0;
|
|
8847
|
+
|
|
8848
|
+
for (let i = 0; i < 16; ++i) {
|
|
8849
|
+
buf[offset + i] = rnds[i];
|
|
8850
|
+
}
|
|
8851
|
+
|
|
8852
|
+
return buf;
|
|
8853
|
+
}
|
|
8854
|
+
|
|
8855
|
+
return unsafeStringify(rnds);
|
|
8856
|
+
}function columnFilter(v) {
|
|
8720
8857
|
return v !== undefined && v !== null && v !== false;
|
|
8721
8858
|
}
|
|
8722
8859
|
var Table = React__default.forwardRef(function (_a, ref) {
|
|
8723
|
-
//
|
|
8724
|
-
var initColumns = _a.columns, initItems = _a.items, initPaging = _a.paging, pagingAlign = _a.pagingAlign, defaultAlign = _a.defaultAlign, defaultEllipsis = _a.defaultEllipsis, stickyHeader = _a.stickyHeader, height = _a.height, minHeight = _a.minHeight, maxHeight = _a.maxHeight, fullHeight = _a.fullHeight, showOddColor = _a.showOddColor, showEvenColor = _a.showEvenColor, cellPadding = _a.cellPadding, footer = _a.footer, noData = _a.noData, pagination = _a.pagination, sortable = _a.sortable, onClick = _a.onClick, onGetBodyRowSx = _a.onGetBodyRowSx, onPageChange = _a.onPageChange, onSortChange = _a.onSortChange,
|
|
8860
|
+
// Ref ---------------------------------------------------------------------------------------------------------------
|
|
8861
|
+
var initColumns = _a.columns, initItems = _a.items, initPaging = _a.paging, pagingAlign = _a.pagingAlign, defaultAlign = _a.defaultAlign, defaultEllipsis = _a.defaultEllipsis, stickyHeader = _a.stickyHeader, height = _a.height, minHeight = _a.minHeight, maxHeight = _a.maxHeight, fullHeight = _a.fullHeight, showOddColor = _a.showOddColor, showEvenColor = _a.showEvenColor, cellPadding = _a.cellPadding, footer = _a.footer, noData = _a.noData, pagination = _a.pagination, sortable = _a.sortable, onClick = _a.onClick, onGetBodyRowSx = _a.onGetBodyRowSx, onPageChange = _a.onPageChange, onSortChange = _a.onSortChange, onCheckChange = _a.onCheckChange,
|
|
8725
8862
|
// ---------------------------------------------------------------------------------------------------------------
|
|
8726
8863
|
className = _a.className, initStyle = _a.style, sx = _a.sx;
|
|
8864
|
+
var localHeaderDataRef = useRef({});
|
|
8865
|
+
var localBodyDataRef = useRef({});
|
|
8866
|
+
var updateHeadCheckTimer = useRef();
|
|
8867
|
+
var fireOnCheckChangeTimer = useRef({});
|
|
8868
|
+
// sortable --------------------------------------------------------------------------------------------------------
|
|
8727
8869
|
var sensors = useSensors(useSensor(MouseSensor, {
|
|
8728
8870
|
// Require the mouse to move by 10 pixels before activating
|
|
8729
8871
|
activationConstraint: {
|
|
@@ -8790,17 +8932,132 @@ var Table = React__default.forwardRef(function (_a, ref) {
|
|
|
8790
8932
|
var makeSortableItems = useCallback(function (items) {
|
|
8791
8933
|
return items === null || items === void 0 ? void 0 : items.map(function (_a, index) {
|
|
8792
8934
|
var id = _a.id, item = __rest$1(_a, ["id"]);
|
|
8793
|
-
return __assign$1({ id: id == null ? index : id }, item);
|
|
8935
|
+
return __assign$1({ id: id == null ? "".concat(v4(), "_").concat(index) : id }, item);
|
|
8936
|
+
});
|
|
8937
|
+
}, []);
|
|
8938
|
+
var updateHeadCheck = useCallback(function (column) {
|
|
8939
|
+
if (updateHeadCheckTimer.current) {
|
|
8940
|
+
clearTimeout(updateHeadCheckTimer.current);
|
|
8941
|
+
updateHeadCheckTimer.current = undefined;
|
|
8942
|
+
}
|
|
8943
|
+
var headColumnData = localHeaderDataRef.current[column.id];
|
|
8944
|
+
if (headColumnData) {
|
|
8945
|
+
updateHeadCheckTimer.current = setTimeout(function () {
|
|
8946
|
+
var _a;
|
|
8947
|
+
updateHeadCheckTimer.current = undefined;
|
|
8948
|
+
var allChecked = !Object.keys(localBodyDataRef.current).find(function (key) {
|
|
8949
|
+
var columnData = localBodyDataRef.current[key].columns[column.id];
|
|
8950
|
+
if (columnData) {
|
|
8951
|
+
if (!columnData.checkDisabled) {
|
|
8952
|
+
return !columnData.checked;
|
|
8953
|
+
}
|
|
8954
|
+
}
|
|
8955
|
+
});
|
|
8956
|
+
(_a = headColumnData.commands) === null || _a === void 0 ? void 0 : _a.setChecked(allChecked);
|
|
8957
|
+
}, 100);
|
|
8958
|
+
}
|
|
8959
|
+
}, []);
|
|
8960
|
+
var getCheckedItems = useCallback(function (columnId) {
|
|
8961
|
+
var checkedItems = [];
|
|
8962
|
+
Object.keys(localBodyDataRef.current).forEach(function (key) {
|
|
8963
|
+
var itemData = localBodyDataRef.current[key];
|
|
8964
|
+
var columnData = itemData.columns[columnId];
|
|
8965
|
+
if (columnData) {
|
|
8966
|
+
if (columnData.checked) {
|
|
8967
|
+
checkedItems.push(itemData.item);
|
|
8968
|
+
}
|
|
8969
|
+
}
|
|
8970
|
+
});
|
|
8971
|
+
return checkedItems;
|
|
8972
|
+
}, []);
|
|
8973
|
+
var stopHeadCheckTimer = useCallback(function () {
|
|
8974
|
+
if (updateHeadCheckTimer.current) {
|
|
8975
|
+
clearTimeout(updateHeadCheckTimer.current);
|
|
8976
|
+
updateHeadCheckTimer.current = undefined;
|
|
8977
|
+
}
|
|
8978
|
+
}, []);
|
|
8979
|
+
var clearFireOnCheckChangeTimer = useCallback(function () {
|
|
8980
|
+
Object.keys(fireOnCheckChangeTimer.current).forEach(function (key) {
|
|
8981
|
+
if (fireOnCheckChangeTimer.current[key]) {
|
|
8982
|
+
clearTimeout(fireOnCheckChangeTimer.current[key]);
|
|
8983
|
+
}
|
|
8794
8984
|
});
|
|
8985
|
+
fireOnCheckChangeTimer.current = {};
|
|
8795
8986
|
}, []);
|
|
8987
|
+
var fireOnCheckChange = useCallback(function (columnId) {
|
|
8988
|
+
if (fireOnCheckChangeTimer.current[columnId]) {
|
|
8989
|
+
clearTimeout(fireOnCheckChangeTimer.current[columnId]);
|
|
8990
|
+
fireOnCheckChangeTimer.current[columnId] = undefined;
|
|
8991
|
+
}
|
|
8992
|
+
if (onCheckChange) {
|
|
8993
|
+
fireOnCheckChangeTimer.current[columnId] = setTimeout(function () {
|
|
8994
|
+
fireOnCheckChangeTimer.current[columnId] = undefined;
|
|
8995
|
+
onCheckChange && onCheckChange(columnId, getCheckedItems(columnId));
|
|
8996
|
+
}, 100);
|
|
8997
|
+
}
|
|
8998
|
+
}, [getCheckedItems, onCheckChange]);
|
|
8796
8999
|
// Effect ----------------------------------------------------------------------------------------------------------
|
|
8797
9000
|
useEffect(function () {
|
|
9001
|
+
return function () {
|
|
9002
|
+
stopHeadCheckTimer();
|
|
9003
|
+
clearFireOnCheckChangeTimer();
|
|
9004
|
+
};
|
|
9005
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
9006
|
+
}, []);
|
|
9007
|
+
useEffect(function () {
|
|
9008
|
+
stopHeadCheckTimer();
|
|
9009
|
+
clearFireOnCheckChangeTimer();
|
|
8798
9010
|
setSortableItems(makeSortableItems(items));
|
|
8799
9011
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
8800
9012
|
}, [items]);
|
|
8801
9013
|
useEffect(function () {
|
|
9014
|
+
stopHeadCheckTimer();
|
|
9015
|
+
clearFireOnCheckChangeTimer();
|
|
8802
9016
|
setFinalColumns(columns === null || columns === void 0 ? void 0 : columns.filter(columnFilter));
|
|
9017
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
8803
9018
|
}, [columns]);
|
|
9019
|
+
useLayoutEffect(function () {
|
|
9020
|
+
clearFireOnCheckChangeTimer();
|
|
9021
|
+
if (sortableItems) {
|
|
9022
|
+
localBodyDataRef.current = sortableItems.reduce(function (res, item) {
|
|
9023
|
+
res[item.id] = {
|
|
9024
|
+
item: item,
|
|
9025
|
+
columns: {},
|
|
9026
|
+
};
|
|
9027
|
+
if (finalColumns) {
|
|
9028
|
+
finalColumns.forEach(function (c) {
|
|
9029
|
+
var _a;
|
|
9030
|
+
var columnId = c.id;
|
|
9031
|
+
if ((_a = localBodyDataRef.current[item.id]) === null || _a === void 0 ? void 0 : _a.columns[columnId]) {
|
|
9032
|
+
res[item.id].columns[columnId] = localBodyDataRef.current[item.id].columns[columnId];
|
|
9033
|
+
}
|
|
9034
|
+
else {
|
|
9035
|
+
res[item.id].columns[columnId] = {
|
|
9036
|
+
column: c,
|
|
9037
|
+
checked: false,
|
|
9038
|
+
checkDisabled: false,
|
|
9039
|
+
};
|
|
9040
|
+
}
|
|
9041
|
+
});
|
|
9042
|
+
}
|
|
9043
|
+
return res;
|
|
9044
|
+
}, {});
|
|
9045
|
+
}
|
|
9046
|
+
else {
|
|
9047
|
+
localBodyDataRef.current = {};
|
|
9048
|
+
}
|
|
9049
|
+
}, [sortableItems, finalColumns, clearFireOnCheckChangeTimer]);
|
|
9050
|
+
useLayoutEffect(function () {
|
|
9051
|
+
if (finalColumns) {
|
|
9052
|
+
localHeaderDataRef.current = finalColumns.reduce(function (res, c) {
|
|
9053
|
+
res[c.id] = { column: c, checked: false };
|
|
9054
|
+
return res;
|
|
9055
|
+
}, {});
|
|
9056
|
+
}
|
|
9057
|
+
else {
|
|
9058
|
+
localHeaderDataRef.current = {};
|
|
9059
|
+
}
|
|
9060
|
+
}, [finalColumns]);
|
|
8804
9061
|
// Commands --------------------------------------------------------------------------------------------------------
|
|
8805
9062
|
useLayoutEffect(function () {
|
|
8806
9063
|
if (ref) {
|
|
@@ -8824,6 +9081,7 @@ var Table = React__default.forwardRef(function (_a, ref) {
|
|
|
8824
9081
|
resetSort: function () {
|
|
8825
9082
|
setSortableItems(makeSortableItems(lastItems_1));
|
|
8826
9083
|
},
|
|
9084
|
+
getCheckedItems: getCheckedItems,
|
|
8827
9085
|
};
|
|
8828
9086
|
if (typeof ref === 'function') {
|
|
8829
9087
|
ref(commands);
|
|
@@ -8832,7 +9090,7 @@ var Table = React__default.forwardRef(function (_a, ref) {
|
|
|
8832
9090
|
ref.current = commands;
|
|
8833
9091
|
}
|
|
8834
9092
|
}
|
|
8835
|
-
}, [ref, columns, items, paging, makeSortableItems, setColumns, setItems, setPaging]);
|
|
9093
|
+
}, [ref, columns, items, paging, makeSortableItems, setColumns, setItems, setPaging, getCheckedItems]);
|
|
8836
9094
|
// Event Handler ---------------------------------------------------------------------------------------------------
|
|
8837
9095
|
var handleDragEnd = useCallback(function (event) {
|
|
8838
9096
|
var active = event.active, over = event.over;
|
|
@@ -8865,6 +9123,87 @@ var Table = React__default.forwardRef(function (_a, ref) {
|
|
|
8865
9123
|
});
|
|
8866
9124
|
}
|
|
8867
9125
|
}, [onSortChange]);
|
|
9126
|
+
var handleHeadCheckChange = useCallback(function (column, checked) {
|
|
9127
|
+
Object.keys(localBodyDataRef.current).forEach(function (key) {
|
|
9128
|
+
var _a;
|
|
9129
|
+
var data = localBodyDataRef.current[key].columns[column.id];
|
|
9130
|
+
if (data) {
|
|
9131
|
+
if (!data.checkDisabled) {
|
|
9132
|
+
(_a = data.commands) === null || _a === void 0 ? void 0 : _a.setChecked(checked);
|
|
9133
|
+
}
|
|
9134
|
+
}
|
|
9135
|
+
});
|
|
9136
|
+
}, []);
|
|
9137
|
+
var handleBodyCheckChange = useCallback(function (item, column) {
|
|
9138
|
+
updateHeadCheck(column);
|
|
9139
|
+
}, [updateHeadCheck]);
|
|
9140
|
+
// TableContext Function ---------------------------------------------------------------------------------------------
|
|
9141
|
+
var TableContextSetMenuOpen = useCallback(function (newMenuOpen, newOpenMenuId) {
|
|
9142
|
+
if (newMenuOpen) {
|
|
9143
|
+
setMenuOpen(newMenuOpen);
|
|
9144
|
+
setOpenMenuId(newOpenMenuId);
|
|
9145
|
+
}
|
|
9146
|
+
else {
|
|
9147
|
+
if (openMenuId === newOpenMenuId) {
|
|
9148
|
+
setMenuOpen(false);
|
|
9149
|
+
setOpenMenuId(undefined);
|
|
9150
|
+
}
|
|
9151
|
+
}
|
|
9152
|
+
}, [openMenuId]);
|
|
9153
|
+
var TableContextSetItemColumnChecked = useCallback(function (item, column, checked) {
|
|
9154
|
+
var _a;
|
|
9155
|
+
var data = (_a = localBodyDataRef.current[item.id]) === null || _a === void 0 ? void 0 : _a.columns[column.id];
|
|
9156
|
+
if (data) {
|
|
9157
|
+
data.checked = checked;
|
|
9158
|
+
fireOnCheckChange(column.id);
|
|
9159
|
+
}
|
|
9160
|
+
}, [fireOnCheckChange]);
|
|
9161
|
+
var TableContextSetItemColumnCheckDisabled = useCallback(function (item, column, disabled) {
|
|
9162
|
+
var _a;
|
|
9163
|
+
var data = (_a = localBodyDataRef.current[item.id]) === null || _a === void 0 ? void 0 : _a.columns[column.id];
|
|
9164
|
+
if (data) {
|
|
9165
|
+
data.checkDisabled = disabled;
|
|
9166
|
+
}
|
|
9167
|
+
}, []);
|
|
9168
|
+
var TableContextSetItemColumnCommands = useCallback(function (item, column, commands) {
|
|
9169
|
+
var _a;
|
|
9170
|
+
var data = (_a = localBodyDataRef.current[item.id]) === null || _a === void 0 ? void 0 : _a.columns[column.id];
|
|
9171
|
+
if (data) {
|
|
9172
|
+
data.commands = commands;
|
|
9173
|
+
}
|
|
9174
|
+
}, []);
|
|
9175
|
+
var TableContextSetHeadColumnChecked = useCallback(function (column, checked) {
|
|
9176
|
+
var data = localHeaderDataRef.current[column.id];
|
|
9177
|
+
if (data) {
|
|
9178
|
+
data.checked = checked;
|
|
9179
|
+
}
|
|
9180
|
+
}, []);
|
|
9181
|
+
var TableContextSetHeadColumnCommands = useCallback(function (column, commands) {
|
|
9182
|
+
var data = localHeaderDataRef.current[column.id];
|
|
9183
|
+
if (data) {
|
|
9184
|
+
data.commands = commands;
|
|
9185
|
+
}
|
|
9186
|
+
}, []);
|
|
9187
|
+
// Memo --------------------------------------------------------------------------------------------------------------
|
|
9188
|
+
var tableContextValue = useMemo(function () { return ({
|
|
9189
|
+
menuOpen: menuOpen,
|
|
9190
|
+
openMenuId: openMenuId,
|
|
9191
|
+
setMenuOpen: TableContextSetMenuOpen,
|
|
9192
|
+
setItemColumnChecked: TableContextSetItemColumnChecked,
|
|
9193
|
+
setItemColumnCheckDisabled: TableContextSetItemColumnCheckDisabled,
|
|
9194
|
+
setItemColumnCommands: TableContextSetItemColumnCommands,
|
|
9195
|
+
setHeadColumnChecked: TableContextSetHeadColumnChecked,
|
|
9196
|
+
setHeadColumnCommands: TableContextSetHeadColumnCommands,
|
|
9197
|
+
}); }, [
|
|
9198
|
+
TableContextSetHeadColumnChecked,
|
|
9199
|
+
TableContextSetHeadColumnCommands,
|
|
9200
|
+
TableContextSetItemColumnCheckDisabled,
|
|
9201
|
+
TableContextSetItemColumnChecked,
|
|
9202
|
+
TableContextSetItemColumnCommands,
|
|
9203
|
+
TableContextSetMenuOpen,
|
|
9204
|
+
menuOpen,
|
|
9205
|
+
openMenuId,
|
|
9206
|
+
]);
|
|
8868
9207
|
// Memo --------------------------------------------------------------------------------------------------------------
|
|
8869
9208
|
var isNoData = useMemo(function () { return !!sortableItems && sortableItems.length <= 0; }, [sortableItems]);
|
|
8870
9209
|
var finalPagingHeight = useMemo(function () { return (paging && paging.total > 0 ? pagingHeight || 0 : 0); }, [paging, pagingHeight]);
|
|
@@ -8905,29 +9244,14 @@ var Table = React__default.forwardRef(function (_a, ref) {
|
|
|
8905
9244
|
return style;
|
|
8906
9245
|
}, [fullHeight]);
|
|
8907
9246
|
// Render ----------------------------------------------------------------------------------------------------------
|
|
8908
|
-
return finalColumns ? (React__default.createElement(TableContextProvider, { value:
|
|
8909
|
-
menuOpen: menuOpen,
|
|
8910
|
-
openMenuId: openMenuId,
|
|
8911
|
-
setMenuOpen: function (newMenuOpen, newOpenMenuId) {
|
|
8912
|
-
if (newMenuOpen) {
|
|
8913
|
-
setMenuOpen(newMenuOpen);
|
|
8914
|
-
setOpenMenuId(newOpenMenuId);
|
|
8915
|
-
}
|
|
8916
|
-
else {
|
|
8917
|
-
if (openMenuId === newOpenMenuId) {
|
|
8918
|
-
setMenuOpen(false);
|
|
8919
|
-
setOpenMenuId(undefined);
|
|
8920
|
-
}
|
|
8921
|
-
}
|
|
8922
|
-
},
|
|
8923
|
-
} },
|
|
9247
|
+
return finalColumns ? (React__default.createElement(TableContextProvider, { value: tableContextValue },
|
|
8924
9248
|
React__default.createElement(Paper, { ref: fullHeight ? containerHeightDetector : undefined, className: classNames('Table', className), variant: 'outlined', style: style, sx: sx },
|
|
8925
9249
|
React__default.createElement(SimpleBar, { style: simpleBarStyle },
|
|
8926
9250
|
React__default.createElement(DndContext, { sensors: sensors, collisionDetection: closestCenter, onDragEnd: handleDragEnd },
|
|
8927
9251
|
React__default.createElement(Table$1, { stickyHeader: !isNoData && stickyHeader, sx: tableSx, style: tableStyle },
|
|
8928
9252
|
React__default.createElement(TableHead, null,
|
|
8929
|
-
React__default.createElement(TableRow, null, finalColumns.map(function (column, idx) { return (React__default.createElement(TableHeadCell, { key: idx, column: column, defaultAlign: defaultAlign })); }))),
|
|
8930
|
-
React__default.createElement(TableBody, null, sortableItems ? (sortableItems.length > 0 ? (React__default.createElement(SortableContext, { items: sortableItems, strategy: verticalListSortingStrategy }, sortableItems.map(function (item, idx) { return (React__default.createElement(TableBodyRow, { key: item.id, className: classNames(!!showOddColor && 'odd-color', !!showEvenColor && 'even-color'), hover: true, sx: onGetBodyRowSx ? onGetBodyRowSx(item, idx) : undefined, id: item.id, index: idx, defaultAlign: defaultAlign, defaultEllipsis: defaultEllipsis, sortable: sortable, columns: finalColumns, item: item, onClick: onClick })); }))) : (React__default.createElement(StyledBodyRow$1, null,
|
|
9253
|
+
React__default.createElement(TableRow, null, finalColumns.map(function (column, idx) { return (React__default.createElement(TableHeadCell, { key: idx, column: column, defaultAlign: defaultAlign, onCheckChange: handleHeadCheckChange })); }))),
|
|
9254
|
+
React__default.createElement(TableBody, null, sortableItems ? (sortableItems.length > 0 ? (React__default.createElement(SortableContext, { items: sortableItems, strategy: verticalListSortingStrategy }, sortableItems.map(function (item, idx) { return (React__default.createElement(TableBodyRow, { key: item.id, className: classNames(!!showOddColor && 'odd-color', !!showEvenColor && 'even-color'), hover: true, sx: onGetBodyRowSx ? onGetBodyRowSx(item, idx) : undefined, id: item.id, index: idx, defaultAlign: defaultAlign, defaultEllipsis: defaultEllipsis, sortable: sortable, columns: finalColumns, item: item, onClick: onClick, onCheckChange: handleBodyCheckChange })); }))) : (React__default.createElement(StyledBodyRow$1, null,
|
|
8931
9255
|
React__default.createElement(TableCell, { colSpan: finalColumns.length, style: { flex: 1 } }, noData ? (noData) : (React__default.createElement(StyledNoDataDiv, null,
|
|
8932
9256
|
React__default.createElement("div", null,
|
|
8933
9257
|
React__default.createElement(Icon, null, "error")),
|
|
@@ -9350,9 +9674,9 @@ TableButton.defaultProps = TableButtonDefaultProps;var TableMenuButtonDefaultPro
|
|
|
9350
9674
|
id: menuId,
|
|
9351
9675
|
'aria-labelledby': buttonId,
|
|
9352
9676
|
onKeyDown: handleListKeyDown,
|
|
9353
|
-
|
|
9677
|
+
onClick: handleClose,
|
|
9354
9678
|
});
|
|
9355
|
-
}, [buttonId, handleListKeyDown, menuId, menuList, open]);
|
|
9679
|
+
}, [buttonId, handleClose, handleListKeyDown, menuId, menuList, open]);
|
|
9356
9680
|
// Render ----------------------------------------------------------------------------------------------------------
|
|
9357
9681
|
return (React__default.createElement("span", null,
|
|
9358
9682
|
React__default.createElement(Button, __assign$1({ ref: function (r) {
|