react-table-edit 1.4.28 → 1.4.30
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/component/table-view/index.d.ts +1 -0
- package/dist/component/type/index.d.ts +4 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +50 -23
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +50 -23
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -41878,6 +41878,7 @@ const RenderFilterElement$1 = ({ filter, optionsFilter, formatSetting, filterBy,
|
|
|
41878
41878
|
const { t } = useTranslation();
|
|
41879
41879
|
const [operator, setOperator] = useState(filter?.ope ?? ((!column.filterType && column.type === 'numeric') || column.filterType === 'select' ? 'equal' : 'contains'));
|
|
41880
41880
|
const [valueFilter, setValueFilter] = useState(filter?.value ?? '');
|
|
41881
|
+
const fieldFilter = column.fieldFilter ?? column.field;
|
|
41881
41882
|
const RenderStringFilter = () => {
|
|
41882
41883
|
const options = [
|
|
41883
41884
|
{ label: 'Bắt đầu bởi', value: 'startswith' },
|
|
@@ -41921,7 +41922,7 @@ const RenderFilterElement$1 = ({ filter, optionsFilter, formatSetting, filterBy,
|
|
|
41921
41922
|
} })] }));
|
|
41922
41923
|
};
|
|
41923
41924
|
const RenderSelectFilter = () => {
|
|
41924
|
-
return (jsx("div", { className: 'mb-1', children: jsx(SelectTable, { value: optionsFilter ? optionsFilter[
|
|
41925
|
+
return (jsx("div", { className: 'mb-1', children: jsx(SelectTable, { value: optionsFilter ? optionsFilter[fieldFilter]?.find((x) => x.value === valueFilter) : undefined, options: (optionsFilter && optionsFilter[fieldFilter]) ?? [], isClearable: true, onChange: (val) => {
|
|
41925
41926
|
setValueFilter(val?.value);
|
|
41926
41927
|
}, placeholder: t('Select') }) }));
|
|
41927
41928
|
};
|
|
@@ -41931,7 +41932,7 @@ const RenderFilterElement$1 = ({ filter, optionsFilter, formatSetting, filterBy,
|
|
|
41931
41932
|
filter.value = valueFilter ?? '';
|
|
41932
41933
|
}
|
|
41933
41934
|
else {
|
|
41934
|
-
filterBy.push({ key:
|
|
41935
|
+
filterBy.push({ key: fieldFilter, ope: operator, value: valueFilter ?? '' });
|
|
41935
41936
|
}
|
|
41936
41937
|
changeFilter([...filterBy]);
|
|
41937
41938
|
setOpenFilter(false);
|
|
@@ -41943,7 +41944,7 @@ const RenderFilterElement$1 = ({ filter, optionsFilter, formatSetting, filterBy,
|
|
|
41943
41944
|
}
|
|
41944
41945
|
}, children: [((!column.filterType && column.type === 'numeric') || column.filterType === 'numeric') ? jsxs(Fragment$1, { children: [RenderNumberFilter(), " "] }) : (column.filterType === 'select' ? jsxs(Fragment$1, { children: [RenderSelectFilter(), " "] }) : RenderStringFilter()), jsxs("div", { className: 'd-flex justify-content-end', children: [jsx(Button$1, { color: 'primary', style: { borderRadius: 3 }, className: 'me-50 py-25 px-50 fw-bold', onClick: handleSave, children: t('Filter') }), jsx(Button$1, { className: 'py-25 px-50 fw-bold', color: 'white', style: { borderRadius: 3, borderWidth: 0 }, onClick: () => {
|
|
41945
41946
|
if (filterBy) {
|
|
41946
|
-
changeFilter(filterBy.filter((x) => x.key !==
|
|
41947
|
+
changeFilter(filterBy.filter((x) => x.key !== fieldFilter));
|
|
41947
41948
|
}
|
|
41948
41949
|
setOpenFilter(false);
|
|
41949
41950
|
}, children: t('Clear') })] })] }));
|
|
@@ -65526,7 +65527,7 @@ const HeaderTableCol = (props) => {
|
|
|
65526
65527
|
orderBy.push({ direction: 'asc', key: col.field });
|
|
65527
65528
|
changeOrder(orderBy);
|
|
65528
65529
|
}
|
|
65529
|
-
}, className: classNames$1('r-headercell-div', { 'cursor-pointer': allowOrder }), children: [col.type === 'checkbox' && (jsx(Input$1, { checked: !!(totalCount > 0 && selectedRows?.length >= totalCount), type: "checkbox", className: classNames$1('cursor-pointer', { 'd-none': !isMulti }), style: { textAlign: col.textAlign ?? 'left', marginTop: 6 }, onChange: (e) => {
|
|
65530
|
+
}, className: classNames$1('r-headercell-div', { 'cursor-pointer': allowOrder }), children: [(col.type === 'checkbox' && !col.field) && (jsx(Input$1, { checked: !!(totalCount > 0 && selectedRows?.length >= totalCount), type: "checkbox", className: classNames$1('cursor-pointer', { 'd-none': !isMulti }), style: { textAlign: col.textAlign ?? 'left', marginTop: 6 }, onChange: (e) => {
|
|
65530
65531
|
if (selectEnable) {
|
|
65531
65532
|
if (e.target.checked) {
|
|
65532
65533
|
setSelectedRows(dataSource.map((item) => { return item; }));
|
|
@@ -65549,6 +65550,7 @@ const RenderFilterElement = ({ filter, optionsFilter, formatSetting, filterBy, s
|
|
|
65549
65550
|
const { t } = useTranslation();
|
|
65550
65551
|
const [operator, setOperator] = useState(filter?.ope ?? ((!column.filterType && column.type === 'numeric') || column.filterType === 'select' ? 'equal' : 'contains'));
|
|
65551
65552
|
const [valueFilter, setValueFilter] = useState(filter?.value ?? '');
|
|
65553
|
+
const fieldFilter = column.fieldFilter ?? column.field;
|
|
65552
65554
|
const RenderStringFilter = () => {
|
|
65553
65555
|
const options = [
|
|
65554
65556
|
{ label: 'Bắt đầu bởi', value: 'startswith' },
|
|
@@ -65592,7 +65594,7 @@ const RenderFilterElement = ({ filter, optionsFilter, formatSetting, filterBy, s
|
|
|
65592
65594
|
} })] }));
|
|
65593
65595
|
};
|
|
65594
65596
|
const RenderSelectFilter = () => {
|
|
65595
|
-
return (jsx("div", { className: 'mb-1', children: jsx(SelectTable, { value: optionsFilter ? optionsFilter[
|
|
65597
|
+
return (jsx("div", { className: 'mb-1', children: jsx(SelectTable, { value: optionsFilter ? optionsFilter[fieldFilter]?.find((x) => x.value === valueFilter) : undefined, options: (optionsFilter && optionsFilter[fieldFilter]) ?? [], isClearable: true, onChange: (val) => {
|
|
65596
65598
|
setValueFilter(val?.value);
|
|
65597
65599
|
}, placeholder: t('Select') }) }));
|
|
65598
65600
|
};
|
|
@@ -65602,19 +65604,21 @@ const RenderFilterElement = ({ filter, optionsFilter, formatSetting, filterBy, s
|
|
|
65602
65604
|
filter.value = valueFilter ?? '';
|
|
65603
65605
|
}
|
|
65604
65606
|
else {
|
|
65605
|
-
filterBy.push({ key:
|
|
65607
|
+
filterBy.push({ key: fieldFilter, ope: operator, value: valueFilter ?? '' });
|
|
65606
65608
|
}
|
|
65607
65609
|
changeFilter([...filterBy]);
|
|
65608
65610
|
setOpenFilter(false);
|
|
65609
65611
|
};
|
|
65610
65612
|
return (jsxs("div", { className: 'r-filter-popup', onKeyDown: (e) => {
|
|
65611
65613
|
if (e.code === 'Enter' || e.code === 'NumpadEnter') {
|
|
65612
|
-
|
|
65614
|
+
setTimeout(() => {
|
|
65615
|
+
handleSave();
|
|
65616
|
+
}, 100);
|
|
65613
65617
|
e.stopPropagation();
|
|
65614
65618
|
}
|
|
65615
65619
|
}, children: [((!column.filterType && column.type === 'numeric') || column.filterType === 'numeric') ? jsxs(Fragment$1, { children: [RenderNumberFilter(), " "] }) : (column.filterType === 'select' ? jsxs(Fragment$1, { children: [RenderSelectFilter(), " "] }) : RenderStringFilter()), jsxs("div", { className: 'd-flex justify-content-end', children: [jsx(Button$1, { color: 'primary', style: { borderRadius: 3 }, className: 'me-50 py-25 px-50 fw-bold', onClick: handleSave, children: t('Filter') }), jsx(Button$1, { className: 'py-25 px-50 fw-bold', outline: true, style: { borderRadius: 3 }, onClick: () => {
|
|
65616
65620
|
if (filterBy) {
|
|
65617
|
-
changeFilter(filterBy.filter((x) => x.key !==
|
|
65621
|
+
changeFilter(filterBy.filter((x) => x.key !== fieldFilter));
|
|
65618
65622
|
}
|
|
65619
65623
|
setOpenFilter(false);
|
|
65620
65624
|
}, children: t('Clear') })] })] }));
|
|
@@ -65703,20 +65707,20 @@ const RenderContentCol = (props) => {
|
|
|
65703
65707
|
}, children: RenderElement() }, `col-${indexRow}-${indexCol}`));
|
|
65704
65708
|
};
|
|
65705
65709
|
|
|
65706
|
-
const TableView = ({ idTable, dataSource, rowHeight = 33, height = 400, columns, isMutil = false, isLoading, selectEnable, formatSetting, commandClick, allowFilter, allowOrder, setColumns, pagingSetting, changeFilter, changeOrder, searchSetting, columnsAggregate, toolbarSetting, optionsFilter, selectedItem, setSelectedItem, handleSelect }) => {
|
|
65710
|
+
const TableView = ({ idTable, dataSource, rowHeight = 33, height = 400, columns, isMutil = false, isLoading, selectEnable, formatSetting, commandClick, allowFilter, allowOrder, setColumns, pagingSetting, changeFilter, changeOrder, searchSetting, columnsAggregate, toolbarSetting, optionsFilter, selectedItem, setSelectedItem, handleSelect, isVirtualList }) => {
|
|
65711
|
+
const { t } = useTranslation();
|
|
65707
65712
|
const gridRef = useRef(null);
|
|
65708
|
-
const [startIndex, setStartIndex] = useState(0);
|
|
65709
65713
|
const [selectedRows, setSelectedRows] = useState([]);
|
|
65710
65714
|
const [orderBy, setOrderBy] = useState([]);
|
|
65711
65715
|
const [filterBy, setFilterBy] = useState([]);
|
|
65712
65716
|
const [searchTerm, setSearchTerm] = useState('');
|
|
65713
|
-
const fieldKey = columns.find((item) => item.isPrimarykey === true)?.field ?? 'id';
|
|
65717
|
+
const fieldKey = (columns.find((item) => item.isPrimarykey === true)?.field) ?? 'id';
|
|
65718
|
+
const [startIndex, setStartIndex] = useState(0);
|
|
65714
65719
|
//trường liên quan đến virtul loading
|
|
65715
|
-
const visibleRowCount = Math.ceil(height / rowHeight) + 5;
|
|
65716
65720
|
const buffer = 10; // số dòng dự phòng phía trên và dưới
|
|
65717
|
-
const
|
|
65718
|
-
|
|
65719
|
-
const
|
|
65721
|
+
const visibleRowCount = Math.ceil(height / rowHeight) + 5;
|
|
65722
|
+
// Tính toán dữ liệu hiển thị dựa trên các điều kiện lọc, tìm kiếm và sắp xếp
|
|
65723
|
+
const viewData = useMemo(() => {
|
|
65720
65724
|
if (!dataSource || dataSource.length === 0) {
|
|
65721
65725
|
return [];
|
|
65722
65726
|
}
|
|
@@ -65781,19 +65785,42 @@ const TableView = ({ idTable, dataSource, rowHeight = 33, height = 400, columns,
|
|
|
65781
65785
|
return 0;
|
|
65782
65786
|
});
|
|
65783
65787
|
}
|
|
65788
|
+
return datas;
|
|
65789
|
+
}, [searchTerm, filterBy, orderBy, dataSource]);
|
|
65790
|
+
// Lấy dữ liệu hiển thị với phân trang
|
|
65791
|
+
const pagingData = useMemo(() => {
|
|
65792
|
+
if (!viewData || viewData.length === 0) {
|
|
65793
|
+
return [];
|
|
65794
|
+
}
|
|
65795
|
+
let datas = viewData;
|
|
65784
65796
|
if (pagingSetting?.allowPaging && pagingSetting?.currentPage && pagingSetting?.pageSize && pagingSetting.pagingClient) {
|
|
65785
65797
|
const start = (pagingSetting.currentPage - 1) * pagingSetting.pageSize;
|
|
65786
65798
|
const end = start + pagingSetting.pageSize;
|
|
65787
65799
|
datas = datas.slice(start, end);
|
|
65788
65800
|
}
|
|
65789
|
-
return datas
|
|
65790
|
-
}, [
|
|
65791
|
-
|
|
65801
|
+
return datas;
|
|
65802
|
+
}, [viewData, pagingSetting?.pageSize, pagingSetting?.currentPage]);
|
|
65803
|
+
// Tính toán chỉ số bắt đầu và kết thúc của dữ liệu hiển thị
|
|
65804
|
+
const { adjustedStartIndex, adjustedEndIndex } = useMemo(() => {
|
|
65805
|
+
if (!pagingData || pagingData.length === 0 || !isVirtualList) {
|
|
65806
|
+
return { adjustedStartIndex: 0, adjustedEndIndex: 0 };
|
|
65807
|
+
}
|
|
65808
|
+
return {
|
|
65809
|
+
adjustedStartIndex: Math.max(startIndex - buffer, 0),
|
|
65810
|
+
adjustedEndIndex: Math.min(startIndex + visibleRowCount + buffer, dataSource.length)
|
|
65811
|
+
};
|
|
65812
|
+
}, [startIndex, pagingData]);
|
|
65813
|
+
const visibleData = useMemo(() => {
|
|
65814
|
+
if (!pagingData || pagingData.length === 0) {
|
|
65815
|
+
return [];
|
|
65816
|
+
}
|
|
65817
|
+
return isVirtualList ? pagingData.slice(adjustedStartIndex, adjustedEndIndex) : pagingData;
|
|
65818
|
+
}, [pagingData]);
|
|
65792
65819
|
const { levels: headerColumns, flat: contentColumns, flatVisble, objWidthFixLeft, objWidthFixRight, lastObjWidthFixLeft, fisrtObjWidthFixRight } = useMemo(() => calculateTableStructure(columns), [columns]);
|
|
65793
65820
|
const scrollTimeoutRef = useRef(null);
|
|
65794
65821
|
const lastScrollTop = useRef(0);
|
|
65795
65822
|
const handleScroll = (e) => {
|
|
65796
|
-
if (!gridRef.current) {
|
|
65823
|
+
if (!gridRef.current || !isVirtualList) {
|
|
65797
65824
|
return;
|
|
65798
65825
|
}
|
|
65799
65826
|
// Nếu không có sự thay đổi về scrollTop => người dùng chỉ scroll ngang => không xử lý
|
|
@@ -65918,19 +65945,19 @@ const TableView = ({ idTable, dataSource, rowHeight = 33, height = 400, columns,
|
|
|
65918
65945
|
}, container: gridRef, totalCount: dataSource.length }, `header-${indexParent}-${indexColumn}`))) }, `header-${-indexParent}`))) }), jsxs("tbody", { className: 'r-gridcontent', role: "rowgroup", children: [adjustedStartIndex > 0 && (jsx("tr", { style: { height: adjustedStartIndex * rowHeight }, children: jsx("td", { style: { padding: 0 }, colSpan: flatVisble.length }) })), visibleData.map((row, index) => {
|
|
65919
65946
|
const indexRow = index + startIndex;
|
|
65920
65947
|
const isSelected = selectedRows?.some((x) => x[fieldKey] === row[fieldKey]);
|
|
65921
|
-
return (jsx("tr", { "aria-rowindex": indexRow + 1, role: "row", className: 'r-row', children: contentColumns.map((column, indexCol) => (jsx(RenderContentCol, { idTable: idTable, col: column, fieldKey:
|
|
65922
|
-
}),
|
|
65948
|
+
return (jsx("tr", { "aria-rowindex": indexRow + 1, role: "row", className: 'r-row', children: contentColumns.map((column, indexCol) => (jsx(RenderContentCol, { idTable: idTable, col: column, fieldKey: fieldKey, objWidthFixLeft: objWidthFixLeft, objWidthFixRight: objWidthFixRight, fisrtObjWidthFixRight: fisrtObjWidthFixRight, lastObjWidthFixLeft: lastObjWidthFixLeft, isMulti: isMutil ?? false, selectEnable: selectEnable ?? false, selectedRows: selectedRows, setSelectedRows: setSelectedRows, formatSetting: formatSetting, handleCommandClick: handleCommandClick, indexCol: indexCol, indexRow: indexRow, isSelected: isSelected, row: row }, indexCol))) }, `row-content-${indexRow}`));
|
|
65949
|
+
}), adjustedEndIndex > 0 && pagingData.length > adjustedEndIndex && (jsx("tr", { style: { height: (pagingData.length - adjustedEndIndex) * rowHeight }, children: jsx("td", { style: { padding: 0 }, colSpan: flatVisble.length }) }))] }), viewData.length > 0 && jsx("tfoot", { className: "r-gridfoot", children: (columnsAggregate?.length ?? 0) > 0 ? jsx("tr", { className: 'r-row', children: contentColumns.map((col, indexCol) => {
|
|
65923
65950
|
const item = columnsAggregate?.find((x) => x.field === col.field);
|
|
65924
65951
|
let sumValue = item?.value;
|
|
65925
65952
|
if (!item && col.haveSum === true && col.type === "numeric") {
|
|
65926
|
-
sumValue =
|
|
65953
|
+
sumValue = viewData.reduce(function (accumulator, currentValue) { return (Number(accumulator ?? 0) + Number(currentValue[col.field] ?? 0)); }, 0);
|
|
65927
65954
|
}
|
|
65928
65955
|
return col.visible !== false && jsx("td", { className: classNames$1(`p-0 px-50 r-footer fix-${col.fixedType}`, { 'cell-fixed': col.fixedType }), style: {
|
|
65929
65956
|
left: col.fixedType === 'left' ? objWidthFixLeft[indexCol] : undefined,
|
|
65930
65957
|
right: col.fixedType === 'right' ? objWidthFixRight[indexCol] : undefined,
|
|
65931
65958
|
textAlign: col.textAlign ? col.textAlign : 'left'
|
|
65932
65959
|
}, children: jsxs("div", { className: "r-footer-div", children: [(item || (col.haveSum === true && col.type === "numeric")) && col.type === "numeric" && (Number(sumValue) >= 0) && jsx(Fragment$1, { children: formartNumberic(sumValue, formatSetting?.decimalSeparator ?? ',', formatSetting?.thousandSeparator ?? '.', col.numericSettings?.fraction, true, false) }), (item || (col.haveSum === true && col.type === "numeric")) && col.type === "numeric" && (Number(sumValue) < 0) && jsxs("div", { style: { color: formatSetting?.colorNegative ?? 'red' }, children: [" ", `${formatSetting?.prefixNegative ?? '-'}${formartNumberic(sumValue, formatSetting?.decimalSeparator ?? ',', formatSetting?.thousandSeparator ?? '.', col.numericSettings?.fraction, true, false)}${formatSetting?.suffixNegative ?? ''}`] })] }) }, `summarycell-${indexCol}`);
|
|
65933
|
-
}) }) : jsx(Fragment$1, {}) })] }), (((
|
|
65960
|
+
}) }) : jsx(Fragment$1, {}) })] }), (((viewData.length ?? 0) === 0) && !isLoading) && jsxs("div", { className: "r-no-data", children: [jsx("svg", { width: "64", height: "41", viewBox: "0 0 64 41", xmlns: "http://www.w3.org/2000/svg", children: jsxs("g", { transform: "translate(0 1)", fill: "none", fillRule: "evenodd", children: [jsx("ellipse", { fill: "#f5f5f5", cx: "32", cy: "33", rx: "32", ry: "7" }), jsxs("g", { fillRule: "nonzero", stroke: "#d9d9d9", children: [jsx("path", { d: "M55 12.76L44.854 1.258C44.367.474 43.656 0 42.907 0H21.093c-.749 0-1.46.474-1.947 1.257L9 12.761V22h46v-9.24z" }), jsx("path", { d: "M41.613 15.931c0-1.605.994-2.93 2.227-2.931H55v18.137C55 33.26 53.68 35 52.05 35h-40.1C10.32 35 9 33.259 9 31.137V13h11.16c1.233 0 2.227 1.323 2.227 2.928v.022c0 1.605 1.005 2.901 2.237 2.901h14.752c1.232 0 2.237-1.308 2.237-2.913v-.007z", fill: "#fafafa" })] })] }) }), t('No data available.')] }), isLoading && jsx("div", { className: "r-loading-overlay", children: jsxs("div", { className: "r-loading", children: [jsx(Spinner$1, { className: "me-1" }), t('Loading...')] }) })] })] }), pagingSetting?.allowPaging ? jsx(PagingComponent, { onChangePage: onChangePage, pageSize: pagingSetting?.pageSize ?? 0, currentPage: pagingSetting?.currentPage ?? 0, pageOptions: pagingSetting?.pageOptions ?? [20, 30, 50, 100], totalItem: (pagingSetting?.pagingClient ? viewData.length : pagingSetting?.totalItem ?? 0), onChangePageSize: onChangePageSize }) : jsx(Fragment$1, {})] }));
|
|
65934
65961
|
};
|
|
65935
65962
|
|
|
65936
65963
|
export { ExportExcelComponent, FindNodeByPath, ImportExcelComponent, InputStyleComponent, SelectTable, SelectTableTree, TableView, TabsMenuComponent, Wizard, calculateTableStructure, checkDecimalSeparator, checkThousandSeparator, TableEdit as default, formartNumberic, formatDateTime, generateUUID, isNullOrUndefined$1 as isNullOrUndefined, messageBoxConfirm, messageBoxConfirm2, messageBoxConfirmDelete, messageBoxError, messageHtmlBoxConfirm, messageHtmlBoxError, notificationError, notificationSuccess, roundNumber, useOnClickOutside };
|