You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

235 lines
6.3 KiB

import React from 'react';
import Search from './search';
9 years ago
import classNames from 'classnames';
import Animate from 'rc-animate';
import PureRenderMixin from 'rc-util/lib/PureRenderMixin';
import assign from 'object-assign';
import { TransferItem } from './index';
import Item from './item';
9 years ago
9 years ago
function noop() {
}
9 years ago
export interface TransferListProps {
prefixCls: string;
dataSource: TransferItem[];
filter?: string;
showSearch?: boolean;
searchPlaceholder?: string;
titleText?: string;
style?: React.CSSProperties;
handleFilter: (e: any) => void;
handleSelect: (selectedItem: any, checked: boolean) => void;
handleSelectAll: (dataSource: any[], checkAll: boolean) => void;
handleClear: () => void;
8 years ago
render?: (item: any) => any;
body?: (props: any) => any;
footer?: (props: any) => void;
checkedKeys: string[];
checkStatus?: boolean;
position?: string;
notFoundContent?: React.ReactNode | string;
filterOption: (filterText: any, item: any) => boolean;
lazy?: {};
}
export interface TransferListContext {
antLocale?: {
Transfer?: any,
};
}
export default class TransferList extends React.Component<TransferListProps, any> {
static defaultProps = {
dataSource: [],
titleText: '',
showSearch: false,
render: noop,
};
static contextTypes = {
antLocale: React.PropTypes.object,
};
9 years ago
context: TransferListContext;
timer: number;
9 years ago
constructor(props) {
super(props);
this.state = {
mounted: false,
};
}
componentDidMount() {
this.timer = setTimeout(() => {
this.setState({
mounted: true,
});
}, 0);
9 years ago
}
componentWillUnmount() {
clearTimeout(this.timer);
}
shouldComponentUpdate(...args) {
return PureRenderMixin.shouldComponentUpdate.apply(this, args);
}
getCheckStatus(filteredDataSource) {
const { checkedKeys } = this.props;
if (checkedKeys.length === 0) {
return 'none';
} else if (filteredDataSource.every(item => checkedKeys.indexOf(item.key) >= 0)) {
return 'all';
}
return 'part';
9 years ago
}
handleSelect = (selectedItem) => {
9 years ago
const { checkedKeys } = this.props;
const result = checkedKeys.some((key) => key === selectedItem.key);
this.props.handleSelect(selectedItem, !result);
9 years ago
}
handleFilter = (e) => {
this.props.handleFilter(e);
}
handleClear = () => {
9 years ago
this.props.handleClear();
}
renderCheckbox({ prefixCls, filteredDataSource, checked, checkPart, disabled, checkable }) {
const checkAll = (!checkPart) && checked;
9 years ago
const checkboxCls = classNames({
9 years ago
[`${prefixCls}-checkbox`]: true,
[`${prefixCls}-checkbox-indeterminate`]: checkPart,
[`${prefixCls}-checkbox-checked`]: checkAll,
[`${prefixCls}-checkbox-disabled`]: disabled,
9 years ago
});
return (
<span
ref="checkbox"
className={checkboxCls}
onClick={() => this.props.handleSelectAll(filteredDataSource, checkAll)}
>