import { TAny, TPlainObject } from '@flatbiz/utils';
import { UploadFile, UploadProps } from 'antd';
import { UploadChangeParam } from 'antd/lib/upload/index.js';
import { ReactElement } from 'react';

export type UploadWrapperFileItem = {
	uid: string;
	name: string;
	url?: string;
};
export type UploadWrapperProps<T extends TPlainObject = TPlainObject> = {
	value?: T[] | T;
	onChange?: (value?: T[]) => void;
	onUploadError?: (message?: string) => void;
	onUploadChange?: (info: UploadChangeParam<UploadFile>) => void;
	/**
	 * 属性取值映射
	 */
	fieldNames?: {
		uid: string;
		name?: string;
		url?: string;
		/** 文件大小 */
		size?: string | number;
	};
	/**
	 * 接口响应数据适配器，如果配置了fieldNames，适配器返回值会再进过fieldNames转换
	 */
	onRequestResultAdapter?: (respData: TAny) => TPlainObject;
	/** 操作触发显示文本 */
	triggerText?: string;
	/** 超过maxCount 隐藏上传入口  */
	limitHidden?: boolean;
	/**
	 * 自动提交，默认：true
	 * ```
	 * 1. 自定义beforeUpload配置后 autoSubmit 失效
	 * 2. 设置为 false 时，在onChange中获取File对象数组
	 * ```
	 */
	autoSubmit?: boolean;
	/** 图片预览开关, 重写 onPreview 方法后失效 */
	imagePreviewSwitch?: boolean;
	/** 图片预览文件类型，默认：['png', 'jpg', 'jpeg', 'gif', 'heic', 'heif'] */
	imagePreviewAccept?: string[];
	/**
	 * 配置文件额外操作
	 * ```
	 * 额外操作超过两项后，listType为 picture-card、picture-circle 时会出现显示异常，需要自行修改覆盖样式
	 * ```
	 */
	extraOperate?: {
		icon: ReactElement;
		onClick: (file: UploadFile, fileList: UploadFile[], e: any) => void;
	}[];
	/** 是否使用拖拽上传 */
	isDragger?: boolean;
} & Omit<UploadProps, "onChange" | "fileList">;
/**
 * 文件上传，支持拖拽上传
 * ```
 * demo: https://fex.qa.tcshuke.com/docs/admin/main/file/upload
 * 1. 可通过配置children替换默认上传触发布局
 * 2. 接口返回结构：
 *    formData上传接口返回值
 *    {
 *     code: '0000',
 *     data: {
 *       uid: '唯一值，可使用fileKey值'
 *       name: '文件名称'
 *       url: '预览地址'
 *     }
 *    }
 * 3. 如果接口返回的不是上面的字段名称，可通过fieldNames配置接口返回字段名称映射
 *
 * 4. 最佳使用方式，与Form结合使用
 * <Form.Item name="attachmentList" label="附件">
 *   <UploadWrapper action={uploadUrl} />
 * </Form.Item>
 *
 * 5. 回填数据结构
 * [{
 *    uid: '唯一值',
 *    name（非必填）: 'image.png',
 *    url: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png',
 *  }]
 * 1. 其中 uid、name、url 可为其他命名，通过 fieldNames 进行映射即可,
 * 2. 其他需要的字段可在对象中添加 responseData 对象
 * 例如：
 * [{
 *    uid: '唯一值',
 *    name（非必填）: 'image.png',
 *    url: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png',
 *    responseData: { 'xx':'xxx' }
 *  }]
 * ```
 *
 */
export declare const UploadWrapper: (props: UploadWrapperProps) => import("react").JSX.Element;

export {};
