diff --git a/src/lib/validations/account.ts b/src/lib/validations/account.ts index 8fc452f..27715af 100644 --- a/src/lib/validations/account.ts +++ b/src/lib/validations/account.ts @@ -4,10 +4,13 @@ import { userSchema } from './zod-schemas'; export const profileSchema = userSchema.pick({ firstName: true, lastName: true, - email: true, username: true }); +export const changeEmailSchema = userSchema.pick({ + email: true, +}); + export const changeUserPasswordSchema = z .object({ current_password: z.string({ required_error: 'Current Password is required' }), diff --git a/src/routes/(app)/(protected)/profile/+page.server.ts b/src/routes/(app)/(protected)/profile/+page.server.ts index 9577304..1ce3a23 100644 --- a/src/routes/(app)/(protected)/profile/+page.server.ts +++ b/src/routes/(app)/(protected)/profile/+page.server.ts @@ -3,21 +3,12 @@ import { eq } from 'drizzle-orm'; import { zod } from 'sveltekit-superforms/adapters'; import { message, setError, superValidate } from 'sveltekit-superforms/server'; import { redirect } from 'sveltekit-flash-message/server'; -import { userSchema } from '$lib/validations/zod-schemas'; +import { changeEmailSchema, profileSchema } from '$lib/validations/account'; import type { PageServerLoad } from './$types'; import { users } from '../../../../schema'; import db from '$lib/drizzle'; -const profileSchema = userSchema.pick({ - firstName: true, - lastName: true, - email: true, - username: true -}); - export const load: PageServerLoad = async (event) => { - const form = await superValidate(event, zod(profileSchema)); - if (!event.locals.user) { const message = { type: 'error', message: 'You are not signed in' } as const; throw redirect(302, '/login', message, event); @@ -25,14 +16,22 @@ export const load: PageServerLoad = async (event) => { const { user } = event.locals; - form.data = { - firstName: user.firstName, - lastName: user.lastName, - email: user.email, - username: user.username - }; + const profileForm = await superValidate(zod(profileSchema), { + defaults: { + firstName: user.firstName, + lastName: user.lastName, + username: user.username + } + }); + const emailForm = await superValidate(zod(changeEmailSchema), { + defaults: { + email: user.email + } + }); + return { - form + profileForm, + emailForm, }; }; diff --git a/src/routes/(app)/(protected)/profile/+page.svelte b/src/routes/(app)/(protected)/profile/+page.svelte index 4884881..9cbf61e 100644 --- a/src/routes/(app)/(protected)/profile/+page.svelte +++ b/src/routes/(app)/(protected)/profile/+page.svelte @@ -2,7 +2,7 @@ import { zodClient } from 'sveltekit-superforms/adapters'; import { superForm } from 'sveltekit-superforms/client'; import { AlertTriangle, KeyRound } from 'lucide-svelte'; - import { profileSchema } from '$lib/validations/account'; + import { changeEmailSchema, profileSchema } from '$lib/validations/account'; import * as Alert from "$lib/components/ui/alert"; import { Label } from '$lib/components/ui/label'; import { Input } from '$components/ui/input'; @@ -10,14 +10,20 @@ export let data; - const { form, errors, enhance, message } = superForm(data.form, { + const { form: profileForm, errors: profileErrors, enhance: profileEnhance } = superForm(data.profileForm, { taintedMessage: null, validators: zodClient(profileSchema), delayMs: 0 }); + + const { form: emailForm, errors: emailErrors, enhance: emailEnhance } = superForm(data.emailForm, { + taintedMessage: null, + validators: zodClient(changeEmailSchema), + delayMs: 0 + }) -