@osmandvc/react-upload-control
Version:
A completely free and open-source file uploader library designed for modern react applications. This package focuses on delivering a feature-rich experience while prioritizing an exceptional developer experience (DX). Whether you're handling simple upload
162 lines (161 loc) • 4.26 kB
TypeScript
export type FilePreProcessorFunction = (files: UploadedFilePublic[]) => UploadedFilePublic[] | Promise<UploadedFilePublic[] | undefined>;
interface MimeTypesProcessorMap {
[key: string]: FilePreProcessorFunction | null;
}
export type FilePreProcessor = MimeTypesProcessorMap & {
other?: FilePreProcessorFunction;
};
export interface FileUploadConfig {
mimeTypes?: string[];
multiple?: boolean;
maxFileSizeMb?: number;
maxFiles?: number;
resetOnFinish?: boolean;
disableSorting?: boolean;
}
export type UploadProgressError = {
text: string;
code: string;
};
export type OnProgressCallback = (fileId: string, progress: number, error?: UploadProgressError) => void;
export interface FileUploadHandlers {
onUpload: (files: UploadedFile[], onProgressChange: OnProgressCallback) => Promise<UploadFileResult[]> | UploadFileResult[];
onDelete?: (files: UploadedFile[]) => Promise<UploadFileResult[]> | UploadFileResult[];
onFinish: (files: UploadedFile[]) => void;
onAddFileError?: (error: unknown | FileDropError) => void;
preProcessFiles?: FilePreProcessor;
}
export interface UploadedFilesManagerProps {
children: React.ReactNode;
config?: FileUploadConfig;
handlers: FileUploadHandlers;
initFiles?: UploadedFile[];
locale?: string;
}
export interface UploadedFilesProviderProps extends UploadedFilesManagerProps {
}
export type UploadFileResult = {
fileId: string;
success: boolean;
error?: {
text: string;
code: string;
};
metadata?: UploadedFileMetadata;
};
export type FileDropProps = {
isMinimal?: boolean;
children?: React.ReactNode;
};
export type FileDropError = {
error: {
type: FileDropErrorType;
text: string;
};
};
export type DndResult = {
source: {
index: number;
};
destination: {
index: number;
};
};
export type FileListProps = {
onDragEnd?: (result: DndResult) => void;
disableSorting?: boolean;
};
export interface FileUploadControlProps extends Omit<FileLoaderActionsProps, "onAddFileError"> {
className?: string;
size?: "sm" | "lg" | "auto";
children?: React.ReactNode;
}
export type UploadStatus = {
stage?: UploadedFileItemStage;
progress?: number;
error?: {
text: string;
code: string;
};
};
export type FileListItemProps = {
id: string;
size?: number;
name: string;
previewImgSrc?: string;
uploadStatus: UploadStatus;
order?: number;
count: number;
disabled?: boolean;
disableSorting?: boolean;
};
export declare enum FileDropErrorType {
INVALID_FILE = "INVALID_FILE",
MAXSIZE = "OVER_SIZE_LIMIT",
MULTIPLE_NOT_ALLOWED = "MULTIPLE_NOT_ALLOWED",
MAX_FILES_NUMBER = "MAX_FILES_NUMBER"
}
export type UploadedFileImage = {
imgBase64Uri: string;
width?: number;
height?: number;
};
export declare enum UploadedFileItemStage {
IDLE = "IDLE",
FINISHED = "FINISHED",
FAILED = "FAILED",
UPLOADING = "UPLOADING",
REMOVING = "REMOVING"
}
export interface UploadedFile extends UploadedFilePublic {
uploadStatus: UploadStatus;
order?: number;
}
export interface UploadedFilePublic {
id: string;
file?: File;
name: string;
size?: number;
type: string;
base64Uri?: string;
previewImg?: UploadedFileImage;
metadata?: UploadedFileMetadata;
}
export interface UploadedFileMetadata {
[key: string]: any;
}
export interface FormImage {
uriBase64: string;
width: number;
height: number;
}
export interface ScaledImage extends FormImage {
storeId?: number;
img?: HTMLImageElement;
scale: number;
file?: File;
mimeType: string;
}
export type FileLoaderActionsProps = {
disableCamera?: boolean;
disableFileSystem?: boolean;
disableClipboard?: boolean;
isMinimal?: boolean;
disabled?: boolean;
};
export interface FileLoaderAction {
className?: string;
onlyIcon?: boolean;
}
export interface ScaledImageBinary extends ScaledImage {
uri: string;
img: HTMLImageElement;
imgBlob?: Blob;
imgArray?: Uint8Array;
width: number;
height: number;
scale: number;
mimeType: string;
hasWatermark?: boolean;
}
export {};