import * as React from 'react'; import { CustomRender, CustomEventHandler, File, ConvertFileSize } from '../../commonTypes'; import { GlobalDefaultTheme, PartialGlobalDefaultTheme } from '../../utils/useTheme'; import { COMPONENTS_NAMESPACES, FileErrorCodes } from '../../constants'; import { ValidationProps } from '../Validation/types'; import { LoadingComponentProps } from '../../src/LoaderComponent/types'; export { FileErrorCodes } from '../../constants'; export interface FileDropInnerError { /** Код ошибки, подробнее можно посмотреть в leda/constants.ts */ errorCode: FileErrorCodes; /** Сообщение об ошибке */ errorMessage: string; } export declare type FileDropExternalError = Error | string | null; export declare type FileDropError = FileDropInnerError | FileDropExternalError; export interface ChangeEvent { component: { error: FileDropInnerError | null; name?: string; value: File | null; }; } export interface FileDropProps extends ValidationProps { /** Классы переданные через _ */ [x: string]: unknown; /** Разрешенные типы файлов, см. https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input#Attributes. Передача нескольких типов файлов происходит через запятую (.png, image/jpeg). allowedFiles и forbiddenFiles вместе не могут находиться. */ allowedFiles?: string; /** Классы, применяемые к компоненту */ className?: string; /** Function converts size in bytes to custom unit of measurement */ convertFileSize?: ConvertFileSize; /** Ошибка загрузки файла */ error: FileDropError; /** Кастомизация верстки ошибки */ errorViewRender?: CustomRender; /** Запрещенные типы файлов. см. https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input#Attributes. Передача нескольких типов файлов происходит через запятую (.png, image/jpeg). allowedFiles и forbiddenFiles вместе не могут находиться. */ forbiddenFiles?: string; /** Кастомизация верстки стартовой панели */ infoRender?: CustomRender; /** Признак отключения дропзоны */ isDisabled?: boolean; /** Turns on select file when clicking on DropZone */ isInteractiveZone?: boolean; /** Состояние загрузки */ isLoading?: boolean; /** Прогресс загрузки, число от 1 до 100 */ loadingProgress?: number; /** Текст загрузки, по умолчанию "Загрузка..." */ loadingText?: string; /** Кастомизация верстки состояния загрузки */ loadingViewRender?: LoadingComponentProps['loadingViewRender']; maxFileNameLength?: number; /** Максимальный размер файла, в байтах */ maxFileSize?: number; /** Минимальный размер файла, в байтах */ minFileSize?: number; /** Функция обратного вызова для метода onChange */ onChange: (event: ChangeEvent) => void; /** Функция-обработчик onClick */ onClick?: (event: React.MouseEvent) => void; /** Реф */ ref?: React.Ref; /** Кастомизация верстки удачной загрузки */ successViewRender?: CustomRender; /** Тема для компонента */ theme?: PartialGlobalDefaultTheme[typeof COMPONENTS_NAMESPACES.fileDrop]; /** Текст кнопки загрузки файла, может принимать JSX */ uploadButtonRender?: CustomRender; /** Загруженный файл */ value: File | null; /** Кастомизация враппера */ wrapperRender?: CustomRender; } export interface LayoutRenderProps extends FileDropProps { downloadLink?: string | null | React.ReactElement; handleRetry?: CustomEventHandler>; } export interface UploadButtonProps { [x: string]: unknown; children?: React.ReactNode; className?: string; onClick?: CustomEventHandler; } export interface CustomItemProps { children?: React.ReactNode; className?: string; } export interface WrapperProps { children?: React.ReactNode; className?: string; ref: React.Ref; } export interface CustomElements { DefaultItem: React.FC; ErrorItem: React.FC; SuccessItem: React.FC; UploadButton: React.FC; Wrapper: React.FC; } export interface ChangeEventHandler { (accepted: File[], rejected: File[], ev?: React.DragEvent | React.MouseEvent, removedFile?: File): void; } export interface FileDropRefCurrent { input: HTMLInputElement | null; wrapper: HTMLElement | null; } export interface SingleFileViewProps extends FileDropProps { DefaultItem: React.FC; ErrorItem: React.FC; SuccessItem: React.FC; UploadButton: React.FC; theme: GlobalDefaultTheme[typeof COMPONENTS_NAMESPACES.fileDrop]; } export interface ErrorComponentProps extends SingleFileViewProps { combinedButtonClassNames: string | undefined; errorMessage: string; } export interface DefaultComponentProps extends SingleFileViewProps { combinedButtonClassNames: string | undefined; } export interface SuccessComponentProps extends SingleFileViewProps { combinedButtonClassNames: string | undefined; }