import { zodResolver } from "@hookform/resolvers/zod"; import { DialogClose } from "@radix-ui/react-dialog"; import { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { Button } from "~/components/ui/button"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "~/components/ui/dialog"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "~/components/ui/form"; import { Input } from "~/components/ui/input"; import { Label } from "~/components/ui/label"; import { RadioGroup, RadioGroupItem } from "~/components/ui/radio-group"; import RequiredIcon from "~/components/ui/required-icon"; import { useApproveProject } from "~/services/projects/approve"; import { type Approve, type Proyek, approveSchema } from "~/types/api/proyek"; interface ApproveModalProps { data: Proyek; } export default function ApproveModal({ data }: ApproveModalProps) { const [open, setOpen] = useState(false); const [loading, setLoading] = useState(false); const { mutateAsync: approveProject } = useApproveProject(data.id || ""); const form = useForm({ resolver: zodResolver(approveSchema), defaultValues: { harga_per_unit: "0", jumlah_koin: "0", minimal_pembelian: "0", maksimal_pembelian: "0", nominal_disetujui: "0", report_progress: "1", }, }); const watchNominalDisetujui = form.watch("nominal_disetujui"); const watchHargaPerUnit = form.watch("harga_per_unit"); useEffect(() => { const nominalDisetujui = Number.parseFloat(watchNominalDisetujui); const hargaPerUnit = Number.parseFloat(watchHargaPerUnit); if (nominalDisetujui && hargaPerUnit && hargaPerUnit > 0) { const jumlahKoin = Math.floor(nominalDisetujui / hargaPerUnit); form.setValue("jumlah_koin", jumlahKoin.toString()); } else { form.setValue("jumlah_koin", "0"); } }, [watchNominalDisetujui, watchHargaPerUnit, form]); async function onSubmit(values: Approve) { try { setLoading(true); await approveProject(values); toast.success("Proyek berhasil disetujui"); } catch (error) { if (error instanceof Error) { toast.error(error.message); } } setLoading(false); setOpen(false); } return ( Approval Komite Enter the project details for committee approval.
( Upload Laporan Laba Rugi (Setiap) 1 Bulan 3 Bulan 6 Bulan 1 Tahun )} /> ( Nominal Disetujui field.onChange(e.target.value)} /> )} /> ( Harga Per Token field.onChange(e.target.value)} /> )} /> ( Jumlah Token Ditawarkan )} /> ( Minimal Pembelian Token field.onChange(e.target.value)} /> )} /> ( Maximal Pembelian Token field.onChange(e.target.value)} /> )} />
); }