import { type ChangeEvent, type LazyExoticComponent, type ReactNode, type RefObject } from 'react'; import { type PdfViewerProps } from '../../../PdfViewer'; import { type FileId, type FileUploaderNotify, type RestrictionFn, type UploadedFileData, type UploadFile } from '../../FileUploader'; export type UsePreviewFileUploaderParams = { value: UploadFile | null | undefined; /** * Название класса, применяется к корневому компоненту */ className?: string; /** * Название поля */ name?: string; /** * Название поля */ label?: string; /** * Массив разрешенных расширений файлов и MIME-типов * * @example * // Используя расширения файлов * accept={['.jpg', '.png', '.pdf']} * * // Используя MIME-типы * accept={['image/jpeg', 'image/png', 'application/pdf']} * * // Комбинируя расширения и MIME-типы * accept={['.jpg', 'image/png', 'application/pdf']} */ accept?: string[]; /** * Максимальный размер файла в байтах */ maxFileSize: number; /** * Если true, компонент будет недоступен для взаимодействия */ isDisabled?: boolean; /** * Флаг состояния ошибки */ isError?: boolean; /** * Вспомогательный текст */ helperText?: ReactNode; /** * Массив функций для дополнительной валидации файлов, применяется к каждому файлу */ restrictions?: RestrictionFn[]; /** * Вспомогательный текст */ placeholder?: string; /** * Кастомное изображение для placeholder. Дефолтное берется из configProvider, если было прокинуто */ placeholderImgSrc?: string; /** * Реф для доступа к input элементу */ inputRef?: RefObject; /** * Объект с методами для отображения уведомлений * @remarks * Используется для показа системных уведомлений при загрузке файлов */ notify: FileUploaderNotify; /** * Функция для генерации ссылки на скачивание/просмотр файла * @param fileId - Идентификатор файла * @param file - Объект файла * @param fileUrl - URL файла, если он уже загружен * @returns Строка с URL для скачивания/просмотра файла * @example * generateDownloadLink: (fileId, file, fileUrl) => { * return fileUrl || `/api/files/${fileId}`; * } */ generateDownloadLink?: (fileId: FileId, file?: File, fileUrl?: string) => string; /** * Функция загрузки файлов на сервер * @param fileId - Идентификатор файла * @param file - Объект файла для загрузки * @param options - Опции для управления загрузкой * @param options.signal - AbortSignal для отмены загрузки файла * @param options.setProgress - Функция для обновления прогресса загрузки * @returns Promise с данными загруженного файла */ onUploadFile?: (fileId: FileId, file: File, options: { signal: AbortSignal; setProgress: (progressFileId: FileId, progressEvent: ProgressEvent) => void; }) => Promise; /** * Обработчик просмотра файла * @param fileId - Идентификатор файла * @param file - Объект файла * @param fileUrl - URL файла, если он уже загружен * @remarks * Если указан generateDownloadLink, то onView не нужен. * Используется если необходимо переопределить стандартное поведение с просмотром в новой вкладке * @example * onView: (fileId, file, fileUrl) => { * openFileInModal({ fileId, file fileUrl }); * } */ onView?: (fileId: FileId, file?: File, fileUrl?: string) => void; /** * Функция, вызываемая при изменении списка файлов (добавление/удаление) * @param value - Объект загруженного файла или null при удалении * @remarks * Вызывается в следующих случаях: * - При добавлении нового файла через диалог выбора или drag-n-drop * - При удалении файла * - При изменении статуса загрузки файла (loading/success/error) * - При обновлении информации о файле после успешной загрузки */ onChange: (value: UploadFile | null) => void; /** * Скрытие персональных данных от инструментов мониторинга */ isHidePersonalData?: boolean; /** * Компонент для отображения превью pdf-файлов */ PdfViewer?: ((props: PdfViewerProps) => JSX.Element) | LazyExoticComponent<(props: PdfViewerProps) => JSX.Element>; }; export declare const usePreviewFileUploader: ({ value, isDisabled, accept, restrictions, maxFileSize, inputRef, notify, onChange, onUploadFile, label, isError, generateDownloadLink, onView, name, helperText, className, placeholder, placeholderImgSrc, isHidePersonalData, PdfViewer, }: UsePreviewFileUploaderParams) => { dropZoneProps: { isVisibleAddFile: boolean; isVisibleFileList: boolean; fileInputProps: { id: string | undefined; accept: string; ref: RefObject | undefined; value: string; onChange: (event: ChangeEvent) => void; name: string | undefined; isDisabled: boolean | undefined; }; hintPlaceholderProps: { accept: string[] | undefined; placeholder: string | undefined; placeholderImgSrc: string | undefined; maxFileSize: number; }; uploadButtonProps: { isDisabled: boolean | undefined; htmlFor: string | undefined; }; containerProps: { className: string | undefined; label: string | undefined; isError: boolean | undefined; helperText: ReactNode; }; onDragLeave: (event: import("react").DragEvent) => void; onDragOver: (event: import("react").DragEvent) => void; onDrop: (event: import("react").DragEvent) => void; isActive: boolean; htmlFor: string | undefined; className: string; isDisabled: boolean | undefined; isError: boolean | undefined; }; fileListProps: { onDelete: () => void; onRetry: ((fileId: FileId, file: File) => void) | undefined; setErrorStatusFile: (fileId: string, errorMsg: string) => void; selfFiles: Record; generateDownloadLink: ((fileId: FileId, file?: File, fileUrl?: string) => string) | undefined; onView: ((fileId: FileId, file?: File, fileUrl?: string) => void) | undefined; files: UploadFile[]; isHidePersonalData: boolean | undefined; PdfViewer: LazyExoticComponent<(props: PdfViewerProps) => JSX.Element> | ((props: PdfViewerProps) => JSX.Element) | undefined; }; };