From b93472698b42499d1f164d1edeb279a2f8714ed1 Mon Sep 17 00:00:00 2001 From: DavePk04 <Dave.Pikop.Pokam@ulb.be> Date: Sat, 29 Mar 2025 22:52:58 +0100 Subject: [PATCH] feat(profile): Enhance profile form with DaisyUI styling and fix data handling --- .../src/routes/tutor/profile/+page.svelte | 143 +++++++++--------- 1 file changed, 74 insertions(+), 69 deletions(-) diff --git a/frontend/src/routes/tutor/profile/+page.svelte b/frontend/src/routes/tutor/profile/+page.svelte index 5ba2a3d7..a1285fbe 100644 --- a/frontend/src/routes/tutor/profile/+page.svelte +++ b/frontend/src/routes/tutor/profile/+page.svelte @@ -8,14 +8,10 @@ const formatBirthdate = (dateStr: string | Date | undefined): string => { if (!dateStr) return ''; const date = new Date(dateStr); - if (!isNaN(date.getTime())) { - return date.toISOString().split('T')[0]; - } + 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')}`; - } + if (year?.length === 4) return `${year}-${month.padStart(2, '0')}-${day.padStart(2, '0')}`; } return ''; }; @@ -32,7 +28,6 @@ async function updateProfile() { try { const parsedAvailabilities = availabilities ? JSON.parse(availabilities) : []; - console.log('birth:', new Date(birthdate).toISOString()); const updateData = { email, nickname, @@ -48,7 +43,6 @@ } else { throw new Error($t('header.tutor.userNotFound')); } - console.log('Update success:', success); if (success) { alert($t('header.tutor.updatedSuccessfully')); } else { @@ -61,91 +55,102 @@ } </script> -<h1 class="text-2xl font-bold text-center my-5">{$t('header.tutor.profile')}</h1> +<h1 class="text-3xl font-bold text-center mb-8 text-primary"> + {$t('header.tutor.profile')} +</h1> -<div class="max-w-lg mx-auto bg-white shadow-md rounded-lg p-6"> - <form on:submit|preventDefault={updateProfile}> - <div class="mb-4"> - <label for="email" class="block text-sm font-medium text-gray-700">{$t('home.email')}</label> - <input - type="email" - id="email" - bind:value={email} - class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm" - required - /> - </div> +<div class="card bg-base-100 shadow-xl max-w-2xl mx-auto p-8"> + <form on:submit|preventDefault={updateProfile} class="space-y-4"> + <div class="grid grid-cols-1 md:grid-cols-2 gap-4"> + <div class="form-control"> + <label class="label" for="email"> + <span class="label-text">{$t('home.email')}</span> + </label> + <input + type="email" + id="email" + bind:value={email} + class="input input-bordered focus:input-primary" + required + /> + </div> - <div class="mb-4"> - <label for="nickname" class="block text-sm font-medium text-gray-700" - >{$t('home.nickname')}</label - > - <input - type="text" - id="nickname" - bind:value={nickname} - class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm" - required - /> - </div> + <div class="form-control"> + <label class="label" for="nickname"> + <span class="label-text">{$t('home.nickname')}</span> + </label> + <input + type="text" + id="nickname" + bind:value={nickname} + class="input input-bordered focus:input-primary" + required + /> + </div> - <div class="mb-4"> - <label for="birthdate" class="block text-sm font-medium text-gray-700" - >{$t('home.birthdate')}</label - > - <input - type="date" - id="birthdate" - bind:value={birthdate} - class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm" - required - /> - </div> + <div class="form-control"> + <label class="label" for="birthdate"> + <span class="label-text">{$t('home.birthdate')}</span> + </label> + <input + type="date" + id="birthdate" + bind:value={birthdate} + class="input input-bordered focus:input-primary" + required + /> + </div> - <div class="mb-4"> - <label for="gender" class="block text-sm font-medium text-gray-700" - >{$t('users.gender')}</label - > - <select - id="gender" - bind:value={gender} - class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm" - required - > - <option value="" disabled>{$t('header.tutor.selectGender')}</option> - <option value="male">{$t('users.genders.male')}</option> - <option value="female">{$t('users.genders.female')}</option> - <option value="other">{$t('users.genders.other')}</option> - </select> + <div class="form-control"> + <label class="label" for="gender"> + <span class="label-text">{$t('users.gender')}</span> + </label> + <select + id="gender" + bind:value={gender} + class="select select-bordered focus:select-primary" + required + > + <option value="" disabled>{$t('header.tutor.selectGender')}</option> + <option value="male">{$t('users.genders.male')}</option> + <option value="female">{$t('users.genders.female')}</option> + <option value="other">{$t('users.genders.other')}</option> + </select> + </div> </div> - <div class="mb-4"> - <label for="bio" class="block text-sm font-medium text-gray-700">{$t('register.bio')}</label> + <div class="form-control"> + <label class="label" for="bio"> + <span class="label-text">{$t('register.bio')}</span> + </label> <textarea id="bio" rows="4" bind:value={bio} placeholder={$t('header.tutor.bio')} - class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm" + class="textarea textarea-bordered focus:textarea-primary h-24" required ></textarea> </div> - <div class="mb-4"> - <label for="availabilities" class="block text-sm font-medium text-gray-700" - >{$t('register.availabilities')}</label - > + <div class="form-control"> + <label class="label" for="availabilities"> + <span class="label-text"> + {$t('register.availabilities')} + <span class="text-xs text-info ml-2">(JSON format)</span> + </span> + </label> <textarea id="availabilities" rows="4" bind:value={availabilities} placeholder={$t('header.tutor.availabilities')} - class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm" + class="textarea textarea-bordered focus:textarea-primary font-mono h-32" required ></textarea> </div> - <button type="submit" class="button"> + <button type="submit" class="btn btn-primary w-full mt-6 text-lg"> {$t('header.tutor.update')} </button> </form> -- GitLab