Skip to content

Commit 9b03f7a

Browse files
chore(transfer): code style optimization (ant-design#56993)
* fix(Transfer): improve RTL support and type safety for item selection * chore: adj --------- Co-authored-by: thinkasany <480968828@qq.com>
1 parent 852ed68 commit 9b03f7a

1 file changed

Lines changed: 24 additions & 23 deletions

File tree

components/transfer/index.tsx

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@ const Transfer = <RecordType extends TransferItem = TransferItem>(
229229
const [hashId, cssVarCls] = useStyle(prefixCls);
230230

231231
const mergedActions = actions || operations || [];
232+
const isRtl = dir === 'rtl';
232233

233234
// Fill record with `key`
234235
const [mergedDataSource, leftDataSource, rightDataSource] = useData(
@@ -334,7 +335,7 @@ const Transfer = <RecordType extends TransferItem = TransferItem>(
334335

335336
const onItemSelectAll = (
336337
direction: TransferDirection,
337-
keys: string[],
338+
keys: TransferKey[],
338339
checkAll: boolean | 'replace',
339340
) => {
340341
setStateKeys(direction, (prevKeys) => {
@@ -355,13 +356,15 @@ const Transfer = <RecordType extends TransferItem = TransferItem>(
355356
setPrevSelectedIndex(direction, null);
356357
};
357358

358-
const onLeftItemSelectAll = (keys: string[], checkAll: boolean) => {
359-
onItemSelectAll('left', keys, checkAll);
360-
};
359+
const onLeftItemSelectAll: TransferListProps<KeyWise<RecordType>>['onItemSelectAll'] = (
360+
keys,
361+
checkAll,
362+
) => onItemSelectAll('left', keys, checkAll);
361363

362-
const onRightItemSelectAll = (keys: string[], checkAll: boolean) => {
363-
onItemSelectAll('right', keys, checkAll);
364-
};
364+
const onRightItemSelectAll: TransferListProps<KeyWise<RecordType>>['onItemSelectAll'] = (
365+
keys,
366+
checkAll,
367+
) => onItemSelectAll('right', keys, checkAll);
365368

366369
const leftFilter = (e: ChangeEvent<HTMLInputElement>) => onSearch?.('left', e.target.value);
367370

@@ -407,15 +410,15 @@ const Transfer = <RecordType extends TransferItem = TransferItem>(
407410
multiple?: boolean,
408411
) => {
409412
const isLeftDirection = direction === 'left';
410-
const holder = [...(isLeftDirection ? sourceSelectedKeys : targetSelectedKeys)];
413+
const holder = isLeftDirection ? sourceSelectedKeys : targetSelectedKeys;
411414
const holderSet = new Set(holder);
412-
const data = [...(isLeftDirection ? leftDataSource : rightDataSource)].filter(
413-
(item) => !item?.disabled,
415+
const data: KeyWise<RecordType>[] = (isLeftDirection ? leftDataSource : rightDataSource).filter(
416+
(item): item is KeyWise<RecordType> => !item.disabled,
414417
);
415418
const currentSelectedIndex = data.findIndex((item) => item.key === selectedKey);
416419
// multiple select by hold down the shift key
417420
if (multiple && holder.length > 0) {
418-
handleMultipleSelect(direction, data as any, holderSet, currentSelectedIndex);
421+
handleMultipleSelect(direction, data, holderSet, currentSelectedIndex);
419422
} else {
420423
handleSingleSelect(direction, holderSet, selectedKey, checked, currentSelectedIndex);
421424
}
@@ -434,13 +437,11 @@ const Transfer = <RecordType extends TransferItem = TransferItem>(
434437
onItemSelect('left', selectedKey, checked, e?.shiftKey);
435438
};
436439

437-
const onRightItemSelect = (
438-
selectedKey: TransferKey,
439-
checked: boolean,
440-
e?: React.MouseEvent<Element, MouseEvent>,
441-
) => {
442-
onItemSelect('right', selectedKey, checked, e?.shiftKey);
443-
};
440+
const onRightItemSelect: TransferListProps<KeyWise<RecordType>>['onItemSelect'] = (
441+
selectedKey,
442+
checked,
443+
e,
444+
) => onItemSelect('right', selectedKey, checked, e?.shiftKey);
444445

445446
const onRightItemRemove = (keys: TransferKey[]) => {
446447
setStateKeys('right', []);
@@ -493,7 +494,7 @@ const Transfer = <RecordType extends TransferItem = TransferItem>(
493494
{
494495
[`${prefixCls}-disabled`]: mergedDisabled,
495496
[`${prefixCls}-customize-list`]: !!children,
496-
[`${prefixCls}-rtl`]: dir === 'rtl',
497+
[`${prefixCls}-rtl`]: isRtl,
497498
},
498499
getStatusClassNames(prefixCls, mergedStatus, hasFeedback),
499500
contextClassName,
@@ -543,14 +544,14 @@ const Transfer = <RecordType extends TransferItem = TransferItem>(
543544
handleFilter={leftFilter}
544545
handleClear={handleLeftClear}
545546
onItemSelect={onLeftItemSelect}
546-
onItemSelectAll={onLeftItemSelectAll as any}
547+
onItemSelectAll={onLeftItemSelectAll}
547548
render={render}
548549
showSearch={showSearch}
549550
renderList={children as any}
550551
footer={footer as any}
551552
onScroll={handleLeftScroll}
552553
disabled={mergedDisabled}
553-
direction={dir === 'rtl' ? 'right' : 'left'}
554+
direction={isRtl ? 'right' : 'left'}
554555
showSelectAll={showSelectAll}
555556
selectAllLabel={selectAllLabels[0]}
556557
pagination={mergedPagination}
@@ -584,15 +585,15 @@ const Transfer = <RecordType extends TransferItem = TransferItem>(
584585
handleFilter={rightFilter}
585586
handleClear={handleRightClear}
586587
onItemSelect={onRightItemSelect}
587-
onItemSelectAll={onRightItemSelectAll as any}
588+
onItemSelectAll={onRightItemSelectAll}
588589
onItemRemove={onRightItemRemove}
589590
render={render}
590591
showSearch={showSearch}
591592
renderList={children as any}
592593
footer={footer as any}
593594
onScroll={handleRightScroll}
594595
disabled={mergedDisabled}
595-
direction={dir === 'rtl' ? 'left' : 'right'}
596+
direction={isRtl ? 'left' : 'right'}
596597
showSelectAll={showSelectAll}
597598
selectAllLabel={selectAllLabels[1]}
598599
showRemove={oneWay}

0 commit comments

Comments
 (0)