ant-design-vue/components/upload/interface.tsx

117 lines
3.8 KiB
Vue
Executable File

import type { ExtractPropTypes, PropType } from 'vue';
import { tuple } from '../_util/type';
import PropsTypes from '../_util/vue-types';
export const UploadFileStatus = PropsTypes.oneOf(
tuple('error', 'success', 'done', 'uploading', 'removed'),
);
export interface HttpRequestHeader {
[key: string]: string;
}
export interface VcFile extends File {
uid: string;
readonly lastModifiedDate: Date;
readonly webkitRelativePath: string;
}
export type UploadFileStatus = 'error' | 'success' | 'done' | 'uploading' | 'removed';
export interface UploadFile<T = any> {
uid: string;
size?: number;
name: string;
fileName?: string;
lastModified?: number;
lastModifiedDate?: Date;
url?: string;
status?: UploadFileStatus;
percent?: number;
thumbUrl?: string;
originFileObj?: any;
response?: T;
error?: any;
linkProps?: any;
type?: string;
xhr?: T;
preview?: string;
}
export interface UploadChangeParam<T extends object = UploadFile> {
file: T;
fileList: UploadFile[];
event?: { percent: number };
}
export const ShowUploadListInterface = PropsTypes.shape({
showRemoveIcon: PropsTypes.looseBool,
showPreviewIcon: PropsTypes.looseBool,
}).loose;
export interface UploadLocale {
uploading?: string;
removeFile?: string;
downloadFile?: string;
uploadError?: string;
previewFile?: string;
}
export const uploadProps = {
type: PropsTypes.oneOf(tuple('drag', 'select')),
name: PropsTypes.string,
defaultFileList: { type: Array as PropType<UploadFile[]> },
fileList: { type: Array as PropType<UploadFile[]> },
action: PropsTypes.oneOfType([PropsTypes.string, PropsTypes.func]),
directory: PropsTypes.looseBool,
data: PropsTypes.oneOfType([PropsTypes.object, PropsTypes.func]),
method: PropsTypes.oneOf(tuple('POST', 'PUT', 'PATCH', 'post', 'put', 'patch')),
headers: PropsTypes.object,
showUploadList: PropsTypes.oneOfType([PropsTypes.looseBool, ShowUploadListInterface]),
multiple: PropsTypes.looseBool,
accept: PropsTypes.string,
beforeUpload: PropsTypes.func,
listType: PropsTypes.oneOf(tuple('text', 'picture', 'picture-card')),
// className: PropsTypes.string,
remove: PropsTypes.func,
supportServerRender: PropsTypes.looseBool,
// style: PropsTypes.object,
disabled: PropsTypes.looseBool,
prefixCls: PropsTypes.string,
customRequest: PropsTypes.func,
withCredentials: PropsTypes.looseBool,
openFileDialogOnClick: PropsTypes.looseBool,
locale: { type: Object as PropType<UploadLocale> },
height: PropsTypes.number,
id: PropsTypes.string,
previewFile: PropsTypes.func,
transformFile: PropsTypes.func,
onChange: { type: Function as PropType<(info: UploadChangeParam) => void> },
onPreview: { type: Function as PropType<(file: UploadFile) => void> },
onRemove: {
type: Function as PropType<(file: UploadFile) => void | boolean | Promise<void | boolean>>,
},
onDownload: { type: Function as PropType<(file: UploadFile) => void> },
'onUpdate:fileList': { type: Function as PropType<(files: UploadFile[]) => void> },
};
export type UploadProps = Partial<ExtractPropTypes<typeof uploadProps>>;
export const uploadListProps = {
listType: PropsTypes.oneOf(tuple('text', 'picture', 'picture-card')),
// items: PropsTypes.arrayOf(UploadFile),
items: { type: Array as PropType<UploadFile[]> },
progressAttr: PropsTypes.object,
prefixCls: PropsTypes.string,
showRemoveIcon: PropsTypes.looseBool,
showDownloadIcon: PropsTypes.looseBool,
showPreviewIcon: PropsTypes.looseBool,
locale: { type: Object as PropType<UploadLocale> },
previewFile: PropsTypes.func,
onPreview: { type: Function as PropType<(file: UploadFile) => void> },
onRemove: {
type: Function as PropType<(file: UploadFile) => void | boolean>,
},
onDownload: { type: Function as PropType<(file: UploadFile) => void> },
};
export type UploadListProps = Partial<ExtractPropTypes<typeof uploadListProps>>;