"use client"; import * as React from "react"; import BaseForm from "@/components/BaseForm"; import { Field, FieldLabel, FieldContent } from "@/components/ui/field"; import { Input } from "@/components/ui/input"; import db from "@/lib/dbClient"; import { useRouter } from "next/navigation"; import { useFormContext, Controller } from "react-hook-form"; import AsyncSelectPaginate from "@/components/AsyncSelectPaginate"; function BankFields() { const { control } = useFormContext(); return (
Name } /> Code } /> Parent Bank ( o.label} getOptionValue={(o: any) => o.value} loader={async (search: string, page: number) => { const take = 20; const skip = (page - 1) * take; // Query tenants (paginated) from backend via db client const res: any = await db.tenants.findMany({ skip, take, where: { name: { contains: search } }, }); let items: any[] = []; if (Array.isArray(res)) items = res; else if (res && Array.isArray(res.rows)) items = res.rows; const options = items.map((it: any) => ({ label: it.name, value: String(it.tenant_id || it.id || it.bank_id), })); const hasMore = items.length === take; return { options, hasMore }; }} onChange={(v: any) => field.onChange(v)} /> )} />
); } export default function BaseBankForm({ id }: { id?: string }) { const router = useRouter(); const [defaults, setDefaults] = React.useState(undefined); React.useEffect(() => { let mounted = true; (async () => { if (id && id !== "new") { try { const resp = await db.banks.findFirst({ where: { bank_id: id } }); if (mounted) setDefaults(resp || {}); } catch (e) { console.error("failed to load bank", e); if (mounted) setDefaults({}); } } else { if (mounted) setDefaults({}); } })(); return () => { mounted = false; }; }, [id]); const onSubmit = async (values: any) => { if (id === "new") await db.banks.create({ data: values }); else await db.banks.update({ where: { bank_id: id }, data: values }); router.push("/d/bank"); }; if (id && id !== "new" && defaults === undefined) return
Loading...
; return ( ); }