jamis
Version:
一种支持通过JSON配置方式生成页面的组件库
122 lines (121 loc) • 4.86 kB
TypeScript
import type { Option, Options, PickClassStyleType, ReactPropsBase, SchemaClassName } from 'jamis-core';
import type { BaseSelectionProps, ItemRenderStates, ResultItemRenderStates, TooltipObject, TreeCompProps } from '../../types';
type SelectMode = 'table' | 'group' | 'list' | 'tree' | 'chained' | 'associated';
export interface TransferProps extends ReactPropsBase, Omit<BaseSelectionProps, 'itemRender'>, PickClassStyleType {
inline?: boolean;
statistics?: boolean;
showArrow?: boolean;
multiple?: boolean;
selectTitle?: string;
selectMode?: SelectMode;
groupConfig?: Partial<BaseSelectionProps>;
listConfig?: Partial<BaseSelectionProps>;
treeConfig?: Partial<TreeCompProps>;
tableConfig?: Partial<TableSelectionProps>;
associatedConfig?: Partial<AssociatedSelectionProps>;
chainedConfig?: Partial<ChainedSelectionProps>;
columns?: Array<{
name: string;
label: string;
[propName: string]: any;
}>;
hasError?: boolean;
leftOptions?: Array<Option>;
leftMode?: 'tree' | 'list' | 'group';
/**
* selectMode为associated时才有用
* @deprecated
*/
leftDefaultValue?: any;
rightMode?: 'table' | 'list' | 'group' | 'tree' | 'chained';
searchResultMode?: 'table' | 'list' | 'group' | 'tree' | 'chained';
searchResultColumns?: Array<{
name: string;
label: string;
[propName: string]: any;
}>;
searchPlaceholder?: string;
noResultsText?: string;
cellRender?: (column: {
name: string;
label: string;
[propName: string]: any;
}, option: Option, colIndex: number, rowIndex: number) => JSX.Element;
resultTitle?: string;
resultListModeFollowSelect?: boolean;
resultSearchPlaceholder?: string;
resultSearchable?: boolean;
sortable?: boolean;
titleClassName?: SchemaClassName;
leftWrapClassName?: SchemaClassName;
optionItemRender?: (option: Option, states: ItemRenderStates) => JSX.Element;
resultItemRender?: (option: Option, states: ResultItemRenderStates) => JSX.Element;
selectRender?: (props: Omit<TransferProps, 'onSearch'> & {
onSearch: (text: string) => void;
onSearchCancel: () => void;
searchResult: Options | null;
}) => JSX.Element;
onChange?: (value: Array<Option>, optionModified?: boolean) => void | boolean | Promise<boolean>;
onSearch?: (term: string, setCancel?: (cancel: () => void) => void) => Promise<Options | void>;
onResultSearch?: (text: string, item: Option) => boolean;
onRef?: (ref: any) => void;
onSelectAll?: (options: Options) => void;
}
export interface TabsTransferProps extends Omit<TransferProps, 'selectMode' | 'columns' | 'selectRender' | 'statistics' | 'onSearch' | 'optionItemRender'> {
onSearch: (term: string, option: Option, setCancel: (cancel: () => void) => void) => Promise<Options | void>;
optionItemRender?: (option: Option, states: ItemRenderStates, tab: Option) => JSX.Element;
cellRender?: (column: {
name: string;
label: string;
[propName: string]: any;
}, option: Option, colIndex: number, rowIndex: number) => JSX.Element;
onTabChange: (key: number) => void;
activeKey: number;
}
export interface TransferDropDownProps extends TransferProps, PickClassStyleType {
multiple?: boolean;
borderMode?: 'full' | 'half' | 'none';
popOverContainer?: any;
popoverClassName?: SchemaClassName;
maxTagCount?: number;
overflowTagPopover?: TooltipObject;
/** 是否平铺 */
tiled?: boolean;
/** 多选时, 是否自动清除搜索条件 */
autoClearSearchValue?: boolean;
itemRender: (option: Option) => JSX.Element | string;
}
export interface AssociatedSelectionProps extends BaseSelectionProps {
leftOptions: Options;
leftDefaultValue?: any;
leftClassName?: SchemaClassName;
rightClassName?: SchemaClassName;
leftMode?: 'tree' | 'list' | 'group';
rightMode?: 'table' | 'list' | 'group' | 'tree' | 'chained';
columns?: Array<any>;
cellRender?: (column: {
name: string;
label: string;
[propName: string]: any;
}, option: Option, colIndex: number, rowIndex: number) => JSX.Element;
}
export interface ChainedSelectionProps extends BaseSelectionProps {
defaultSelectedIndex?: string;
colClassName?: SchemaClassName;
subTitleClassName?: SchemaClassName;
}
export interface TableSelectionProps extends BaseSelectionProps {
/** 是否为结果渲染列表 */
resultMode?: boolean;
columns: Array<{
name: string;
label: string;
[propName: string]: any;
}>;
cellRender: (column: {
name: string;
label: string;
[propName: string]: any;
}, option: Option, colIndex: number, rowIndex: number) => JSX.Element;
}
export {};