Skip to content

Commit

Permalink
fix: Table selection cache (#24338)
Browse files Browse the repository at this point in the history
* test driven

* fix logic
  • Loading branch information
zombieJ committed May 21, 2020
1 parent e613861 commit 0689982
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 3 deletions.
24 changes: 24 additions & 0 deletions components/table/__tests__/Table.rowSelection.test.js
Expand Up @@ -797,4 +797,28 @@ describe('Table.rowSelection', () => {
.simulate('change', { target: { checked: true } });
expect(onChange.mock.calls[0][1]).toEqual([expect.objectContaining({ name: 'bamboo' })]);
});

it('do not cache selected keys', () => {
const onChange = jest.fn();
const wrapper = mount(
<Table
dataSource={[{ name: 'light' }, { name: 'bamboo' }]}
rowSelection={{ onChange }}
rowKey="name"
/>,
);

wrapper
.find('tbody input')
.first()
.simulate('change', { target: { checked: true } });
expect(onChange).toHaveBeenCalledWith(['light'], [{ name: 'light' }]);

wrapper.setProps({ dataSource: [{ name: 'bamboo' }] });
wrapper
.find('tbody input')
.first()
.simulate('change', { target: { checked: true } });
expect(onChange).toHaveBeenCalledWith(['bamboo'], [{ name: 'bamboo' }]);
});
});
15 changes: 12 additions & 3 deletions components/table/hooks/useSelection.tsx
Expand Up @@ -117,12 +117,21 @@ export default function useSelection<RecordType>(

const setSelectedKeys = React.useCallback(
(keys: Key[]) => {
setInnerSelectedKeys(keys);
const availableKeys: Key[] = [];
const records: RecordType[] = [];

keys.forEach(key => {
const record = getRecordByKey(key);
if (record !== undefined) {
availableKeys.push(key);
records.push(record);
}
});

const records = keys.map(key => getRecordByKey(key));
setInnerSelectedKeys(availableKeys);

if (onSelectionChange) {
onSelectionChange(keys, records);
onSelectionChange(availableKeys, records);
}
},
[setInnerSelectedKeys, getRecordByKey, onSelectionChange],
Expand Down

0 comments on commit 0689982

Please sign in to comment.