From 165f423798ce03fb15e6ed4c640c8348744849a5 Mon Sep 17 00:00:00 2001 From: amaliadwiy Date: Tue, 19 May 2026 14:39:23 +0800 Subject: [PATCH] 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. --- app/(application)/announcement/create.tsx | 9 ++++++++- app/(application)/announcement/edit/[id].tsx | 11 ++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/app/(application)/announcement/create.tsx b/app/(application)/announcement/create.tsx index f487e4f..860057f 100644 --- a/app/(application)/announcement/create.tsx +++ b/app/(application)/announcement/create.tsx @@ -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' }) } }; diff --git a/app/(application)/announcement/edit/[id].tsx b/app/(application)/announcement/edit/[id].tsx index ff90f89..3f106e2 100644 --- a/app/(application)/announcement/edit/[id].tsx +++ b/app/(application)/announcement/edit/[id].tsx @@ -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' }) } };