From 3f3e1e6423d365efc821d59b4dc8e6292edfd14a Mon Sep 17 00:00:00 2001 From: Hardik Date: Fri, 29 May 2026 03:07:04 +0530 Subject: [PATCH] feat(admin): confirm activate/deactivate via modal popup across all tables Replace immediate server action calls with ConfirmDialog modals for activate/deactivate on all 6 admin tables (users, vendors, vessels, sites, accounts, products). Delete already used DeleteConfirmDialog; this adds the same pattern for reversible toggle actions. Co-Authored-By: Claude Sonnet 4.6 --- .../admin/accounts/accounts-table.tsx | 24 +++---- .../admin/products/products-table.tsx | 24 +++---- App/app/(portal)/admin/sites/sites-table.tsx | 24 +++---- App/app/(portal)/admin/users/users-table.tsx | 20 +++--- .../(portal)/admin/vendors/vendors-table.tsx | 24 +++---- .../(portal)/admin/vessels/vessels-table.tsx | 24 +++---- App/components/ui/confirm-dialog.tsx | 70 +++++++++++++++++++ 7 files changed, 141 insertions(+), 69 deletions(-) create mode 100644 App/components/ui/confirm-dialog.tsx diff --git a/App/app/(portal)/admin/accounts/accounts-table.tsx b/App/app/(portal)/admin/accounts/accounts-table.tsx index 16b856b..0d523a8 100644 --- a/App/app/(portal)/admin/accounts/accounts-table.tsx +++ b/App/app/(portal)/admin/accounts/accounts-table.tsx @@ -1,12 +1,12 @@ "use client"; -import { useState, useTransition } from "react"; -import { useRouter } from "next/navigation"; +import { useState } from "react"; import { useTableControls } from "@/components/ui/use-table-controls"; import { TableControls, SortableTh } from "@/components/ui/table-controls"; import { AddAccountButton, EditAccountButton } from "./account-form"; import { RowActionsMenu, RowActionsItem, RowActionsDestructiveItem, RowActionsSeparator } from "@/components/ui/row-actions-menu"; import { DeleteConfirmDialog } from "@/components/ui/delete-confirm-dialog"; +import { ConfirmDialog } from "@/components/ui/confirm-dialog"; import { deleteAccount, toggleAccountActive } from "./actions"; export type AccountRow = { @@ -20,23 +20,15 @@ export type AccountRow = { const CHIPS = ["Active", "Inactive"]; function AccountActionsMenu({ account }: { account: AccountRow }) { - const router = useRouter(); const [editOpen, setEditOpen] = useState(false); const [deleteOpen, setDeleteOpen] = useState(false); - const [isPending, startTransition] = useTransition(); - - function handleToggle() { - startTransition(async () => { - await toggleAccountActive(account.id); - router.refresh(); - }); - } + const [toggleOpen, setToggleOpen] = useState(false); return ( <> setEditOpen(true)}>Edit - + setToggleOpen(true)}> {account.isActive ? "Deactivate" : "Activate"} @@ -60,6 +52,14 @@ function AccountActionsMenu({ account }: { account: AccountRow }) { label={account.name} onConfirm={() => deleteAccount(account.id)} /> +