/// <reference types="react" />

import * as React from "react";

interface HTMLAttributesWeak extends React.HTMLAttributes<HTMLElement> {
  defaultValue?: any;
  onChange?: any;
}

export interface TransferProps extends HTMLAttributesWeak {
  /**
   * 移动选项模式
   */
  mode?: "normal" | "simple";

  /**
   * 数据源
   */
  dataSource?: Array<any>;

  /**
   * （用于受控）当前值
   */
  value?: Array<any>;

  /**
   * （用于非受控）初始值
   */
  defaultValue?: Array<any>;

  /**
   * 值发生改变的时候触发的回调函数
   */
  onChange?: (value: Array<any>, data: Array<any>, extra: {}) => void;

  /**
   * 是否禁用
   */
  disabled?: boolean;

  /**
   * 是否禁用左侧面板
   */
  leftDisabled?: boolean;

  /**
   * 是否禁用右侧面板
   */
  rightDisabled?: boolean;

  /**
   * 列表项渲染函数
   */
  itemRender?: (data: {}) => React.ReactNode;

  /**
   * 是否显示搜索框
   */
  showSearch?: boolean;

  /**
   * 自定义搜索函数
   */
  filter?: (searchedValue: string, data: {}) => boolean;

  /**
   * 搜索框输入时触发的回调函数
   */
  onSearch?: (searchedValue: string, position: string) => void;

  /**
   * 搜索框占位符
   */
  searchPlaceholder?: string;

  /**
   * 列表为空显示内容
   */
  notFoundContent?: React.ReactNode;

  /**
   * 左右面板标题
   */
  titles?: Array<any>;

  /**
   * 向右向左移动按钮显示内容
   */
  operations?: Array<any>;

  /**
   * 左面板默认选中值
   */
  defaultLeftChecked?: Array<any>;

  /**
   * 右面板默认选中值
   */
  defaultRightChecked?: Array<any>;

  /**
   * 左右面板列表自定义样式类名
   */
  listClassName?: string;

  /**
   * 左右面板列表自定义样式对象
   */
  listStyle?: {};

  /**
   * 是否允许拖拽排序
   */
  sortable?: boolean;

  /**
   * 拖拽排序时触发的回调函数
   */
  onSort?: (value: Array<any>, position: string) => void;

  /**
   * 自定义国际化文案对象
   */
  locale?: {};

  /**
   * 请设置 id 以保证transfer的可访问性
   */
  id?: string;
}

export default class Transfer extends React.Component<TransferProps, any> {}
