import { HTMLAttributes, MouseEvent, ReactNode, default as React } from 'react';
import { DropEvent, DropzoneOptions, DropzoneState } from 'react-dropzone-esm';
import { QA } from '../common';
import { FileError } from './hook';
/** Статус файла */
export declare enum FileItemStatus {
/** Исходный. Файлы которые были загружены ранее */
Initial = "initial",
/** Загружается */
Loading = "loading",
/** Загружен */
Loaded = "loaded",
/** Удаляется */
Deleting = "deleting",
/** Удален */
Deleted = "deleted",
/** Ошибка */
Error = "error"
}
export type FileItemDefaultExtends = {
[key: string]: unknown;
};
/** Элемент файла.
*
* Может быть расширен другими свойствами */
export type FileItem = {
/** Идентификатор */
id: string | number;
/** Название */
name: string;
/** Размер
*
* Передавать 0 если не известен (не будет учтен при расчетах)
*/
size: number;
/** Статус файла */
status: FileItemStatus;
/** Отключен - не редактируемый */
disabled?: boolean;
/** Ссылка на файл. Позволяет сказать по нажатию */
url?: string;
/** Всплывающая подсказка */
tooltip?: string;
} & T;
/** Пропсы компонента файлов */
export type UploadedFilesProps = Pick, 'items' | 'disabled' | 'onDelete' | 'onClick' | 'maxLabelLength' | 'maxLabelLengthFunc'>;
export type FileUploaderProps = {
/** Элементы файлов */
items: FileItem[];
/** Заголовок */
title?: ReactNode;
/** Подзаголовок */
subTitle?: ReactNode;
/** Ошибка в поле */
error?: boolean | ReactNode;
/** Подпись */
caption?: ReactNode;
/** Абсолютное позиционирование caption
*
* не занимает место между полями
*/
absoluteCaption?: boolean;
/** Обработчик загрузки */
onDrop: (
/** Файлы прошедшие проверку */
accepteds: File[],
/** Ошибки по файлам */
errors: FileError[],
/** Событие загрузки */
event: DropEvent) => void;
/** Обработчик нажания на элемент файла */
onClick?: (file: FileItem, e: MouseEvent) => void;
/** Обработчиу удаления элемента файла */
onDelete?: (file: FileItem) => void;
/** Коллбэк принимающий инстанс react-dropzone
*
* Используется в специфических ситуациях
*/
setDropzone?: (dropzone: DropzoneState) => void;
/** Максимальный размер всех файлов в байтах */
maxSizeAll?: number;
/** Текст ошибки максимального размера всех файлов */
maxSizeAllError?: string;
/** Текст ошибки максимального размера файла */
maxSizeError?: string;
/** Текст ошибки минимального размера файла */
minSizeError?: string;
/** Текст ошибки максимального количества файлов */
maxFilesError?: string;
/** Текст ошибки типа файлов */
acceptTypeError?: string;
/** Максимальная длинна label элемента файла.
*
* Показывает tooltip при превышении */
maxLabelLength?: number;
/** Обработчик длинны label элемента файла*/
maxLabelLengthFunc?: (label: string) => string;
/** Компонент списка элементов файла */
filesComponent?: React.FC>;
} & QA & Omit & Pick, 'className'>;