'use client'; import Link from 'next/link'; import { useTranslation } from 'react-i18next'; import { useRouter } from 'next/navigation'; import { z } from 'zod'; import { ExternalLink } from '@/public/assets/external-link'; import { zodResolver } from '@hookform/resolvers/zod'; import { useForm } from 'react-hook-form'; import { Button } from '@kit/ui/button'; import { Checkbox } from '@kit/ui/checkbox'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from '@kit/ui/form'; import { Input } from '@kit/ui/input'; import { Trans } from '@kit/ui/trans'; import { UpdateAccountSchemaClient } from '../_lib/schemas/update-account.schema'; import { onUpdateAccount } from '../_lib/server/update-account'; import { toast } from '@kit/ui/sonner'; import { pathsConfig } from '@/packages/shared/src/config'; type UpdateAccountFormValues = z.infer>; export function UpdateAccountForm({ defaultValues, isEmailUser, }: { defaultValues: UpdateAccountFormValues, isEmailUser: boolean, }) { const router = useRouter(); const { t } = useTranslation('account'); const form = useForm({ resolver: zodResolver(UpdateAccountSchemaClient({ isEmailUser })), mode: 'onChange', defaultValues, }); const { firstName, lastName, personalCode, email, userConsent } = defaultValues; const defaultValues_weight = "weight" in defaultValues ? defaultValues.weight : null; const defaultValues_height = "height" in defaultValues ? defaultValues.height : null; const hasFirstName = !!firstName; const hasLastName = !!lastName; const hasPersonalCode = !!personalCode; const hasEmail = !!email; const onUpdateAccountOptions = async (values: UpdateAccountFormValues) => { const loading = toast.loading(t('updateAccount.updateAccountLoading')); try { const response = await onUpdateAccount({ firstName: values.firstName || firstName, lastName: values.lastName || lastName, personalCode: values.personalCode || personalCode, email: values.email || email, phone: values.phone, weight: ((("weight" in values && values.weight) ?? defaultValues_weight) || null) as number, height: ((("height" in values && values.height) ?? defaultValues_height) || null) as number, userConsent: values.userConsent ?? userConsent, city: values.city, }); if (!response) { throw new Error('Failed to update account'); } toast.dismiss(loading); toast.success(t('updateAccount.updateAccountSuccess')); if (response.hasUnseenMembershipConfirmation) { router.push(pathsConfig.auth.membershipConfirmation); } else { router.push(pathsConfig.app.selectPackage); } } catch (error) { console.info("promiseresult error", error); toast.error(t('updateAccount.updateAccountError')); toast.dismiss(loading); } }; return (
( )} /> ( )} /> ( )} /> ( )} /> ( )} /> {!isEmailUser && ( <> ( )} />
( field.onChange( e.target.value === '' ? null : Number(e.target.value), ) } /> )} /> ( field.onChange( e.target.value === '' ? null : Number(e.target.value), ) } /> )} />
)} (
)} /> ); }