mirror of
https://github.com/ant-design/ant-design.git
synced 2024-11-24 11:10:01 +08:00
fix: Transfer selectInvert should be corrected (#47125)
This commit is contained in:
parent
30a4143afc
commit
079d8c92a3
@ -1,6 +1,7 @@
|
||||
/* eslint no-use-before-define: "off" */
|
||||
import React from 'react';
|
||||
import { act } from 'react-dom/test-utils';
|
||||
|
||||
import Transfer from '..';
|
||||
import { fireEvent, render } from '../../../tests/utils';
|
||||
|
||||
@ -87,30 +88,43 @@ describe('Transfer.Dropdown', () => {
|
||||
});
|
||||
|
||||
describe('select invert', () => {
|
||||
[
|
||||
{ name: 'with pagination', props: listProps, index: 2, keys: ['c', 'd'] },
|
||||
{
|
||||
name: 'without pagination',
|
||||
props: { ...listProps, pagination: null as any },
|
||||
index: 1,
|
||||
keys: ['c', 'd', 'e'],
|
||||
},
|
||||
].forEach(({ name, props, index, keys }) => {
|
||||
it(name, () => {
|
||||
jest.useFakeTimers();
|
||||
it('with pagination', () => {
|
||||
jest.useFakeTimers();
|
||||
|
||||
const onSelectChange = jest.fn();
|
||||
const { container } = render(<Transfer {...props} onSelectChange={onSelectChange} />);
|
||||
fireEvent.mouseEnter(container.querySelector('.ant-transfer-list-header-dropdown')!);
|
||||
act(() => {
|
||||
jest.runAllTimers();
|
||||
});
|
||||
|
||||
clickItem(container, index);
|
||||
expect(onSelectChange).toHaveBeenCalledWith(keys, []);
|
||||
|
||||
jest.useRealTimers();
|
||||
const onSelectChange = jest.fn();
|
||||
const { container } = render(
|
||||
<Transfer {...listProps} selectedKeys={undefined} onSelectChange={onSelectChange} />,
|
||||
);
|
||||
fireEvent.mouseEnter(container.querySelector('.ant-transfer-list-header-dropdown')!);
|
||||
act(() => {
|
||||
jest.runAllTimers();
|
||||
});
|
||||
|
||||
clickItem(container, 0);
|
||||
expect(onSelectChange).toHaveBeenCalledWith(['b', 'c', 'd', 'e'], []);
|
||||
|
||||
clickItem(container, 2);
|
||||
expect(onSelectChange).toHaveBeenCalledWith(['b', 'c', 'd'], []);
|
||||
|
||||
jest.useRealTimers();
|
||||
});
|
||||
|
||||
it('without pagination', () => {
|
||||
jest.useFakeTimers();
|
||||
|
||||
const onSelectChange = jest.fn();
|
||||
const { container } = render(
|
||||
<Transfer {...listProps} pagination={null as any} onSelectChange={onSelectChange} />,
|
||||
);
|
||||
fireEvent.mouseEnter(container.querySelector('.ant-transfer-list-header-dropdown')!);
|
||||
act(() => {
|
||||
jest.runAllTimers();
|
||||
});
|
||||
|
||||
clickItem(container, 1);
|
||||
expect(onSelectChange).toHaveBeenCalledWith(['c', 'd', 'e'], []);
|
||||
|
||||
jest.useRealTimers();
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -343,22 +343,19 @@ const TransferList = <RecordType extends KeyWiseTransferItem>(
|
||||
key: 'selectInvert',
|
||||
label: selectInvert,
|
||||
onClick() {
|
||||
const availableKeys = getEnabledItemKeys(
|
||||
pagination
|
||||
? (listBodyRef.current?.items || []).map((entity) => entity.item)
|
||||
: filteredItems,
|
||||
const availablePageItemKeys = getEnabledItemKeys(
|
||||
(listBodyRef.current?.items || []).map((entity) => entity.item),
|
||||
);
|
||||
const checkedKeySet = new Set<string>(checkedKeys);
|
||||
const newCheckedKeys: string[] = [];
|
||||
const newUnCheckedKeys: string[] = [];
|
||||
availableKeys.forEach((key) => {
|
||||
const checkedKeySet = new Set(checkedKeys);
|
||||
const newCheckedKeysSet = new Set(checkedKeySet);
|
||||
availablePageItemKeys.forEach((key) => {
|
||||
if (checkedKeySet.has(key)) {
|
||||
newUnCheckedKeys.push(key);
|
||||
newCheckedKeysSet.delete(key);
|
||||
} else {
|
||||
newCheckedKeys.push(key);
|
||||
newCheckedKeysSet.add(key);
|
||||
}
|
||||
});
|
||||
onItemSelectAll?.(newCheckedKeys, 'replace');
|
||||
onItemSelectAll?.(Array.from(newCheckedKeysSet), 'replace');
|
||||
},
|
||||
},
|
||||
];
|
||||
|
Loading…
Reference in New Issue
Block a user