From 010353d0784110967b19ce24fa8549abccd6dc01 Mon Sep 17 00:00:00 2001 From: DavePk04 <Dave.Pikop.Pokam@ulb.be> Date: Sat, 29 Mar 2025 22:38:34 +0100 Subject: [PATCH] Connect form submission to PATCH user API endpoint --- frontend/src/lang/en.json | 3 + frontend/src/lang/fr.json | 3 + .../src/routes/tutor/profile/+page.svelte | 68 +++++++++++-------- 3 files changed, 45 insertions(+), 29 deletions(-) diff --git a/frontend/src/lang/en.json b/frontend/src/lang/en.json index 929a2b0c..5816857a 100644 --- a/frontend/src/lang/en.json +++ b/frontend/src/lang/en.json @@ -11,6 +11,9 @@ "tutor": { "profile": "My profile", "update": "Update", + "updatedSuccessfully": "Profile updated successfully", + "updateError": "Error updating profile", + "userNotFound": "User not found", "selectGender": "Select your gender", "bio": "Biography", "availabilities": "Availabilities" diff --git a/frontend/src/lang/fr.json b/frontend/src/lang/fr.json index 47c3c157..9e6b4465 100644 --- a/frontend/src/lang/fr.json +++ b/frontend/src/lang/fr.json @@ -16,6 +16,9 @@ }, "tutor": { "profile": "Mon profil", + "updatedSuccessfully": "Profil mis à jour avec succès", + "updateError": "Erreur lors de la mise à jour du profil", + "userNotFound": "Utilisateur non trouvé", "update": "Confirmer", "selectGender": "Sélectionnez votre genre", "bio": "Biographie", diff --git a/frontend/src/routes/tutor/profile/+page.svelte b/frontend/src/routes/tutor/profile/+page.svelte index 3825c59c..5ba2a3d7 100644 --- a/frontend/src/routes/tutor/profile/+page.svelte +++ b/frontend/src/routes/tutor/profile/+page.svelte @@ -1,50 +1,63 @@ <script lang="ts"> import { t } from '$lib/services/i18n'; + import { patchUserAPI } from '$lib/api/users'; import type { PageData } from './$types'; let { data }: { data: PageData } = $props(); - const formatBirthdate = (dateStr: string | undefined): string => { + const formatBirthdate = (dateStr: string | Date | undefined): string => { if (!dateStr) return ''; - const isoDate = dateStr.split('T')[0]; - if (/^\d{4}-\d{2}-\d{2}$/.test(isoDate)) return isoDate; - const [day, month, year] = dateStr.split('/'); - if (year?.length === 4) { - return `${year}-${month.padStart(2, '0')}-${day.padStart(2, '0')}`; + const date = new Date(dateStr); + if (!isNaN(date.getTime())) { + return date.toISOString().split('T')[0]; + } + if (typeof dateStr === 'string') { + const [day, month, year] = dateStr.split('/'); + if (year?.length === 4) { + return `${year}-${month.padStart(2, '0')}-${day.padStart(2, '0')}`; + } } - return ''; }; let email = data.user?.email || ''; let nickname = data.user?.nickname || ''; - let birthdate = formatBirthdate( - data.user?.birthdate ? data.user.birthdate.toString() : undefined - ); + let birthdate = formatBirthdate(data.user?.birthdate ?? undefined); let gender = data.user?.gender || ''; let bio = data.user?.bio || ''; let availabilities = data.user?.availabilities ? JSON.stringify(data.user.availabilities, null, 2) : ''; - function updateProfile() { - let parsedAvailabilities; + async function updateProfile() { try { - parsedAvailabilities = availabilities ? JSON.parse(availabilities) : []; + const parsedAvailabilities = availabilities ? JSON.parse(availabilities) : []; + console.log('birth:', new Date(birthdate).toISOString()); + const updateData = { + email, + nickname, + birthdate, + gender, + bio, + availabilities: parsedAvailabilities + }; + + let success = false; + if (data.user) { + success = await patchUserAPI(fetch, data.user.id, updateData); + } else { + throw new Error($t('header.tutor.userNotFound')); + } + console.log('Update success:', success); + if (success) { + alert($t('header.tutor.updatedSuccessfully')); + } else { + alert($t('header.tutor.updateError')); + } } catch (error) { - alert($t('errors.invalidAvailabilities')); - return; + console.error('Update failed:', error); + alert(error instanceof Error ? error.message : $t('errors.updateFailed')); } - - console.log({ - email, - nickname, - birthdate, - gender, - bio, - availabilities: parsedAvailabilities - }); - alert($t('profile.updatedSuccessfully')); } </script> @@ -132,10 +145,7 @@ ></textarea> </div> - <button - type="submit" - class="w-full bg-indigo-600 hover:bg-indigo-700 text-white font-bold py-2 px-4 rounded-md shadow-md focus:outline-none focus:ring focus:ring-indigo-200" - > + <button type="submit" class="button"> {$t('header.tutor.update')} </button> </form> -- GitLab