import { useEffect } from "react"; import { Controller, useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { useNavigate, useParams } from "react-router"; import { Alert, Box, Button, CircularProgress, FormControl, InputLabel, MenuItem, Paper, Select, Stack, TextField, Typography, } from "@mui/material"; import { accountSchema, type AccountFormValues } from "@/domain/accounts/schemas/account-schema"; import { useAccountDetail } from "@/domain/accounts/use-cases/use-account-detail"; import { useCreateAccount } from "@/domain/accounts/use-cases/use-create-account"; import { useUpdateAccount } from "@/domain/accounts/use-cases/use-update-account"; const defaultValues: AccountFormValues = { AccountName: "", AccountNumber: "", Industry: "", Website: "", Notes: "", Address1: "", Address2: "", City: "", State: "", Zip: "", Country: "US", }; export default function AccountFormPage() { const { id } = useParams(); const navigate = useNavigate(); const isEdit = Boolean(id); const { data: account, isLoading, error } = useAccountDetail(id); const createAccount = useCreateAccount(); const updateAccount = useUpdateAccount(); const { register, handleSubmit, reset, control, formState: { errors }, } = useForm({ resolver: zodResolver(accountSchema), defaultValues, }); useEffect(() => { if (account && isEdit) { reset({ AccountName: account.AccountName ?? "", AccountNumber: account.AccountNumber ?? "", Industry: account.Industry ?? "", Website: account.Website ?? "", Notes: account.Notes ?? "", Address1: account.Address1 ?? "", Address2: account.Address2 ?? "", City: account.City ?? "", State: account.State ?? "", Zip: account.Zip ?? "", Country: account.Country ?? "US", }); } }, [account, isEdit, reset]); const isSaving = createAccount.isPending || updateAccount.isPending; const onSubmit = (values: AccountFormValues) => { if (isEdit && id) { updateAccount.mutate({ id, values }); return; } createAccount.mutate(values); }; if (isEdit && isLoading) { return ( ); } return ( {isEdit ? "Edit Account" : "Create an Account"} {Boolean(error) && ( {error instanceof Error ? error.message : "Failed to load account"} )} General Details Address ( Country )} /> ); }