|
|
|
import * as React from 'react';
|
|
|
|
import * as PropTypes from 'prop-types';
|
|
|
|
import classNames from 'classnames';
|
|
|
|
import List, { TransferListProps } from './list';
|
|
|
|
import Operation from './operation';
|
|
|
|
import Search from './search';
|
|
|
|
import warning from '../_util/warning';
|
|
|
|
import LocaleReceiver from '../locale-provider/LocaleReceiver';
|
|
|
|
import defaultLocale from '../locale-provider/default';
|
|
|
|
import { ConfigConsumer, ConfigConsumerProps } from '../config-provider';
|
|
|
|
|
|
|
|
export { TransferListProps } from './list';
|
|
|
|
export { TransferOperationProps } from './operation';
|
|
|
|
export { TransferSearchProps } from './search';
|
|
|
|
|
|
|
|
function noop() {
|
|
|
|
}
|
|
|
|
|
|
|
|
export type TransferDirection = 'left' | 'right';
|
|
|
|
|
|
|
|
export interface TransferItem {
|
|
|
|
key: string;
|
|
|
|
title: string;
|
|
|
|
description?: string;
|
|
|
|
disabled?: boolean;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface TransferProps {
|
|
|
|
prefixCls?: string;
|
|
|
|
className?: string;
|
|
|
|
disabled?: boolean;
|
|
|
|
dataSource: TransferItem[];
|
|
|
|
targetKeys?: string[];
|
|
|
|
selectedKeys?: string[];
|
|
|
|
render?: (record: TransferItem) => React.ReactNode;
|
|
|
|
onChange?: (targetKeys: string[], direction: string, moveKeys: any) => void;
|
|
|
|
onSelectChange?: (sourceSelectedKeys: string[], targetSelectedKeys: string[]) => void;
|
|
|
|
style?: React.CSSProperties;
|
|
|
|
listStyle?: React.CSSProperties;
|
|
|
|
operationStyle?: React.CSSProperties;
|
|
|
|
titles?: string[];
|
|
|
|
operations?: string[];
|
|
|
|
showSearch?: boolean;
|
|
|
|
filterOption?: (inputValue: any, item: any) => boolean;
|
|
|
|
searchPlaceholder?: string;
|
|
|
|
notFoundContent?: React.ReactNode;
|
|
|
|
locale?: {};
|
|
|
|
footer?: (props: TransferListProps) => React.ReactNode;
|
|
|
|
body?: (props: TransferListProps) => React.ReactNode;
|
|
|
|
rowKey?: (record: TransferItem) => string;
|
|
|
|
onSearchChange?: (direction: TransferDirection, e: React.ChangeEvent<HTMLInputElement>) => void;
|
|
|
|
onSearch?: (direction: TransferDirection, value: string) => void;
|
|
|
|
lazy?: {} | boolean;
|
|
|
|
onScroll?: (direction: TransferDirection, e: React.SyntheticEvent<HTMLDivElement>) => void;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface TransferLocale {
|
|
|
|
titles: string[];
|
|
|
|
notFoundContent: string;
|
|
|
|
searchPlaceholder: string;
|
|
|
|
itemUnit: string;
|
|
|
|
itemsUnit: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
export default class Transfer extends React.Component<TransferProps, any> {
|
|
|
|
// For high-level customized Transfer @dqaria
|
|
|
|
static List = List;
|
|
|
|
static Operation = Operation;
|
|
|
|
static Search = Search;
|
|
|
|
|
|
|
|
static defaultProps = {
|
|
|
|
dataSource: [],
|
|
|
|
render: noop,
|
|
|
|
locale: {},
|
|
|
|
showSearch: false,
|
|
|
|
};
|
|
|
|
|
|
|
|
static propTypes = {
|
|
|
|
prefixCls: PropTypes.string,
|
|
|
|
disabled: PropTypes.bool,
|
|
|
|
dataSource: PropTypes.array,
|
|
|
|
render: PropTypes.func,
|
|
|
|
targetKeys: PropTypes.array,
|
|
|
|
onChange: PropTypes.func,
|
|
|
|
height: PropTypes.number,
|
|
|
|
style: PropTypes.object,
|
|
|
|
listStyle: PropTypes.object,
|
|
|
|
operationStyle: PropTypes.object,
|
|
|
|
className: PropTypes.string,
|
|
|
|
titles: PropTypes.array,
|
|
|
|
operations: PropTypes.array,
|
|
|
|