mirror of
https://gitee.com/ant-design/ant-design.git
synced 2024-12-04 21:18: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" */
|
/* eslint no-use-before-define: "off" */
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { act } from 'react-dom/test-utils';
|
import { act } from 'react-dom/test-utils';
|
||||||
|
|
||||||
import Transfer from '..';
|
import Transfer from '..';
|
||||||
import { fireEvent, render } from '../../../tests/utils';
|
import { fireEvent, render } from '../../../tests/utils';
|
||||||
|
|
||||||
@ -87,30 +88,43 @@ describe('Transfer.Dropdown', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('select invert', () => {
|
describe('select invert', () => {
|
||||||
[
|
it('with pagination', () => {
|
||||||
{ name: 'with pagination', props: listProps, index: 2, keys: ['c', 'd'] },
|
jest.useFakeTimers();
|
||||||
{
|
|
||||||
name: 'without pagination',
|
|
||||||
props: { ...listProps, pagination: null as any },
|
|
||||||
index: 1,
|
|
||||||
keys: ['c', 'd', 'e'],
|
|
||||||
},
|
|
||||||
].forEach(({ name, props, index, keys }) => {
|
|
||||||
it(name, () => {
|
|
||||||
jest.useFakeTimers();
|
|
||||||
|
|
||||||
const onSelectChange = jest.fn();
|
const onSelectChange = jest.fn();
|
||||||
const { container } = render(<Transfer {...props} onSelectChange={onSelectChange} />);
|
const { container } = render(
|
||||||
fireEvent.mouseEnter(container.querySelector('.ant-transfer-list-header-dropdown')!);
|
<Transfer {...listProps} selectedKeys={undefined} onSelectChange={onSelectChange} />,
|
||||||
act(() => {
|
);
|
||||||
jest.runAllTimers();
|
fireEvent.mouseEnter(container.querySelector('.ant-transfer-list-header-dropdown')!);
|
||||||
});
|
act(() => {
|
||||||
|
jest.runAllTimers();
|
||||||
clickItem(container, index);
|
|
||||||
expect(onSelectChange).toHaveBeenCalledWith(keys, []);
|
|
||||||
|
|
||||||
jest.useRealTimers();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
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',
|
key: 'selectInvert',
|
||||||
label: selectInvert,
|
label: selectInvert,
|
||||||
onClick() {
|
onClick() {
|
||||||
const availableKeys = getEnabledItemKeys(
|
const availablePageItemKeys = getEnabledItemKeys(
|
||||||
pagination
|
(listBodyRef.current?.items || []).map((entity) => entity.item),
|
||||||
? (listBodyRef.current?.items || []).map((entity) => entity.item)
|
|
||||||
: filteredItems,
|
|
||||||
);
|
);
|
||||||
const checkedKeySet = new Set<string>(checkedKeys);
|
const checkedKeySet = new Set(checkedKeys);
|
||||||
const newCheckedKeys: string[] = [];
|
const newCheckedKeysSet = new Set(checkedKeySet);
|
||||||
const newUnCheckedKeys: string[] = [];
|
availablePageItemKeys.forEach((key) => {
|
||||||
availableKeys.forEach((key) => {
|
|
||||||
if (checkedKeySet.has(key)) {
|
if (checkedKeySet.has(key)) {
|
||||||
newUnCheckedKeys.push(key);
|
newCheckedKeysSet.delete(key);
|
||||||
} else {
|
} else {
|
||||||
newCheckedKeys.push(key);
|
newCheckedKeysSet.add(key);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
onItemSelectAll?.(newCheckedKeys, 'replace');
|
onItemSelectAll?.(Array.from(newCheckedKeysSet), 'replace');
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
Loading…
Reference in New Issue
Block a user