From 5ae1632684e7a2f9e3326e3ac5a8427ff139a45f Mon Sep 17 00:00:00 2001 From: dwindown Date: Thu, 25 Dec 2025 11:50:00 +0700 Subject: [PATCH] Make admin modals non-dismissible with confirmation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Prevent accidental data loss by requiring confirmation before closing any admin modal via backdrop click. Applied to all admin pages with dialogs. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 --- src/pages/admin/AdminConsulting.tsx | 8 +++++++- src/pages/admin/AdminEvents.tsx | 16 ++++++++++++++-- src/pages/admin/AdminMembers.tsx | 8 +++++++- src/pages/admin/AdminOrders.tsx | 8 +++++++- src/pages/admin/AdminProducts.tsx | 8 +++++++- 5 files changed, 42 insertions(+), 6 deletions(-) diff --git a/src/pages/admin/AdminConsulting.tsx b/src/pages/admin/AdminConsulting.tsx index bac8c64..07bb1cc 100644 --- a/src/pages/admin/AdminConsulting.tsx +++ b/src/pages/admin/AdminConsulting.tsx @@ -580,7 +580,13 @@ export default function AdminConsulting() { {/* Meet Link Dialog */} - + { + if (!open) { + const confirmed = window.confirm('Tutup dialog? Data yang belum disimpan akan hilang.'); + if (!confirmed) return; + } + setDialogOpen(open); + }}> Link Google Meet diff --git a/src/pages/admin/AdminEvents.tsx b/src/pages/admin/AdminEvents.tsx index 02296fc..4b4ab70 100644 --- a/src/pages/admin/AdminEvents.tsx +++ b/src/pages/admin/AdminEvents.tsx @@ -432,7 +432,13 @@ export default function AdminEvents() { {/* Event Dialog */} - + { + if (!open) { + const confirmed = window.confirm('Tutup dialog? Data yang belum disimpan akan hilang.'); + if (!confirmed) return; + } + setEventDialogOpen(open); + }}> {editingEvent ? 'Edit Event' : 'Buat Event Baru'} @@ -504,7 +510,13 @@ export default function AdminEvents() { {/* Block Dialog */} - + { + if (!open) { + const confirmed = window.confirm('Tutup dialog? Data yang belum disimpan akan hilang.'); + if (!confirmed) return; + } + setBlockDialogOpen(open); + }}> {editingBlock ? 'Edit Blok' : 'Tambah Blok Ketersediaan'} diff --git a/src/pages/admin/AdminMembers.tsx b/src/pages/admin/AdminMembers.tsx index 37d2dcf..aefa6fb 100644 --- a/src/pages/admin/AdminMembers.tsx +++ b/src/pages/admin/AdminMembers.tsx @@ -205,7 +205,13 @@ export default function AdminMembers() { )} - + { + if (!open) { + const confirmed = window.confirm('Tutup dialog? Data yang belum disimpan akan hilang.'); + if (!confirmed) return; + } + setDialogOpen(open); + }}> Detail Member diff --git a/src/pages/admin/AdminOrders.tsx b/src/pages/admin/AdminOrders.tsx index 20a3855..3f0dd25 100644 --- a/src/pages/admin/AdminOrders.tsx +++ b/src/pages/admin/AdminOrders.tsx @@ -262,7 +262,13 @@ export default function AdminOrders() { )} - + { + if (!open) { + const confirmed = window.confirm('Tutup dialog? Data yang belum disimpan akan hilang.'); + if (!confirmed) return; + } + setDialogOpen(open); + }}> Detail Order diff --git a/src/pages/admin/AdminProducts.tsx b/src/pages/admin/AdminProducts.tsx index c4588dd..77201ed 100644 --- a/src/pages/admin/AdminProducts.tsx +++ b/src/pages/admin/AdminProducts.tsx @@ -267,7 +267,13 @@ export default function AdminProducts() { )} - + { + if (!open) { + const confirmed = window.confirm('Tutup dialog? Data yang belum disimpan akan hilang.'); + if (!confirmed) return; + } + setDialogOpen(open); + }}> {editingProduct ? 'Edit Produk' : 'Produk Baru'}