diff --git a/app/auth/update-account/_components/update-account-form.tsx b/app/auth/update-account/_components/update-account-form.tsx index 58887f0..bdda351 100644 --- a/app/auth/update-account/_components/update-account-form.tsx +++ b/app/auth/update-account/_components/update-account-form.tsx @@ -2,8 +2,6 @@ import Link from 'next/link'; -import { User } from '@supabase/supabase-js'; - import { ExternalLink } from '@/public/assets/external-link'; import { zodResolver } from '@hookform/resolvers/zod'; import { useForm } from 'react-hook-form'; @@ -23,31 +21,52 @@ import { Trans } from '@kit/ui/trans'; import { UpdateAccountSchema } from '../_lib/schemas/update-account.schema'; import { onUpdateAccount } from '../_lib/server/update-account'; +import { z } from 'zod'; -export function UpdateAccountForm({ user }: { user: User }) { +type UpdateAccountFormValues = z.infer; + +export function UpdateAccountForm({ + defaultValues, +}: { + defaultValues: UpdateAccountFormValues, +}) { const form = useForm({ resolver: zodResolver(UpdateAccountSchema), mode: 'onChange', - defaultValues: { - firstName: '', - lastName: '', - personalCode: '', - email: user.email, - phone: '', - city: '', - weight: 0, - height: 0, - userConsent: false, - }, + defaultValues, }); + + const { firstName, lastName, personalCode, email, weight, height, userConsent } = defaultValues; + + const hasFirstName = !!firstName; + const hasLastName = !!lastName; + const hasPersonalCode = !!personalCode; + const hasEmail = !!email; + const hasWeight = !!weight; + const hasHeight = !!height; + const hasUserConsent = !!userConsent; + + const onUpdateAccountOptions = async (values: UpdateAccountFormValues) => + onUpdateAccount({ + ...values, + ...(hasFirstName && { firstName }), + ...(hasLastName && { lastName }), + ...(hasPersonalCode && { personalCode }), + ...(hasEmail && { email }), + ...(hasWeight && { weight: values.weight ?? weight }), + ...(hasHeight && { height: values.height ?? height }), + ...(hasUserConsent && { userConsent: values.userConsent ?? userConsent }), + }); + return (
( @@ -63,6 +82,7 @@ export function UpdateAccountForm({ user }: { user: User }) { ( @@ -78,6 +98,7 @@ export function UpdateAccountForm({ user }: { user: User }) { ( @@ -93,13 +114,14 @@ export function UpdateAccountForm({ user }: { user: User }) { ( - + diff --git a/app/auth/update-account/page.tsx b/app/auth/update-account/page.tsx index 28a6395..fc94740 100644 --- a/app/auth/update-account/page.tsx +++ b/app/auth/update-account/page.tsx @@ -11,18 +11,39 @@ import { Trans } from '@kit/ui/trans'; import { withI18n } from '~/lib/i18n/with-i18n'; import { UpdateAccountForm } from './_components/update-account-form'; +import { loadCurrentUserAccount } from '@/app/home/(user)/_lib/server/load-user-account'; +import { toTitleCase } from '~/lib/utils'; async function UpdateAccount() { const client = getSupabaseServerClient(); + const account = await loadCurrentUserAccount(); const { data: { user }, } = await client.auth.getUser(); + const isKeycloakUser = user?.app_metadata?.provider === 'keycloak'; if (!user) { redirect(pathsConfig.auth.signIn); } + const defaultValues = { + firstName: account?.name ? toTitleCase(account.name) : '', + lastName: account?.last_name ? toTitleCase(account.last_name) : '', + personalCode: account?.personal_code ?? '', + email: (() => { + if (isKeycloakUser) { + return account?.email ?? ''; + } + return account?.email ?? user?.email ?? ''; + })(), + phone: account?.phone ?? '', + city: account?.city ?? '', + weight: account?.accountParams?.weight ?? 0, + height: account?.accountParams?.height ?? 0, + userConsent: account?.has_consent_personal_data ?? false, + }; + return (
@@ -34,7 +55,7 @@ async function UpdateAccount() {

- +