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/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[column.field]?.find((x) => x.value === valueFilter) : undefined, options: (optionsFilter && optionsFilter[column.field]) ?? [], isClearable: true, onChange: (val) => {
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: column.field, ope: operator, value: valueFilter ?? '' });
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 !== column.field));
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[column.field]?.find((x) => x.value === valueFilter) : undefined, options: (optionsFilter && optionsFilter[column.field]) ?? [], isClearable: true, onChange: (val) => {
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: column.field, ope: operator, value: valueFilter ?? '' });
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
- handleSave();
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 !== column.field));
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 adjustedStartIndex = Math.max(startIndex - buffer, 0);
65718
- const adjustedEndIndex = Math.min(startIndex + visibleRowCount + buffer, dataSource.length);
65719
- const visibleData = useMemo(() => {
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.slice(adjustedStartIndex, adjustedEndIndex);
65790
- }, [searchTerm, filterBy]);
65791
- const { t } = useTranslation();
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: 'field', 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}`));
65922
- }), dataSource.length > adjustedEndIndex && (jsx("tr", { style: { height: (dataSource.length - adjustedEndIndex) * rowHeight }, children: jsx("td", { style: { padding: 0 }, colSpan: flatVisble.length }) }))] }), dataSource.length > 0 && jsx("tfoot", { className: "r-gridfoot", children: (columnsAggregate?.length ?? 0) > 0 ? jsx("tr", { className: 'r-row', children: contentColumns.map((col, indexCol) => {
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 = dataSource.reduce(function (accumulator, currentValue) { return (Number(accumulator ?? 0) + Number(currentValue[col.field] ?? 0)); }, 0);
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, {}) })] }), (((dataSource.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?.totalItem ?? 0), onChangePageSize: onChangePageSize }) : 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 };