🐛 fixing profile data and some QA issues

This commit is contained in:
ChatonDeAru
2024-09-26 16:14:57 +02:00
parent 622841eed3
commit 4bc3a58b3e
18 changed files with 121 additions and 61 deletions

View File

@@ -2,6 +2,7 @@
import { object, string, boolean, type InferType } from 'yup'
import type { Database } from '@pel/supabase/types'
import type { FormSubmitEvent, FormErrorEvent } from '#ui/types'
import { lowerString } from '~/utils/commons';
definePageMeta({
name: 'Join',
@@ -16,8 +17,8 @@ const toast = useToast()
const { auth } = useSupabaseClient<Database>()
const schema = object({
email: string().lowercase().trim().email('Il semble que l\'email ne soit pas bon').required('Champ obligatoire'),
password: string().min(6, 'Il faudrait un minimum de 6 charactères').test({
email: string().lowercase().trim().max(500, 'hmmmm c\'est un peu beaucoup là non ?').email('Il semble que l\'email ne soit pas bon').required('Champ obligatoire'),
password: string().min(6, 'Il faudrait un minimum de 6 charactères').max(500, 'hmmmm c\'est un peu beaucoup là non ?').test({
name: 'password',
message: 'Le mot de passe n\'est pas assez fort ~~',
test: (value) => {
@@ -25,9 +26,10 @@ const schema = object({
return testPassword(value).score >= 3
},
}).required('Champ obligatoire'),
firstname: string().lowercase().trim().required('Champ obligatoire'),
lastname: string().lowercase().trim().required('Champ obligatoire'),
firstname: string().trim().max(500, 'hmmmm c\'est un peu beaucoup là non ?').required('Champ obligatoire'),
lastname: string().trim().max(500, 'hmmmm c\'est un peu beaucoup là non ?').required('Champ obligatoire'),
isAdult: boolean().oneOf([true], 'Pour pouvoir t\'inscrire tu dois être majeur (ou bientôt)'),
lastEdition: boolean(),
})
type Schema = InferType<typeof schema>
@@ -40,6 +42,7 @@ const state = reactive({
firstname: undefined,
lastname: undefined,
isAdult: false,
lastEdition: false,
})
async function onSubmit(event: FormSubmitEvent<Schema>) {
@@ -48,13 +51,14 @@ async function onSubmit(event: FormSubmitEvent<Schema>) {
// Do something with event.data
const formSubmit = event.data
const { data, error } = await auth.signUp({
email: formSubmit.email,
email: lowerString(formSubmit.email),
password: formSubmit.password,
options: {
data: {
firstname: formSubmit.firstname,
lastname: formSubmit.lastname,
firstname: lowerString(formSubmit.firstname),
lastname: lowerString(formSubmit.lastname),
is_adult: formSubmit.isAdult,
last_edition: formSubmit.lastEdition,
},
emailRedirectTo: `${config.public.baseUrl}/join/valid`,
},
@@ -96,7 +100,7 @@ async function onError(event: FormErrorEvent) {
formulaire ci-dessous:
</p>
<UForm ref="form" :schema="schema" :state="state" @submit="onSubmit" @error="onError">
<UForm ref="form" :schema="schema" :state="state" @submit="onSubmit" @error="onError" class="my-8">
<UFormGroup :ui="formGroupStyle.ui" label="Adresse courriel" name="email">
<template #default="{ error }">
<UInput :ui="inputStyle.ui" v-bind="inputStyle.attrs" placeholder="Adresse courriel" v-model="state.email"
@@ -121,11 +125,14 @@ async function onError(event: FormErrorEvent) {
<div class="flex md:flex-row flex-col gap-4 mb-4">
<div class="flex-1">
<UFormGroup :ui="formGroupStyle.ui" label="Prénom" name="firstname">
<UFormGroup :ui="formGroupStyle.ui" label="Prénom (le vrai !)" name="firstname">
<template #default="{ error }">
<UInput :ui="inputStyle.ui" v-bind="inputStyle.attrs" placeholder="Roger" v-model="state.firstname"
:trailing-icon="error ? 'i-heroicons-exclamation-triangle-20-solid' : undefined" />
</template>
<template #help>
Attention pas de pseudos/surnom ici ! (sinon nous ne pouvons pas valider ton profil)
</template>
</UFormGroup>
</div>
@@ -139,11 +146,19 @@ async function onError(event: FormErrorEvent) {
</div>
</div>
<UFormGroup name="lastEdition" class="my-8">
<UCheckbox label="J'ai participer à la précédente édition ?" v-model="state.lastEdition" />
<template #help>
Dis nous si tu étais déjà bénévole à la dernière édition.<br>
Surtout ne mens pas, on vous connait ! (et on a les photos)
</template>
</UFormGroup>
<UFormGroup name="isAdult" class="mb-4">
<UCheckbox label="Je serais majeur avant la prochaine édition." v-model="state.isAdult" />
</UFormGroup>
<UButton type="submit" :loading="isJoining" :disabled="isJoining">S'inscrire</UButton>
<UButton color="orange" type="submit" :loading="isJoining" :disabled="isJoining">S'inscrire</UButton>
</UForm>
</UCard>
</template>