Aller au contenu principal

Types TypeScript

Tous les types exportés de Dropup.

Importer les types

import type {
DropupFile,
DropupState,
DropupActions,
DropupError,
UseDropupOptions,
UseDropupReturn,
FileStatus,
DropupStatus,
ValidationRule,
ValidationError,
UploadConfig,
CustomUploader,
UploadOptions,
UploadResult,
} from '@samithahansaka/dropup';

Types principaux

DropupFile

Représente un fichier dans la file d'attente de téléversement.

interface DropupFile {
/** Identifiant unique */
id: string;

/** Objet File original du navigateur */
file: File;

/** Nom du fichier */
name: string;

/** Taille du fichier en octets */
size: number;

/** Type MIME */
type: string;

/** Statut de téléversement actuel */
status: FileStatus;

/** Progression du téléversement 0-100 */
progress: number;

/** URL d'aperçu pour les images (Object URL) */
preview?: string;

/** URL après téléversement réussi */
uploadedUrl?: string;

/** Réponse brute du serveur */
response?: unknown;

/** Détails de l'erreur en cas d'échec */
error?: DropupError;

/** Métadonnées personnalisées */
meta?: Record<string, unknown>;
}

FileStatus

Valeurs de statut de fichier possibles.

type FileStatus = 'idle' | 'uploading' | 'complete' | 'error' | 'paused';

DropupState

État actuel de la zone de dépôt.

interface DropupState {
/** Fichiers glissés au-dessus */
isDragging: boolean;

/** Les fichiers glissés passent la validation */
isDragAccept: boolean;

/** Les fichiers glissés échouent à la validation */
isDragReject: boolean;

/** Un fichier actuellement en cours de téléversement */
isUploading: boolean;

/** Progression moyenne de tous les fichiers (0-100) */
progress: number;

/** Statut global */
status: DropupStatus;
}

DropupStatus

Statut global du téléversement.

type DropupStatus = 'idle' | 'uploading' | 'complete' | 'error';

DropupActions

Actions disponibles pour contrôler le téléverseur.

interface DropupActions {
/** Démarrer le téléversement des fichiers */
upload: (fileIds?: string[]) => void;

/** Annuler les téléversements */
cancel: (fileId?: string) => void;

/** Supprimer un fichier */
remove: (fileId: string) => void;

/** Supprimer tous les fichiers et réinitialiser l'état */
reset: () => void;

/** Réessayer les téléversements échoués */
retry: (fileIds?: string[]) => void;

/** Ajouter des fichiers programmatiquement */
addFiles: (files: File[] | FileList) => void;

/** Mettre à jour les métadonnées du fichier */
updateFileMeta: (fileId: string, meta: Record<string, unknown>) => void;
}

DropupError

Objet d'erreur pour les téléversements échoués.

interface DropupError {
/** Code d'erreur */
code: string;

/** Message lisible par l'humain */
message: string;

/** Erreur d'origine si disponible */
cause?: Error;
}

Types d'options

UseDropupOptions

Options de configuration pour le hook.

interface UseDropupOptions {
// Validation
accept?: string | string[];
maxSize?: number;
minSize?: number;
maxFiles?: number;
maxWidth?: number;
maxHeight?: number;
minWidth?: number;
minHeight?: number;
customRules?: ValidationRule[];

// Comportement
multiple?: boolean;
disabled?: boolean;
autoUpload?: boolean;
generatePreviews?: boolean;

// Téléversement
upload?: UploadConfig | CustomUploader;

// Callbacks
onFilesAdded?: (files: DropupFile[]) => void;
onFileRemoved?: (file: DropupFile) => void;
onValidationError?: (errors: ValidationError[]) => void;
onUploadStart?: (file: DropupFile) => void;
onUploadProgress?: (file: DropupFile, progress: number) => void;
onUploadComplete?: (file: DropupFile, response: unknown) => void;
onUploadError?: (file: DropupFile, error: DropupError) => void;
onAllComplete?: (files: DropupFile[]) => void;
}

UploadConfig

Configuration de téléversement basée sur l'URL.

interface UploadConfig {
/** URL du point de terminaison de téléversement */
url: string;

/** Méthode HTTP */
method?: 'POST' | 'PUT' | 'PATCH';

/** En-têtes de requête */
headers?: Record<string, string>;

/** Nom du champ de formulaire pour le fichier */
fieldName?: string;

/** Inclure les identifiants/cookies */
withCredentials?: boolean;

/** Délai d'expiration de la requête en millisecondes */
timeout?: number;

/** Données de formulaire supplémentaires */
data?: Record<string, unknown>;
}

CustomUploader

Type de fonction de téléversement personnalisé.

type CustomUploader = (
file: DropupFile,
options: UploadOptions
) => Promise<UploadResult>;

UploadOptions

Options passées au téléverseur personnalisé.

