Lewati ke konten utama

Referensi Nilai Return

Semua yang dikembalikan oleh hook useDropup.

Gambaran Umum​

const {
files, // Array objek file
state, // State saat ini
actions, // Actions yang tersedia
getDropProps, // Props untuk zona drop
getInputProps, // Props untuk elemen input
openFileDialog, // Buka file picker
} = useDropup();

files​

Array objek DropupFile yang mewakili semua file yang ditambahkan.

const { files } = useDropup();

files.forEach(file => {
console.log(file.id); // "abc123"
console.log(file.name); // "foto.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://..." (hanya gambar)
console.log(file.uploadedUrl); // "https://..." (setelah upload)
console.log(file.error); // DropupError (jika gagal)
});

Properti DropupFile​

PropertiTipeDeskripsi
idstringIdentifier unik
fileFileObjek File browser asli
namestringNama file
sizenumberUkuran dalam bytes
typestringTipe MIME
statusFileStatusStatus saat ini
progressnumberProgres upload (0-100)
previewstring | undefinedURL preview untuk gambar
uploadedUrlstring | undefinedURL setelah upload berhasil
responseunknownData response server
errorDropupError | undefinedError jika upload gagal
metaRecord<string, unknown>Metadata kustom

Nilai FileStatus​

StatusDeskripsi
'idle'File ditambahkan, belum diupload
'uploading'Upload sedang berlangsung
'complete'Upload berhasil
'error'Upload gagal
'paused'Upload dijeda (upload yang dapat dilanjutkan)

state​

State saat ini dari dropzone.

const { state } = useDropup();

console.log(state.isDragging); // true saat menyeret
console.log(state.isDragAccept); // true saat file yang diseret valid
console.log(state.isDragReject); // true saat file yang diseret tidak valid
console.log(state.isUploading); // true saat ada file yang diupload
console.log(state.progress); // progres keseluruhan 0-100
console.log(state.status); // 'idle' | 'uploading' | 'complete' | 'error'

Properti State​

PropertiTipeDeskripsi
isDraggingbooleanFile sedang diseret di atas zona drop
isDragAcceptbooleanFile yang diseret lulus validasi
isDragRejectbooleanFile yang diseret gagal validasi
isUploadingbooleanAda file yang sedang diupload
progressnumberRata-rata progres semua file (0-100)
statusDropupStatusStatus upload keseluruhan

Nilai DropupStatus​

StatusDeskripsi
'idle'Tidak ada upload yang berlangsung
'uploading'Satu atau lebih file sedang diupload
'complete'Semua upload selesai dengan sukses
'error'Satu atau lebih upload gagal

actions​

Objek yang berisi semua actions yang tersedia.

const { actions } = useDropup();

// Mulai upload
actions.upload(); // Upload semua file idle
actions.upload(['id1', 'id2']); // Upload file tertentu

// Batalkan upload
actions.cancel(); // Batalkan semua upload
actions.cancel('file-id'); // Batalkan file tertentu

// Hapus file
actions.remove('file-id'); // Hapus file tertentu
actions.reset(); // Hapus semua file

// Coba ulang upload yang gagal
actions.retry(); // Coba ulang semua yang gagal
actions.retry(['id1']); // Coba ulang file tertentu

// Tambahkan file secara programatik
actions.addFiles(fileList); // Tambahkan File[] atau FileList

// Perbarui metadata file
actions.updateFileMeta('file-id', { tag: 'penting' });

Method Action​

upload(fileIds?)​

Mulai mengupload file.

// Upload semua file idle
actions.upload();

// Upload file tertentu
actions.upload(['file-id-1', 'file-id-2']);
ParameterTipeDeskripsi
fileIdsstring[] (opsional)ID file tertentu untuk diupload

cancel(fileId?)​

Batalkan upload yang sedang berlangsung.

// Batalkan semua upload
actions.cancel();

// Batalkan file tertentu
actions.cancel('file-id');
ParameterTipeDeskripsi
fileIdstring (opsional)ID file tertentu untuk dibatalkan

remove(fileId)​

Hapus file dari daftar.

actions.remove('file-id');
ParameterTipeDeskripsi
fileIdstringID file untuk dihapus

reset()​

Hapus semua file dan reset state.

actions.reset();

retry(fileIds?)​

Coba ulang upload yang gagal.

// Coba ulang semua upload yang gagal
actions.retry();

// Coba ulang file tertentu
actions.retry(['file-id-1']);
ParameterTipeDeskripsi
fileIdsstring[] (opsional)ID file tertentu untuk dicoba ulang

addFiles(files)​

Tambahkan file secara programatik.

// Dari clipboard
document.addEventListener('paste', (e) => {
const files = e.clipboardData?.files;
if (files) {
actions.addFiles(files);
}
});

// Dari sumber lain
actions.addFiles([file1, file2]);
ParameterTipeDeskripsi
filesFile[] | FileListFile untuk ditambahkan

updateFileMeta(fileId, meta)​

Perbarui metadata file.

actions.updateFileMeta('file-id', {
description: 'Foto saya',
tags: ['liburan', '2024'],
});
ParameterTipeDeskripsi
fileIdstringID file untuk diperbarui
metaRecord<string, unknown>Metadata untuk digabungkan

getDropProps​

Mengembalikan props untuk disebarkan pada elemen zona drop.

const { getDropProps, getInputProps } = useDropup();

<div {...getDropProps()}>
<input {...getInputProps()} />
Lepas file di sini
</div>

Dengan Props Kustom​

<div
{...getDropProps({
className: 'my-dropzone',
onClick: (e) => {
// Handler klik kustom Anda
console.log('Diklik!');
},
})}
>
<input {...getInputProps()} />
</div>

Props yang Dikembalikan​

PropertiTipeDeskripsi
onDragEnterfunctionHandler drag enter
onDragOverfunctionHandler drag over
onDragLeavefunctionHandler drag leave
onDropfunctionHandler drop
onClickfunctionHandler klik (buka dialog)
rolestringRole aksesibilitas
tabIndexnumberTab index untuk fokus

getInputProps​

Mengembalikan props untuk disebarkan pada input file tersembunyi.

const { getInputProps } = useDropup();

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

Dengan Props Kustom​

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

Props yang Dikembalikan​

PropertiTipeDeskripsi
type'file'Tipe input
acceptstringTipe file yang diterima
multiplebooleanIzinkan multiple file
onChangefunctionHandler change
styleobjectStyle tersembunyi

openFileDialog​

Fungsi untuk membuka file picker secara programatik.

const { openFileDialog } = useDropup();

<button onClick={openFileDialog}>
Jelajahi File
</button>

Contoh Penggunaan​

Daftar File Lengkap​

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

return (
<div>
<h3>File ({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)} KB</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])}>Coba Ulang</button>
</>
)}

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

{state.isUploading && (
<p>Mengupload... {state.progress}%</p>
)}

<button
onClick={() => actions.upload()}
disabled={state.isUploading || files.length === 0}
>
Upload Semua
</button>

<button onClick={() => actions.reset()}>
Bersihkan Semua
</button>
</div>
);
}

Styling State Seret​

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>Hanya gambar yang diterima!</p>
) : (
<p>Lepas gambar di sini</p>
)}
</div>
);
}