import { zodResolver } from "@hookform/resolvers/zod"; import { useState } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { Button } from "~/components/ui/button"; import { Dialog, DialogContent, DialogDescription, 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 Spinner from "~/components/ui/spinner"; import { useBuyProject } from "~/services/token/buy-project"; import { type TProyekBeli, proyekBeliSchema } from "~/types/api/proyek-beli"; import KonfirmasiPembelianModal from "./konfirmasi-pembelian"; interface BeliModalProps { id: string; judul: string; totalTokens: number; purchasedTokens: number; } export default function BeliModal({ id, judul, totalTokens, purchasedTokens }: BeliModalProps) { const [isOpen, setIsOpen] = useState(false); const [isConfirmOpen, setIsConfirmOpen] = useState(false); const { mutateAsync } = useBuyProject(id); const remainingTokens = totalTokens - purchasedTokens; const form = useForm({ resolver: zodResolver(proyekBeliSchema), defaultValues: { nominal: 0, }, }); const handleQuantityChange = (delta: number) => { const currentValue = form.getValues("nominal"); const newValue = Math.max(0, currentValue + delta); form.setValue("nominal", newValue, { shouldValidate: true }); }; function onSubmit() { setIsOpen(false); setIsConfirmOpen(true); } async function handlePembelian() { try { await mutateAsync(form.getValues()); toast.success("Pembelian berhasil"); } catch (error) { console.error(error); toast.error("Pembelian gagal"); } } return ( <> Beli Token Sisa Token Untuk Dibeli : {remainingTokens}{" "}
( Nominal Token
)} />
setIsConfirmOpen(false)} handleSubmit={handlePembelian} /> ); }