import { LabelValueItem, TAny, TPlainObject } from '@flatbiz/utils';
import { CascaderProps } from 'antd';
import { ReactElement } from 'react';

export type TRequestStatus = "request-init" | "request-progress" | "request-success" | "request-error" | "request-search-keyword-empty" | "no-dependencies-params";
export type TRequestStatusProps = {
	status?: TRequestStatus;
	errorButton?: ReactElement;
	messageConfig?: Partial<Record<TRequestStatus, string>>;
	loading?: boolean;
};
export type CascaderWrapperServiceConfig = {
	params?: TPlainObject;
	onRequest?: (params?: TAny) => TAny;
	/** 响应数据适配器 */
	onRequestResultAdapter?: (respData: TAny) => TPlainObject[];
	/** 必填字段设置 */
	requiredParamsKeys?: string[];
};
export type CascaderWrapperProps = Omit<CascaderProps<TAny>, "loading" | "notFoundContent" | "options" | "value" | "multiple" | "onChange" | "fieldNames"> & {
	/**
	 * 参数Key映射
	 * ```
	 * 1. 默认值：value=value、label=label、children=children
	 * 2. list 为 onRequest 返回数据中列表key值，可多级取值，例如： 'a.b.c'
	 * 3. 配置 serviceConfig.onRequestResultAdapter后，fieldNames.list配置失效
	 * 4. 如果没有配置list，可说明接口返回为数组
	 * ```
	 */
	fieldNames?: {
		list?: string;
		label?: string;
		value?: string;
		children?: string;
	};
	/**
	 * 请求服务需求的数据，当设置`selectorList`后无效果
	 */
	serviceConfig?: CascaderWrapperServiceConfig;
	onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;
	onSelectorListChange?: (dataList: TPlainObject[]) => void;
	/**
	 * 是否动态加载选项
	 */
	isDynamicLoad?: boolean;
	value?: string | number | Array<string | number> | LabelValueItem | LabelValueItem[];
	onChange?: (value?: string | number | Array<string | number>, selectedList?: TPlainObject[]) => void;
	/** 配置数据查询状态描述，比如有依赖字段描述 */
	requestMessageConfig?: TRequestStatusProps["messageConfig"];
	/**
	 * 选择数据响应类型（当用户选中后响应数据）,默认值：last
	 * ```
	 * 1. last 响应选中的最后一级数据
	 * 2. all 响应选中的多级数据
	 * ```
	 */
	responseType?: "last" | "all";
	/** 响应数据是否包含label、value */
	labelInValue?: boolean;
};
export type CascaderWrapperRefApi = {
	getCascaderList: () => TPlainObject[];
};
/**
 * 级联选择器包装组件
 * ```
 * 1. 数据源中 value 不能重复
 * 2. 不支持多选
 * 3. modelKey的配置是为了缓存数据，只缓存初始化数据，如果isDynamicLoad=true，动态获取的数据不再缓存
 * 4. onChange操作第一个参数返回叶子节点value（可配置返回多级），第二个参数返回选中的多级数据
 * 5. isDynamicLoad=true 会在请求中添加当前选中option的fieldNames.value为key的数据
 * 6. @flatbiz/antd@5.0.25 删除 modelKey 字段
 * 7. serviceConfig.params 参数发生变化时，会重新请求数据
 * ```
 */
export declare const CascaderWrapper: import("react").ForwardRefExoticComponent<Omit<CascaderProps<any, string | number | symbol, boolean>, "value" | "loading" | "notFoundContent" | "options" | "multiple" | "onChange" | "fieldNames"> & {
	/**
	 * 参数Key映射
	 * ```
	 * 1. 默认值：value=value、label=label、children=children
	 * 2. list 为 onRequest 返回数据中列表key值，可多级取值，例如： 'a.b.c'
	 * 3. 配置 serviceConfig.onRequestResultAdapter后，fieldNames.list配置失效
	 * 4. 如果没有配置list，可说明接口返回为数组
	 * ```
	 */
	fieldNames?: {
		list?: string;
		label?: string;
		value?: string;
		children?: string;
	};
	/**
	 * 请求服务需求的数据，当设置`selectorList`后无效果
	 */
	serviceConfig?: CascaderWrapperServiceConfig;
	onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;
	onSelectorListChange?: (dataList: TPlainObject[]) => void;
	/**
	 * 是否动态加载选项
	 */
	isDynamicLoad?: boolean;
	value?: string | number | Array<string | number> | LabelValueItem | LabelValueItem[];
	onChange?: (value?: string | number | Array<string | number>, selectedList?: TPlainObject[]) => void;
	/** 配置数据查询状态描述，比如有依赖字段描述 */
	requestMessageConfig?: TRequestStatusProps["messageConfig"];
	/**
	 * 选择数据响应类型（当用户选中后响应数据）,默认值：last
	 * ```
	 * 1. last 响应选中的最后一级数据
	 * 2. all 响应选中的多级数据
	 * ```
	 */
	responseType?: "last" | "all";
	/** 响应数据是否包含label、value */
	labelInValue?: boolean;
} & import("react").RefAttributes<CascaderWrapperRefApi>>;

export {};
