Skip to content

Commit eefcc72

Browse files
authored
added frozenEditingMetaState for DataTable (#7785)
1 parent 57c0093 commit eefcc72

File tree

1 file changed

+31
-2
lines changed

1 file changed

+31
-2
lines changed

components/lib/datatable/DataTable.js

+31-2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ export const DataTable = React.forwardRef((inProps, ref) => {
2828
const [columnOrderState, setColumnOrderState] = React.useState([]);
2929
const [groupRowsSortMetaState, setGroupRowsSortMetaState] = React.useState(null);
3030
const [editingMetaState, setEditingMetaState] = React.useState({});
31+
const [frozenEditingMetaState, setFrozenEditingMetaState] = React.useState({});
3132
const [d_rowsState, setD_rowsState] = React.useState(props.rows);
3233
const [d_filtersState, setD_filtersState] = React.useState({});
3334
const metaData = {
@@ -42,6 +43,7 @@ export const DataTable = React.forwardRef((inProps, ref) => {
4243
columnOrder: columnOrderState,
4344
groupRowsSortMeta: groupRowsSortMetaState,
4445
editingMeta: editingMetaState,
46+
frozenEditingMeta: frozenEditingMetaState,
4547
d_rows: d_rowsState,
4648
d_filters: d_filtersState
4749
},
@@ -506,6 +508,29 @@ export const DataTable = React.forwardRef((inProps, ref) => {
506508
}
507509
};
508510

511+
const onFrozenEditingMetaChange = (e) => {
512+
const { rowData, field, editingKey, editing } = e;
513+
let frozenEditingMeta = { ...frozenEditingMetaState };
514+
let meta = frozenEditingMeta[editingKey];
515+
516+
if (editing) {
517+
!meta && (meta = frozenEditingMeta[editingKey] = { data: { ...rowData }, fields: [] });
518+
meta.fields.push(field);
519+
} else if (meta) {
520+
const fields = meta.fields.filter((f) => f !== field);
521+
522+
!fields.length ? delete frozenEditingMeta[editingKey] : (meta.fields = fields);
523+
}
524+
525+
setFrozenEditingMetaState(frozenEditingMeta);
526+
};
527+
528+
const clearFrozenEditingMetaData = () => {
529+
if (props.editMode && ObjectUtils.isNotEmpty(frozenEditingMetaState)) {
530+
setFrozenEditingMetaState({});
531+
}
532+
};
533+
509534
const onColumnResizeStart = (e) => {
510535
createBeforeResizeStyleElement();
511536
const { originalEvent: event, column } = e;
@@ -878,6 +903,7 @@ export const DataTable = React.forwardRef((inProps, ref) => {
878903

879904
const onPageChange = (e) => {
880905
clearEditingMetaData();
906+
clearFrozenEditingMetaData();
881907

882908
if (props.onPage) {
883909
props.onPage(createEvent(e));
@@ -893,6 +919,7 @@ export const DataTable = React.forwardRef((inProps, ref) => {
893919

894920
const onSortChange = (e) => {
895921
clearEditingMetaData();
922+
clearFrozenEditingMetaData();
896923

897924
const { originalEvent: event, column, sortableDisabledFields } = e;
898925
let sortField = getColumnProp(column, 'sortField') || getColumnProp(column, 'field');
@@ -1072,6 +1099,7 @@ export const DataTable = React.forwardRef((inProps, ref) => {
10721099

10731100
const onFilterChange = (filters) => {
10741101
clearEditingMetaData();
1102+
clearFrozenEditingMetaData();
10751103

10761104
setD_filtersState(filters);
10771105
};
@@ -1269,6 +1297,7 @@ export const DataTable = React.forwardRef((inProps, ref) => {
12691297
setD_filtersState(cloneFilters(props.filters));
12701298
setGroupRowsSortMetaState(null);
12711299
setEditingMetaState({});
1300+
setFrozenEditingMetaState({});
12721301

12731302
if (!props.onPage) {
12741303
setFirstState(props.first);
@@ -1661,7 +1690,7 @@ export const DataTable = React.forwardRef((inProps, ref) => {
16611690
dataKey={props.dataKey}
16621691
dragSelection={props.dragSelection}
16631692
editMode={props.editMode}
1664-
editingMeta={editingMetaState}
1693+
editingMeta={frozenEditingMetaState}
16651694
editingRows={props.editingRows}
16661695
emptyMessage={props.emptyMessage}
16671696
expandableRowGroups={props.expandableRowGroups}
@@ -1680,7 +1709,7 @@ export const DataTable = React.forwardRef((inProps, ref) => {
16801709
onCellUnselect={props.onCellUnselect}
16811710
onContextMenu={props.onContextMenu}
16821711
onContextMenuSelectionChange={props.onContextMenuSelectionChange}
1683-
onEditingMetaChange={onEditingMetaChange}
1712+
onEditingMetaChange={onFrozenEditingMetaChange}
16841713
onRowClick={props.onRowClick}
16851714
onRowCollapse={props.onRowCollapse}
16861715
onRowDoubleClick={props.onRowDoubleClick}

0 commit comments

Comments
 (0)