UNPKG

choerodon-ui

Version:

An enterprise-class UI design language and React-based implementation

303 lines (302 loc) 8.14 kB
import { ReactNode } from 'react'; import { T } from '../../../lib/upload/utils'; import { FormField, FormFieldProps } from '../field/FormField'; import { UploadFile } from './interface'; export interface UploadProps extends FormFieldProps { /** * 可接受的上传文件类型 */ accept?: string[]; /** * 上传文件路径 */ action: string; /** * 上传所需参数或者返回上传参数的方法 */ data?: object | Function; /** * 设置上传的请求头部 */ headers?: any; /** * 是否支持多选文件 */ multiple?: boolean; /** * 是否在选择文件后立即上传 * * @type {boolean} * @memberof UploadProps */ uploadImmediately?: boolean; /** * 组件右上角的帮助信息 * * @type {ReactNode} * @memberof UploadProps */ extra?: ReactNode; /** * input元素内已选择文件变化的回调 * * @memberof UploadProps */ onFileChange?: (fileList: UploadFile[]) => void; /** * 上传之前的回调 * * @memberof UploadProps */ beforeUpload?: (file: UploadFile, FileList: UploadFile[]) => boolean | PromiseLike<void>; /** * 删除后的回调 * * @memberof UploadProps */ onRemoveFile?: (file: UploadFile) => void | boolean | Promise<void | boolean>; /** * 上传进度变化的回调 * * @memberof UploadProps */ onUploadProgress?: (percent: number, file: UploadFile) => void; /** * 上传成功的回调 * * @memberof UploadProps */ onUploadSuccess?: (response: any, file: UploadFile) => void; /** * 上传出错的回调 * * @memberof UploadProps */ onUploadError?: (error: Error, response: any, file: UploadFile) => void; /** * 文件上传队列的最大长度,0表示不限制 * * @type {number} * @memberof UploadProps */ fileListMaxLength?: number; /** * 控制图片预览的配置对象 * * @type {boolean} * @memberof UploadProps */ showPreviewImage?: boolean; /** * 预览图片的宽度 * * @type {number} * @memberof UploadProps */ previewImageWidth?: number; /** * 是否显示上传按钮 * * @type {boolean} * @memberof UploadProps */ showUploadBtn?: boolean; /** * 是否显示上传列表 * * @type {boolean} * @memberof UploadProps */ showUploadList?: boolean; /** * 默认显示的上传列表 * * @type {array} * @memberof UploadProps */ defaultFileList?: Array<UploadFile>; /** * 已经上传的列表 * * @type {array} * @memberof UploadProps */ uploadFileList?: Array<UploadFile>; /** * 上传请求时是否携带 cookie * * @type {boolean} * @memberof UploadProps */ withCredentials?: boolean; /** * 是否以追加形式添加文件至列表中 * * @type {boolean} * @memberof UploadProps */ appendUpload?: boolean; /** * 是否每次上传全部文件 * * @type {boolean} * @memberof UploadProps */ partialUpload?: boolean; } export default class Upload extends FormField<UploadProps> { static displayName: string; static defaultProps: { suffixCls: string; multiple: boolean; headers: {}; data: {}; action: string; name: string; withCredentials: boolean; appendUpload: boolean; partialUpload: boolean; uploadImmediately: boolean; fileListMaxLength: number; showPreviewImage: boolean; previewImageWidth: number; showUploadBtn: boolean; showUploadList: boolean; beforeUpload: typeof T; onUploadSuccess: () => void; onUploadError: () => void; readOnly: boolean; disabled: boolean; noValidate: boolean; trim: import("../data-set/enum").FieldTrim; }; /** * 保存上传的文件对象 * * 若直接传递,浏览器会认为它是Mobx对象,因此有时需要手动复制并传值调用 * * @type {UploadFile[]} * @memberof Upload */ fileList: UploadFile[]; /** * 原生<input>元素的引用 * * @private * @type {HTMLInputElement} * @memberof Upload */ private nativeInputElement; constructor(props: any, context: any); componentWillReceiveProps(nextProps: any): void; getOmitPropsKeys(): string[]; getOtherProps(): any; saveNativeInputElement: (elem: any) => any; /** * 传递包装按钮的点击事件 * */ handleWrapperBtnClick: () => void; render(): JSX.Element; handleUploadBtnClick: () => void; /** * 文件上传前的回调 * * @param {UploadFile} * @param {UploadFile[]} * @memberof Upload */ beforeUpload: (file: UploadFile, fileList: UploadFile[]) => boolean | PromiseLike<void>; startUpload: () => void; /** * 处理<input type="file">元素的change事件, * 主要是取出事件对象中的files对象并传递给uploadFiles方法 * * @param {*} e <input>元素的change事件对象 * @memberof Upload */ handleChange(e: any): void; /** * 分别上传fileList中的每个文件对象 * * @param {UploadFile[]} fileList 文件对象数组 * @returns {void} * @memberof Upload */ uploadFiles(fileList: UploadFile[]): void; /** * 上传每个文件对象 * * @param {*} file * @returns {void} * @memberof Upload */ upload(file: any): void; /** * 处理上传成功的函数,根据结果设置文件对象的状态, * 用于在UploadList中的展示 * * @param {number} status HTTP状态码 * @param {string} response 响应对象 * @param {UploadFile} file 文件对象 * @returns */ handleSuccess(status: number, response: any, file: UploadFile): void; /** * 处理上传进度变化的函数,更新文件对象中的percent值, * 用于在UploadList中展示 * * @param {number} percent 上传百分比 * @param {UploadFile} file 文件对象 * @returns */ handleProgress(percent: number, file: UploadFile): void; /** * 处理上传出错的函数,用于设置文件对象的status值, * * @param {Error} error 错误对象 * @param {string} responseText 处理成字符串的响应对象 * @param {UploadFile} file 文件对象 * @returns */ handleError(error: Error, responseText: string, response: any, file: UploadFile): void; handleRemove: (file: UploadFile) => void; handleOnRemove(file: UploadFile): void; /** * 判断文件后缀名是否合格 * this.props.accept值为falsy时返回true,否则正常判断 * * @param {UploadFile[]} fileList 文件对象数组 * @returns {boolean} * @memberof Upload */ isAcceptFiles(fileList: UploadFile[]): boolean; /** * 使用日期获取一个uid * * @param {number} index 索引 * @returns {string} * @memberof Upload */ getUid(index: number): string; /** * 从文件对象数组中获取一个文件对象的引用, * 首先尝试通过uid属性匹配文件对象,若失败则尝试name * * @param {UploadFile} file * @param {UploadFile[]} fileList 文件对象数组 * @returns {UploadFile} * @memberof Upload */ getFileItem(file: UploadFile): UploadFile | undefined; /** * 从文件对象数组中移除一个文件对象, * 首先尝试通过uid属性匹配文件对象,若失败则尝试name * * @param {UploadFile} file * @param {UploadFile[]} fileList * @returns {UploadFile[]} * @memberof Upload */ removeFileItem(file: UploadFile): void; }