ivt
Version:
Ivt Components Library
128 lines (125 loc) • 4.03 kB
TypeScript
import * as react_jsx_runtime from 'react/jsx-runtime';
import React__default from 'react';
import { DropzoneProps, FileError } from 'react-dropzone';
type FileErrorMessage = {
file: File;
message: string;
};
interface FileUploaderProps extends React__default.HTMLAttributes<HTMLDivElement> {
/**
* Valor atual do uploader.
* @type File[]
* @default undefined
* @example value={files}
*/
value?: File[];
/**
* Função chamada quando o valor muda.
* @type (files: File[]) => void
* @default undefined
* @example onValueChange={(files) => setFiles(files)}
*/
onValueChange?: (files: File[]) => void;
/**
* Função chamada ao realizar o upload dos arquivos.
* @type (files: File[]) => Promise<void>
* @default undefined
* @example onUpload={(files) => uploadFiles(files)}
*/
onUpload?: (files: File[]) => Promise<void>;
/**
* Progresso do upload de cada arquivo.
* @type Record<string, number> | undefined
* @default undefined
* @example progresses={{ "file1.png": 50 }}
*/
progresses?: Record<string, number>;
/**
* Tipos de arquivos aceitos pelo uploader.
* @type { [key: string]: string[] }
* @default
* ```ts
* { "image/*": [] }
* ```
* @example accept={["image/png", "image/jpeg"]}
*/
accept?: DropzoneProps["accept"];
/**
* Tamanho máximo permitido para cada arquivo (em bytes).
* @type number | undefined
* @default 1024 * 1024 * 2 // 2MB
* @example maxSize={1024 * 1024 * 2} // 2MB
*/
maxSize?: DropzoneProps["maxSize"];
/**
* Quantidade máxima de arquivos permitidos.
* @type number | undefined
* @default 1
* @example maxFileCount={4}
*/
maxFileCount?: DropzoneProps["maxFiles"];
/**
* Permite selecionar múltiplos arquivos.
* @type boolean
* @default false
* @example multiple
*/
multiple?: boolean;
/**
* Desabilita o uploader.
* @type boolean
* @default false
* @example disabled
*/
disabled?: boolean;
/**
* Função para personalizar a mensagem de erro ou executar ações quando arquivos forem rejeitados.
* Pode retornar uma string para exibição ou void para efeitos colaterais (ex: toast).
* @type ((errors: readonly FileError[]) => string | void) | undefined
* @default undefined
* @example onGetErrorMessage={(errors) => "Arquivo inválido"}
* @example onGetErrorMessage={(errors) => toast({ title: "Erro", variant: "destructive" })}
*/
onGetErrorMessage?: (errors: readonly FileError[]) => string | void;
/**
* Função chamada quando arquivos válidos são selecionados.
* Deve retornar os arquivos que serão usados no estado.
* @type (acceptedFiles: File[]) => File[]
*/
onValidFile: (acceptedFiles: File[]) => File[];
/**
* Título exibido no componente.
* @type string
*/
title: string;
/**
* Descrição opcional exibida abaixo do título.
* @type string | undefined
*/
description?: string;
/**
* Exibe visualização dos arquivos selecionados (quando aplicável).
* @type boolean | undefined
* @default false
*/
previewFiles?: boolean;
/**
* Indica se o uploader está em estado de carregamento.
* @type boolean | undefined
* @default false
*/
isLoading?: boolean;
/**
* Lista de erros de arquivo para exibição personalizada.
* @type FileErrorMessage[]
*/
fileErrors: FileErrorMessage[];
/**
* Função para atualizar a lista de erros de arquivo.
* @type React.Dispatch<React.SetStateAction<FileErrorMessage[]>>
*/
setFileErrors: React__default.Dispatch<React__default.SetStateAction<FileErrorMessage[]>>;
}
declare function FileUploader(props: FileUploaderProps): react_jsx_runtime.JSX.Element;
export { FileUploader };
export type { FileErrorMessage };