From 74d276b6565c757ea966524b00ba8711c26b9fcd Mon Sep 17 00:00:00 2001 From: admin Date: Fri, 29 May 2026 23:37:32 +0200 Subject: [PATCH] refactor(admin): move approve/reject/delete dialogs onto shared Modal --- src/components/admin/admin-panel.tsx | 75 +++++++++++++++++++--------- 1 file changed, 51 insertions(+), 24 deletions(-) diff --git a/src/components/admin/admin-panel.tsx b/src/components/admin/admin-panel.tsx index 323f8e6..01a3f60 100644 --- a/src/components/admin/admin-panel.tsx +++ b/src/components/admin/admin-panel.tsx @@ -4,6 +4,7 @@ import { useState, useEffect, useCallback } from "react"; import { useTranslations, useFormatter } from "next-intl"; import type { PiecedTenant, TenantRequest } from "@/types"; import { StatusBadge } from "@/components/ui/status-badge"; +import { Modal } from "@/components/ui/modal"; import { formatDateTime, formatRelative } from "@/lib/format"; import Link from "next/link"; @@ -794,13 +795,20 @@ export function AdminPanel({ initialTenants }: AdminPanelProps) { )} {/* ───── APPROVE MODAL ───── */} - {approveModal && - (() => { - const req = requests.find((r) => r.id === approveModal); - const isReapprove = req?.status === "rejected"; - return ( -
-
+ { + setApproveModal(null); + setActionError(""); + }} + ariaLabel={t("approveTitle")} + > + {approveModal && + (() => { + const req = requests.find((r) => r.id === approveModal); + const isReapprove = req?.status === "rejected"; + return ( + <>

{t("approveTitle")}

@@ -838,15 +846,23 @@ export function AdminPanel({ initialTenants }: AdminPanelProps) { {actionLoading === approveModal ? "…" : t("confirmApprove")}
-
- - ); - })()} + + ); + })()} + {/* ───── REJECT MODAL ───── */} - {rejectModal && ( -
-
+ { + setRejectModal(null); + setRejectNotes(""); + setActionError(""); + }} + ariaLabel={t("rejectTitle")} + > + {rejectModal && ( + <>

{t("rejectTitle")}

@@ -870,6 +886,7 @@ export function AdminPanel({ initialTenants }: AdminPanelProps) { onClick={() => { setRejectModal(null); setRejectNotes(""); + setActionError(""); }} className="px-4 py-2 text-sm text-text-secondary hover:text-text-primary transition-colors" > @@ -883,14 +900,21 @@ export function AdminPanel({ initialTenants }: AdminPanelProps) { {actionLoading === rejectModal ? "…" : t("confirmReject")}
-
- - )} + + )} + {/* ───── DELETE MODAL ───── */} - {deleteModal && ( -
-
+ { + setDeleteModal(null); + setActionError(""); + }} + ariaLabel={t("deleteTitle")} + > + {deleteModal && ( + <>

{t("deleteTitle")}

@@ -907,7 +931,10 @@ export function AdminPanel({ initialTenants }: AdminPanelProps) { )}
-
-
- )} + + )} + ); }