Aller au contenu principal

Référence des valeurs de retour

Tout ce qui est retourné par le hook useDropup.

Vue d'ensemble

const {
files, // Tableau d'objets fichiers
state, // État actuel
actions, // Actions disponibles
getDropProps, // Props pour la zone de dépôt
getInputProps, // Props pour l'élément input
openFileDialog, // Ouvrir le sélecteur de fichiers
} = useDropup();

files

Tableau d'objets DropupFile représentant tous les fichiers ajoutés.

const { files } = useDropup();

files.forEach(file => {
console.log(file.id); // "abc123"
console.log(file.name); // "photo.jpg"
console.log(file.size); // 1234567
console.log(file.type); // "image/jpeg"
console.log(file.status); // "idle" | "uploading" | "complete" | "error"
console.log(file.progress); // 0-100
console.log(file.preview); // "blob:http://..." (images uniquement)
console.log(file.uploadedUrl); // "https://..." (après téléversement)
console.log(file.error); // DropupError (si échec)
});

Propriétés DropupFile

PropriétéTypeDescription
idstringIdentifiant unique
fileFileObjet File original du navigateur
namestringNom du fichier
sizenumberTaille en octets
typestringType MIME
statusFileStatusStatut actuel
progressnumberProgression du téléversement (0-100)
previewstring | undefinedURL d'aperçu pour les images
uploadedUrlstring | undefinedURL après téléversement réussi
responseunknownDonnées de réponse du serveur
errorDropupError | undefinedErreur si le téléversement a échoué
metaRecord<string, unknown>Métadonnées personnalisées

Valeurs FileStatus

StatutDescription
'idle'Fichier ajouté, pas en cours de téléversement
'uploading'Téléversement en cours
'complete'Téléversement réussi
'error'Téléversement échoué
'paused'Téléversement en pause (téléversements reprenables)

state

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

const { state } = useDropup();

console.log(state.isDragging); // true lors du glissement au-dessus
console.log(state.isDragAccept); // true lorsque les fichiers glissés sont valides
console.log(state.isDragReject); // true lorsque les fichiers glissés sont invalides
console.log(state.isUploading); // true lorsqu'un fichier est en cours de téléversement
console.log(state.progress); // progression globale 0-100
console.log(state.status); // 'idle' | 'uploading' | 'complete' | 'error'

Propriétés d'état

PropriétéTypeDescription
isDraggingbooleanFichiers glissés au-dessus de la zone de dépôt
isDragAcceptbooleanLes fichiers glissés passent la validation
isDragRejectbooleanLes fichiers glissés échouent à la validation
isUploadingbooleanUn fichier actuellement en cours de téléversement
progressnumberProgression moyenne de tous les fichiers (0-100)
statusDropupStatusStatut global du téléversement

Valeurs DropupStatus

StatutDescription
'idle'Aucun téléversement en cours
'uploading'Un ou plusieurs fichiers en cours de téléversement
'complete'Tous les téléversements terminés avec succès
'error'Un ou plusieurs téléversements ont échoué

actions

Objet contenant toutes les actions disponibles.

const { actions } = useDropup();

// Démarrer les téléversements
actions.upload(); // Téléverser tous les fichiers inactifs
actions.upload(['id1', 'id2']); // Téléverser des fichiers spécifiques

// Annuler les téléversements
actions.cancel(); // Annuler tous les téléversements
actions.cancel('file-id'); // Annuler un fichier spécifique

// Supprimer les fichiers
actions.remove('file-id'); // Supprimer un fichier spécifique
actions.reset(); // Supprimer tous les fichiers

// Réessayer les téléversements échoués
actions.retry(); // Réessayer tous les échecs
actions.retry(['id1']); // Réessayer des fichiers spécifiques

// Ajouter des fichiers programmatiquement
actions.addFiles(fileList); // Ajouter File[] ou FileList

// Mettre à jour les métadonnées du fichier
actions.updateFileMeta('file-id', { tag: 'important' });

Méthodes d'action

upload(fileIds?)

Démarrer le téléversement des fichiers.

// Téléverser tous les fichiers inactifs
actions.upload();

// Téléverser des fichiers spécifiques
actions.upload(['file-id-1', 'file-id-2']);
ParamètreTypeDescription
fileIdsstring[] (optionnel)IDs de fichiers spécifiques à téléverser

cancel(fileId?)

Annuler les téléversements en cours.

// Annuler tous les téléversements
actions.cancel();

// Annuler un fichier spécifique
actions.cancel('file-id');
ParamètreTypeDescription
fileIdstring (optionnel)ID de fichier spécifique à annuler

remove(fileId)

Supprimer un fichier de la liste.

actions.remove('file-id');
ParamètreTypeDescription
fileIdstringID du fichier à supprimer

reset()

Supprimer tous les fichiers et réinitialiser l'état.

