121 lines
3.4 KiB
TypeScript
121 lines
3.4 KiB
TypeScript
"use client";
|
|
import {
|
|
pbnstRegZod,
|
|
type customPbnst,
|
|
type PbnstRegArrrayType,
|
|
} from "@/app/store/ruseFcltMng/fcltReg/pbnstReg/type";
|
|
import { PbnstMngForm } from "@/components/ui/form/fcltReg/pbnstReg/mngReg/mngRegForm";
|
|
import { ScrollArea } from "@common/business_components";
|
|
import {
|
|
Button,
|
|
Tabs,
|
|
TabsContent,
|
|
TabsList,
|
|
TabsTrigger,
|
|
} from "@common/components/ui";
|
|
import { useEffect, useState } from "react";
|
|
import { PbnstBuseForm } from "@/components/ui/form/fcltReg/pbnstReg/buseReg/bugRegForm";
|
|
import { type FieldErrors, type UseFormReturn } from "react-hook-form";
|
|
import { writeRgtrAndMdfr } from "@/app/store/ruseFcltMng/fcltReg/pbnstReg";
|
|
import type { z } from "zod";
|
|
import { useConfirm } from "@frontend-opensource/use-react-hooks";
|
|
import { useTranslation } from "react-i18next";
|
|
|
|
export function PbnstRegModal({
|
|
form,
|
|
setPbnstInsert,
|
|
onInvalid,
|
|
newIndexMng
|
|
}: {
|
|
form: UseFormReturn<{ items: PbnstRegArrrayType }>;
|
|
setPbnstInsert: (data: customPbnst) => void;
|
|
onInvalid: (
|
|
errors: FieldErrors<{ items: z.infer<typeof pbnstRegZod>[] }>
|
|
) => void;
|
|
newIndexMng:number
|
|
}) {
|
|
const { t } = useTranslation("base");
|
|
const { confirm } = useConfirm();
|
|
|
|
//TODO: 유즈 스테이트에 set만해도 되나?
|
|
const [, setCurrentTab] = useState<string>("mng");
|
|
const [indexMng, setIndexMng] = useState<number>(newIndexMng);
|
|
const [indexBiz, setIndexBiz] = useState<number>(0);
|
|
|
|
const onSubmit = async (valuse: { items: PbnstRegArrrayType }) => {
|
|
const item = valuse.items[indexMng];
|
|
const data = item ? writeRgtrAndMdfr([item]) : [];
|
|
//
|
|
const handleConfirm = () => {
|
|
if (data && data[0]) {
|
|
setPbnstInsert(data[0]);
|
|
}
|
|
};
|
|
if (await confirm(t("isInsertMsg"))) {
|
|
handleConfirm();
|
|
}
|
|
};
|
|
|
|
const handleTabChange = (value: string) => {
|
|
setCurrentTab(value);
|
|
};
|
|
|
|
useEffect(() => {
|
|
console.log("form errors:", form.formState.errors);
|
|
}, [form.formState.errors]);
|
|
|
|
|
|
|
|
return (
|
|
<>
|
|
<h1 className="text-2xl font-medium text-label pl-8">
|
|
하수재이용 시설 신규등록
|
|
</h1>
|
|
|
|
<div className="my-4 border-t border-border"></div>
|
|
|
|
<Tabs defaultValue="mng" onValueChange={handleTabChange}>
|
|
<div className="flex justify-between items-center">
|
|
<TabsList className="">
|
|
<TabsTrigger className="!text-xl" value="mng">
|
|
시설정보
|
|
</TabsTrigger>
|
|
<TabsTrigger className="!text-xl" value="buse">
|
|
차수별정보
|
|
</TabsTrigger>
|
|
|
|
</TabsList>
|
|
<Button
|
|
onClick={form.handleSubmit(onSubmit, onInvalid)}
|
|
size={"sm"}
|
|
className="mr-5 mt-2"
|
|
>
|
|
저장
|
|
</Button>
|
|
</div>
|
|
<ScrollArea className="h-[75vh]">
|
|
<TabsContent className="max-h-full" value="mng">
|
|
<PbnstMngForm
|
|
form={form}
|
|
formType={"reg"}
|
|
indexMng={indexMng}
|
|
setIndexMng={setIndexMng}
|
|
readonly={false}
|
|
/>
|
|
</TabsContent>
|
|
<TabsContent className="max-h-full" value="buse">
|
|
<PbnstBuseForm
|
|
form={form}
|
|
indexMng={indexMng}
|
|
indexBiz={indexBiz}
|
|
setIndexBiz={setIndexBiz}
|
|
formType={"reg"}
|
|
/>
|
|
</TabsContent>
|
|
</ScrollArea>
|
|
</Tabs>
|
|
</>
|
|
);
|
|
}
|
|
|