"use client"; import { Loader2, PlusCircle } from "lucide-react"; import { useRouter } from "next/navigation"; import { useActionState, useEffect, useState } from "react"; // Import useActionState import { toast } from "sonner"; import { adminUserTopup } from "@/actions/user-actions"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Textarea } from "../ui/textarea"; export type AddTopupFormState = { status: boolean; message: string; fieldErrors?: { amount?: string[]; description?: string[]; }; payload?: FormData; }; export const initialState: AddTopupFormState = { message: "", fieldErrors: {}, status: false, }; export default function AddTopupDialogForm({ user_id }: { user_id?: string }) { const [open, setOpen] = useState(false); const router = useRouter(); const [state, formAction, pending] = useActionState( adminUserTopup, initialState, ); useEffect(() => { if (state.message && state !== initialState) { if (state.fieldErrors && Object.keys(state.fieldErrors).length > 0) { toast.error(state.message); } else if (state.status) { setOpen(false); toast.success(state.message); router.push("/user-topups?page=1"); } else { toast.error(state.message); } } }, [state, router]); if (!user_id) { return null; } return ( New Manual Topup To add a new manual topup, enter the amount below. Click save when you are done.
{state.fieldErrors?.amount && ( {state.fieldErrors.amount[0]} )}