diff --git a/components/lib/datatable/BodyCell.js b/components/lib/datatable/BodyCell.js index 614d4c379c..0ce466d8be 100644 --- a/components/lib/datatable/BodyCell.js +++ b/components/lib/datatable/BodyCell.js @@ -691,14 +691,22 @@ export const RadioCheckCell = React.memo( RadioCheckCell.displayName = 'RadioCheckCell'; +const defaultKeysToCompare = ['rowData', 'field', 'allowCellSelection', 'isCellSelected', 'editMode', 'index', 'tabIndex', 'editing', 'expanded', 'editingMeta', 'frozenCol', 'alignFrozenCol']; + export const BodyCell = React.memo( (props) => { return ; }, (prevProps, nextProps) => { - const keysToCompare = ['field', 'allowCellSelection', 'isCellSelected', 'editMode', 'index', 'tabIndex', 'editing', 'expanded', 'editingMeta', 'rowData', 'frozenCol', 'alignFrozenCol']; + if (nextProps.cellMemo === false) return false; - return ObjectUtils.selectiveCompare(prevProps, nextProps, keysToCompare); + const memoProps = nextProps.cellMemoProps; + const keysToCompare = Array.isArray(memoProps) && memoProps.every((prop) => typeof prop === 'string') ? memoProps : defaultKeysToCompare; + + const memoPropsDepth = nextProps.cellMemoPropsDepth; + const depth = typeof memoPropsDepth === 'number' && memoPropsDepth > 0 ? memoPropsDepth : 1; + + return ObjectUtils.selectiveCompare(prevProps, nextProps, keysToCompare, depth); } ); diff --git a/components/lib/datatable/BodyRow.js b/components/lib/datatable/BodyRow.js index 4affae1ac4..cbe875defb 100644 --- a/components/lib/datatable/BodyRow.js +++ b/components/lib/datatable/BodyRow.js @@ -605,6 +605,9 @@ export const BodyRow = React.memo((props) => { const cellProps = mergeProps({ hostName: props.hostName, allowCellSelection: props.allowCellSelection, + cellMemo: props.cellMemo, + cellMemoProps: props.cellMemoProps, + cellMemoPropsDepth: props.cellMemoPropsDepth, cellClassName: props.cellClassName, checkIcon: props.checkIcon, collapsedRowIcon: props.collapsedRowIcon, diff --git a/components/lib/datatable/DataTable.js b/components/lib/datatable/DataTable.js index c8aa4b56f8..18c87f2873 100644 --- a/components/lib/datatable/DataTable.js +++ b/components/lib/datatable/DataTable.js @@ -1688,6 +1688,9 @@ export const DataTable = React.forwardRef((inProps, ref) => { { extends Omit