tdesign-mobile-vue
Version:
tdesign-mobile-vue
154 lines (153 loc) • 4.97 kB
TypeScript
import { ImageProps } from '../image';
import { PlainObject, TNode, UploadDisplayDragEvents } from '../common';
export interface TdUploadProps<T extends UploadFile = UploadFile> {
accept?: string;
action?: string;
addContent?: string | TNode;
allowUploadDuplicateFile?: boolean;
autoUpload?: boolean;
beforeAllFilesUpload?: (file: UploadFile[]) => boolean | Promise<boolean>;
beforeUpload?: (file: UploadFile) => boolean | Promise<boolean>;
capture?: string;
data?: Record<string, any> | ((files: UploadFile[]) => Record<string, any>);
disabled?: boolean;
fileListDisplay?: TNode<{
files: UploadFile[];
dragEvents?: UploadDisplayDragEvents;
}>;
files?: Array<T>;
defaultFiles?: Array<T>;
format?: (file: File) => UploadFile;
formatRequest?: (requestData: {
[key: string]: any;
}) => {
[key: string]: any;
};
formatResponse?: (response: any, context: FormatResponseContext) => ResponseType;
headers?: {
[key: string]: string;
};
imageProps?: ImageProps;
isBatchUpload?: boolean;
max?: number;
method?: 'POST' | 'GET' | 'PUT' | 'OPTIONS' | 'PATCH' | 'post' | 'get' | 'put' | 'options' | 'patch';
name?: string;
mockProgressDuration?: number;
multiple?: boolean;
preview?: boolean;
requestMethod?: (files: UploadFile | UploadFile[]) => Promise<RequestMethodResponse>;
sizeLimit?: number | SizeLimitObj;
useMockProgress?: boolean;
uploadAllFilesInOneRequest?: boolean;
value?: Array<T>;
defaultValue?: Array<T>;
modelValue?: Array<T>;
onCancelUpload?: () => void;
withCredentials?: boolean;
onChange?: (value: Array<T>, context: UploadChangeContext) => void;
onClickUpload?: (context: {
e: MouseEvent;
}) => void;
onFail?: (options: UploadFailContext) => void;
onOneFileFail?: (options: UploadFailContext) => void;
onOneFileSuccess?: (context: Pick<SuccessContext, 'e' | 'file' | 'response' | 'XMLHttpRequest'>) => void;
onPreview?: (options: {
file: UploadFile;
index: number;
e: MouseEvent;
}) => void;
onProgress?: (options: ProgressContext) => void;
onRemove?: (context: UploadRemoveContext) => void;
onSelectChange?: (files: File[], context: UploadSelectChangeContext) => void;
onSuccess?: (context: SuccessContext) => void;
onValidate?: (context: {
type: UploadValidateType;
files: UploadFile[];
}) => void;
onWaitingUploadFilesChange?: (context: {
files: Array<UploadFile>;
trigger: 'validate' | 'remove' | 'uploaded';
}) => void;
}
export interface UploadFile extends PlainObject {
lastModified?: number;
name?: string;
percent?: number;
raw?: File;
response?: {
[key: string]: any;
};
size?: number;
status?: 'success' | 'fail' | 'progress' | 'waiting';
type?: string;
uploadTime?: string;
url?: string;
}
export declare type ResponseType = {
error?: string;
url?: string;
} & Record<string, any>;
export interface FormatResponseContext {
file: UploadFile;
currentFiles?: UploadFile[];
}
export interface RequestMethodResponse {
status: 'success' | 'fail';
error?: string;
response: {
url?: string;
files?: UploadFile[];
[key: string]: any;
};
}
export interface SizeLimitObj {
size: number;
unit: SizeUnit;
message?: string;
}
export declare type SizeUnitArray = ['B', 'KB', 'MB', 'GB'];
export declare type SizeUnit = SizeUnitArray[number];
export interface UploadChangeContext {
e?: MouseEvent | ProgressEvent;
response?: any;
trigger: UploadChangeTrigger;
index?: number;
file?: UploadFile;
files?: UploadFile[];
}
export declare type UploadChangeTrigger = 'add' | 'remove' | 'abort' | 'progress-success' | 'progress' | 'progress-fail';
export interface UploadFailContext {
e?: ProgressEvent;
failedFiles: UploadFile[];
currentFiles: UploadFile[];
response?: any;
file: UploadFile;
XMLHttpRequest?: XMLHttpRequest;
}
export interface ProgressContext {
e?: ProgressEvent;
file?: UploadFile;
currentFiles: UploadFile[];
percent: number;
type: UploadProgressType;
XMLHttpRequest?: XMLHttpRequest;
}
export declare type UploadProgressType = 'real' | 'mock';
export interface UploadRemoveContext {
index?: number;
file?: UploadFile;
e: MouseEvent;
}
export interface UploadSelectChangeContext {
currentSelectedFiles: UploadFile[];
}
export interface SuccessContext {
e?: ProgressEvent;
file?: UploadFile;
fileList?: UploadFile[];
currentFiles?: UploadFile[];
response?: any;
results?: SuccessContext[];
XMLHttpRequest?: XMLHttpRequest;
}
export declare type UploadValidateType = 'FILE_OVER_SIZE_LIMIT' | 'FILES_OVER_LENGTH_LIMIT' | 'FILTER_FILE_SAME_NAME' | 'BEFORE_ALL_FILES_UPLOAD' | 'CUSTOM_BEFORE_UPLOAD';