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'>;