interface UploadOptions {
/** Signal d'abandon pour l'annulation */
signal: AbortSignal;

/** Callback de progression */
onProgress: (progress: number) => void;
}

UploadResult

Résultat retourné par le téléversement.

interface UploadResult {
/** URL du fichier téléversé */
url?: string;

/** Réponse brute du serveur */
response?: unknown;
}

Types de validation

ValidationRule

Fonction de validation personnalisée.

type ValidationRule = (file: File) =>
| boolean
| string
| Promise<boolean | string>;

Valeurs de retour :

  • true - Validation réussie
  • false - Validation échouée (erreur générique)
  • string - Validation échouée avec message personnalisé

ValidationError

Erreur de validation pour un fichier.

interface ValidationError {
/** Le fichier qui a échoué à la validation */
file: File;

/** Tableau de messages d'erreur */
errors: string[];
}

Types de retour

UseDropupReturn

Type de retour complet du hook.

interface UseDropupReturn {
/** Tableau de fichiers */
files: DropupFile[];

/** État actuel */
state: DropupState;

/** Actions disponibles */
actions: DropupActions;

/** Getter de props pour la zone de dépôt */
getDropProps: <E extends HTMLElement = HTMLDivElement>(
props?: React.HTMLAttributes<E>
) => DropZoneProps<E>;

/** Getter de props pour l'élément input */
getInputProps: (
props?: React.InputHTMLAttributes<HTMLInputElement>
) => InputProps;

/** Ouvrir le dialogue de fichiers programmatiquement */
openFileDialog: () => void;
}

DropZoneProps

Props retournées par getDropProps.

interface DropZoneProps<E extends HTMLElement>
extends React.HTMLAttributes<E> {
onDragEnter: React.DragEventHandler<E>;
onDragOver: React.DragEventHandler<E>;
onDragLeave: React.DragEventHandler<E>;
onDrop: React.DragEventHandler<E>;
onClick: React.MouseEventHandler<E>;
role: string;
tabIndex: number;
}

InputProps

Props retournées par getInputProps.

interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {
type: 'file';
accept?: string;
multiple?: boolean;
onChange: React.ChangeEventHandler<HTMLInputElement>;
style: React.CSSProperties;
}

Types Cloud

S3UploaderConfig

Configuration pour le téléverseur S3.

interface S3UploaderConfig {
getPresignedUrl: (file: DropupFile) => Promise<PresignedUrlResponse>;
}

interface PresignedUrlResponse {
url: string;
fields?: Record<string, string>;
}

GCSUploaderConfig

Configuration pour le téléverseur Google Cloud Storage.

interface GCSUploaderConfig {
getSignedUrl: (file: DropupFile) => Promise<SignedUrlResponse>;
}

interface SignedUrlResponse {
url: string;
headers?: Record<string, string>;
}

AzureUploaderConfig

Configuration pour le téléverseur Azure Blob Storage.

interface AzureUploaderConfig {
getSasUrl: (file: DropupFile) => Promise<SasUrlResponse>;
}

interface SasUrlResponse {
url: string;
headers?: Record<string, string>;
}

Types de téléversement fragmenté

ChunkedUploaderConfig

Configuration pour les téléversements fragmentés.

interface ChunkedUploaderConfig {
/** URL du point de terminaison de téléversement */
url: string;

/** Taille du fragment en octets (par défaut : 5 Mo) */
chunkSize?: number;

/** Nombre maximum de fragments simultanés */
concurrency?: number;

/** En-têtes de requête */
headers?: Record<string, string>;
}

Types de traitement d'image

CompressOptions

Options de compression d'image.

interface CompressOptions {
/** Largeur maximale */
maxWidth?: number;

/** Hauteur maximale */
maxHeight?: number;

/** Qualité 0-1 (par défaut : 0.8) */
quality?: number;

/** Format de sortie */
type?: 'image/jpeg' | 'image/png' | 'image/webp';
}

Utilitaires de types

Types génériques

// Extraire le statut du fichier
type IdleFile = DropupFile & { status: 'idle' };
type UploadingFile = DropupFile & { status: 'uploading' };
type CompletedFile = DropupFile & { status: 'complete' };
type FailedFile = DropupFile & { status: 'error' };

// Fonctions de garde de type
function isIdle(file: DropupFile): file is IdleFile {
return file.status === 'idle';
}

function isUploading(file: DropupFile): file is UploadingFile {
return file.status === 'uploading';
}

function isComplete(file: DropupFile): file is CompletedFile {
return file.status === 'complete';
}

function isFailed(file: DropupFile): file is FailedFile {
return file.status === 'error';
}

Utilisation avec des gardes de type

const { files } = useDropup();

// Filtrer avec sécurité de type
const uploadingFiles = files.filter(isUploading);
// uploadingFiles est UploadingFile[]

const completedFiles = files.filter(isComplete);
// completedFiles est CompletedFile[]