From f440ac95e8b5b3aaad43e3b4fba4657b4849eaad Mon Sep 17 00:00:00 2001 From: Andrey Goder Date: Fri, 7 Aug 2026 11:41:44 -0700 Subject: [PATCH] Fix Table row updates for removed fields --- src/components/Table/Table.test.tsx | 33 +++++++++++++++++++++++++++++ src/components/Table/Table.tsx | 9 ++------ 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/src/components/Table/Table.test.tsx b/src/components/Table/Table.test.tsx index 0881055..4f4330a 100644 --- a/src/components/Table/Table.test.tsx +++ b/src/components/Table/Table.test.tsx @@ -161,6 +161,39 @@ describe('Table', () => { expect(screen.getByRole('cell', {name: 'Bob'})).toBeInTheDocument(); }); + it('clears a cell when its field is removed from the row', () => { + interface OptionalRoleRow extends Record { + id: string; + name: string; + role?: string; + } + + const optionalRoleColumns: TableColumn[] = [ + {key: 'name', header: 'Name'}, + {key: 'role', header: 'Role'}, + ]; + const {rerender} = render( + , + ); + + expect(screen.getByRole('cell', {name: 'Admin'})).toBeInTheDocument(); + + rerender( +
, + ); + + const dataRow = screen.getAllByRole('row')[1]; + expect(within(dataRow).getAllByRole('cell')[1]).toBeEmptyDOMElement(); + }); + it('applies visual context props through row and cell classes', () => { const {rerender} = render(
>( return false; } - if (previous.item === next.item) { - return true; - } - - return Object.keys(next.item).every( - key => previous.item[key] === next.item[key], - ); + return shallowEqual(previous.item, next.item); } const MemoizedDataRow = memo(DataRowInner, areRowPropsEqual) as <