ant-design/components/transfer/renderListBody.tsx
vagusX eac30ec8e4 Feat/remove deprecated (#17510)
* feat: remove warnings for linkRender, nameRender in Breadcrumb

* feat: remove warnings for onOpen, onClose in Menu

* feat: remove warnings for overlay in Popover

* feat: remove warnings for columnsPageRange, columnsPageSize in Table

* feat: remove warnings for afterClose in Tag

* feat: remove warnings for notFoundContent, searchPlaceholder, body, onSearchChange in Transfer

* fix: types in Transfer

* feat: update test cases in Transfer

* feat: add additional test cases for removed deprecated apis
2019-07-09 11:46:21 +08:00

78 lines
2.2 KiB
TypeScript

import * as React from 'react';
import Animate from 'rc-animate';
import raf from '../_util/raf';
import { Omit, tuple } from '../_util/type';
import { TransferItem } from '.';
import { TransferListProps, RenderedItem } from './list';
import ListItem from './ListItem';
export const OmitProps = tuple('handleFilter', 'handleClear', 'checkedKeys');
export type OmitProp = (typeof OmitProps)[number];
type PartialTransferListProps = Omit<TransferListProps, OmitProp>;
export interface TransferListBodyProps extends PartialTransferListProps {
filteredItems: TransferItem[];
filteredRenderItems: RenderedItem[];
selectedKeys: string[];
}
class ListBody extends React.Component<TransferListBodyProps> {
state = {
mounted: false,
};
private mountId: number;
componentDidMount() {
this.mountId = raf(() => {
this.setState({ mounted: true });
});
}
componentWillUnmount() {
raf.cancel(this.mountId);
}
onItemSelect = (item: TransferItem) => {
const { onItemSelect, selectedKeys } = this.props;
const checked = selectedKeys.indexOf(item.key) >= 0;
onItemSelect(item.key, !checked);
};
render() {
const { mounted } = this.state;
const { prefixCls, onScroll, filteredRenderItems, lazy, selectedKeys } = this.props;
return (
<Animate
component="ul"
componentProps={{ onScroll }}
className={`${prefixCls}-content`}
transitionName={mounted ? `${prefixCls}-content-item-highlight` : ''}
transitionLeave={false}
>
{filteredRenderItems.map(({ renderedEl, renderedText, item }: RenderedItem) => {
const { disabled } = item;
const checked = selectedKeys.indexOf(item.key) >= 0;
return (
<ListItem
disabled={disabled}
key={item.key}
item={item}
lazy={lazy}
renderedText={renderedText}
renderedEl={renderedEl}
checked={checked}
prefixCls={prefixCls}
onClick={this.onItemSelect}
/>
);
})}
</Animate>
);
}
}
export default (props: TransferListBodyProps) => <ListBody {...props} />;