@@ -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