"use client"; import { useState } from "react"; import { useRouter } from "next/navigation"; import { AdminDialog } from "@/components/ui/admin-dialog"; import { createAccount, updateAccount } from "./actions"; type ParentOption = { id: string; code: string; name: string; parentId: string | null }; type AccountRow = { id: string; code: string; name: string; description: string | null; parentId: string | null; isActive: boolean; }; const INPUT = "w-full rounded-lg border border-neutral-300 px-3 py-2 text-sm focus:border-primary-500 focus:outline-none focus:ring-2 focus:ring-primary-500/20"; function AccountFormFields({ account, allAccounts, }: { account?: AccountRow; allAccounts: ParentOption[]; }) { // Only allow parent to be a top-level (parentId == null) or sub-category (parentId != null but has no grandparent) // i.e. depth 0 or depth 1 nodes can be parents const topLevel = allAccounts.filter((a) => a.parentId === null && (!account || a.id !== account.id)); const subLevel = allAccounts.filter((a) => a.parentId !== null && (!account || a.id !== account.id)); return (
); } export function AddAccountButton({ allAccounts }: { allAccounts: ParentOption[] }) { const router = useRouter(); const [open, setOpen] = useState(false); const [pending, setPending] = useState(false); const [error, setError] = useState(""); async function handleSubmit(e: React.FormEvent) { e.preventDefault(); setPending(true); setError(""); const result = await createAccount(new FormData(e.currentTarget)); if ("error" in result) { setError(result.error); setPending(false); } else { setPending(false); setOpen(false); router.refresh(); } } return ( <> setOpen(false)}>
{error &&

{error}

}
); } export function EditAccountButton({ account, allAccounts, open: controlledOpen, onOpenChange, }: { account: AccountRow; allAccounts: ParentOption[]; open?: boolean; onOpenChange?: (v: boolean) => void; }) { const router = useRouter(); const [internalOpen, setInternalOpen] = useState(false); const [pending, setPending] = useState(false); const [error, setError] = useState(""); const isControlled = controlledOpen !== undefined; const open = isControlled ? controlledOpen : internalOpen; const setOpen = isControlled ? (onOpenChange ?? (() => {})) : setInternalOpen; async function handleSubmit(e: React.FormEvent) { e.preventDefault(); setPending(true); setError(""); const fd = new FormData(e.currentTarget); fd.set("id", account.id); const result = await updateAccount(fd); if ("error" in result) { setError(result.error); setPending(false); } else { setPending(false); setOpen(false); router.refresh(); } } return ( <> {!isControlled && ( )} setOpen(false)}>
{error &&

{error}

}
); }