actions.reset();

retry(fileIds?)

Réessayer les téléversements échoués.

// Réessayer tous les téléversements échoués
actions.retry();

// Réessayer des fichiers spécifiques
actions.retry(['file-id-1']);
ParamètreTypeDescription
fileIdsstring[] (optionnel)IDs de fichiers spécifiques à réessayer

addFiles(files)

Ajouter des fichiers programmatiquement.

// Depuis le presse-papiers
document.addEventListener('paste', (e) => {
const files = e.clipboardData?.files;
if (files) {
actions.addFiles(files);
}
});

// Depuis une autre source
actions.addFiles([file1, file2]);
ParamètreTypeDescription
filesFile[] | FileListFichiers à ajouter

updateFileMeta(fileId, meta)

Mettre à jour les métadonnées du fichier.

actions.updateFileMeta('file-id', {
description: 'Ma photo',
tags: ['vacances', '2024'],
});
ParamètreTypeDescription
fileIdstringID du fichier à mettre à jour
metaRecord<string, unknown>Métadonnées à fusionner

getDropProps

Retourne les props à diffuser sur l'élément de la zone de dépôt.

const { getDropProps, getInputProps } = useDropup();

<div {...getDropProps()}>
<input {...getInputProps()} />
Déposer les fichiers ici
</div>

Avec des props personnalisées

<div
{...getDropProps({
className: 'my-dropzone',
onClick: (e) => {
// Votre gestionnaire de clic personnalisé
console.log('Cliqué !');
},
})}
>
<input {...getInputProps()} />
</div>

Props retournées

PropriétéTypeDescription
onDragEnterfunctionGestionnaire d'entrée de glissement
onDragOverfunctionGestionnaire de survol de glissement
onDragLeavefunctionGestionnaire de sortie de glissement
onDropfunctionGestionnaire de dépôt
onClickfunctionGestionnaire de clic (ouvre le dialogue)
rolestringRôle d'accessibilité
tabIndexnumberIndex de tabulation pour le focus

getInputProps

Retourne les props à diffuser sur l'input de fichier caché.

const { getInputProps } = useDropup();

<input {...getInputProps()} />

Avec des props personnalisées

<input
{...getInputProps({
id: 'file-input',
name: 'files',
})}
/>

Props retournées

PropriétéTypeDescription
type'file'Type d'input
acceptstringTypes de fichiers acceptés
multiplebooleanAutoriser plusieurs fichiers
onChangefunctionGestionnaire de changement
styleobjectStyles cachés

openFileDialog

Fonction pour ouvrir programmatiquement le sélecteur de fichiers.

const { openFileDialog } = useDropup();

<button onClick={openFileDialog}>
Parcourir les fichiers
</button>

Exemples d'utilisation

Liste complète de fichiers

function FileList() {
const { files, actions, state } = useDropup({
upload: { url: '/api/upload' },
});

return (
<div>
<h3>Fichiers ({files.length})</h3>

{files.map(file => (
<div key={file.id}>
{file.preview && (
<img src={file.preview} alt="" width={50} />
)}
<span>{file.name}</span>
<span>{(file.size / 1024).toFixed(1)} Ko</span>
<span>{file.status}</span>

{file.status === 'uploading' && (
<progress value={file.progress} max={100} />
)}

{file.status === 'error' && (
<>
<span style={{ color: 'red' }}>{file.error?.message}</span>
<button onClick={() => actions.retry([file.id])}>Réessayer</button>
</>
)}

<button onClick={() => actions.remove(file.id)}>Supprimer</button>
</div>
))}

{state.isUploading && (
<p>Téléversement en cours... {state.progress}%</p>
)}

<button
onClick={() => actions.upload()}
disabled={state.isUploading || files.length === 0}
>
Tout téléverser
</button>

<button onClick={() => actions.reset()}>
Tout effacer
</button>
</div>
);
}

Style d'état de glissement

function StyledDropzone() {
const { state, getDropProps, getInputProps } = useDropup({
accept: 'image/*',
});

const getStyle = () => {
if (state.isDragAccept) return { borderColor: 'green', backgroundColor: '#e8f5e9' };
if (state.isDragReject) return { borderColor: 'red', backgroundColor: '#ffebee' };
if (state.isDragging) return { borderColor: 'blue', backgroundColor: '#e3f2fd' };
return { borderColor: 'gray', backgroundColor: 'white' };
};

return (
<div
{...getDropProps()}
style={{
border: '2px dashed',
borderRadius: 8,
padding: 40,
textAlign: 'center',
transition: 'all 0.2s',
...getStyle(),
}}
>
<input {...getInputProps()} />
{state.isDragReject ? (
<p>Seules les images sont acceptées !</p>
) : (
<p>Déposer les images ici</p>
)}
</div>
);
}