fix: cegah upload file duplikat pada form tambah dan edit pengumuman
Cek nama file sebelum menambahkan ke list, skip jika sudah ada. Gunakan nama file (bukan URI) karena Android dapat menghasilkan URI berbeda untuk file yang sama di setiap sesi picker.
This commit is contained in:
@@ -102,9 +102,16 @@ export default function CreateAnnouncement() {
|
||||
const pickDocumentAsync = async () => {
|
||||
const result = await DocumentPicker.getDocumentAsync({ type: ["*/*"], multiple: true });
|
||||
if (!result.canceled) {
|
||||
let skipped = 0
|
||||
for (const asset of result.assets) {
|
||||
if (asset.uri) setFileForm(prev => [...prev, asset])
|
||||
if (!asset.uri) continue
|
||||
if (fileForm.some(f => f.name === asset.name)) {
|
||||
skipped++
|
||||
} else {
|
||||
setFileForm(prev => [...prev, asset])
|
||||
}
|
||||
}
|
||||
if (skipped > 0) Toast.show({ type: 'small', text1: 'Beberapa file sudah ditambahkan' })
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -131,9 +131,18 @@ export default function EditAnnouncement() {
|
||||
const pickDocumentAsync = async () => {
|
||||
const result = await DocumentPicker.getDocumentAsync({ type: ["*/*"], multiple: true });
|
||||
if (!result.canceled) {
|
||||
let skipped = 0
|
||||
for (const asset of result.assets) {
|
||||
if (asset.uri) setFileForm(prev => [...prev, asset])
|
||||
if (!asset.uri) continue
|
||||
const isDup = fileForm.some(f => f.name === asset.name) ||
|
||||
visibleOldFiles.some(f => `${f.name}.${f.extension}` === asset.name)
|
||||
if (isDup) {
|
||||
skipped++
|
||||
} else {
|
||||
setFileForm(prev => [...prev, asset])
|
||||
}
|
||||
}
|
||||
if (skipped > 0) Toast.show({ type: 'small', text1: 'Beberapa file sudah ditambahkan' })
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user