diff --git a/README.md b/README.md index 6efa1cc..b5d3934 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ [![Netlify Status](https://api.netlify.com/api/v1/badges/bcf66326-b808-4ffd-9018-fb24315fce5f/deploy-status)](https://app.netlify.com/sites/force-orange/deploys) +![Supabase](https://img.shields.io/badge/Supabase-3ECF8E?style=for-the-badge&logo=supabase&logoColor=white) # ForceOrange Le site des bénévoles de Paris est Ludique ! diff --git a/modules/app/app.vue b/modules/app/app.vue index dfd464f..0313bfe 100644 --- a/modules/app/app.vue +++ b/modules/app/app.vue @@ -11,4 +11,8 @@ auth.onAuthStateChange(async (event) => { - \ No newline at end of file + + + \ No newline at end of file diff --git a/modules/app/assets/main.css b/modules/app/assets/main.css new file mode 100644 index 0000000..316f1ae --- /dev/null +++ b/modules/app/assets/main.css @@ -0,0 +1,3 @@ +.position-unset { + position: unset; +} \ No newline at end of file diff --git a/modules/app/components/FOHeader.vue b/modules/app/components/FOHeader.vue index 443b19a..6a45952 100644 --- a/modules/app/components/FOHeader.vue +++ b/modules/app/components/FOHeader.vue @@ -14,7 +14,7 @@ const links = computed(() => { if (!user.value) { tmp.push({ - label: 'Rejoindre FO', + label: 'S\'inscrire sur FO', to: '/join' }) } else { @@ -31,6 +31,8 @@ const signOut = async () => { const { error } = await auth.signOut() if (error) console.log(error) router.push('/') + + // TOFIX } diff --git a/modules/app/components/profile/EmailUpdateForm.vue b/modules/app/components/profile/EmailUpdateForm.vue index eb65faa..8ab4348 100644 --- a/modules/app/components/profile/EmailUpdateForm.vue +++ b/modules/app/components/profile/EmailUpdateForm.vue @@ -2,6 +2,7 @@ import { object, string, type InferType } from 'yup' import type { Database } from '@pel/supabase/types' import type { FormSubmitEvent } from '#ui/types' +import { lowerString } from '~/utils/commons'; definePageMeta({ name: 'EmailUpdateForm', @@ -15,7 +16,7 @@ const { inputStyle, formGroupStyle } = useFoStyle() const loading = ref(false) const schema = object({ - email: string().lowercase().trim().email('Il semble que l\'email ne soit pas bon').required('Champ obligatoire'), + email: string().lowercase().trim().email('Il semble que l\'email ne soit pas bon').max(500, 'hmmmm c\'est un peu beaucoup là non ?').required('Champ obligatoire'), }) type Schema = InferType @@ -29,7 +30,7 @@ async function onSave(event: FormSubmitEvent) { const formSubmit = event.data const { data, error } = await auth.updateUser({ - email: formSubmit.email, + email: lowerString(formSubmit.email), }) if (error) { diff --git a/modules/app/components/profile/PasswordUpdateForm.vue b/modules/app/components/profile/PasswordUpdateForm.vue index bf2bd43..8134f73 100644 --- a/modules/app/components/profile/PasswordUpdateForm.vue +++ b/modules/app/components/profile/PasswordUpdateForm.vue @@ -17,7 +17,7 @@ const { inputStyle, formGroupStyle } = useFoStyle() const loading = ref(false) const schema = object({ - password: string().min(6, 'Il faudrait un minimum de 6 charactères').test({ + 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) => { diff --git a/modules/app/composables/auth.ts b/modules/app/composables/auth.ts deleted file mode 100644 index 50f48d6..0000000 --- a/modules/app/composables/auth.ts +++ /dev/null @@ -1,13 +0,0 @@ -export const useAuth = () => { - const user = useSupabaseUser() - const { auth } = useSupabaseClient() - - auth.onAuthStateChange(async (event) => { - if (event === 'SIGNED_OUT') - navigateTo('/') - }) - - return { - user - } -} \ No newline at end of file diff --git a/modules/app/composables/foStyle.ts b/modules/app/composables/foStyle.ts index b3ae324..35344a7 100644 --- a/modules/app/composables/foStyle.ts +++ b/modules/app/composables/foStyle.ts @@ -2,7 +2,7 @@ export const useFoStyle = () => { return { inputStyle: { ui: { - placeholder: 'placeholder-transparent', + placeholder: 'placeholder-transparent dark:placeholder-transparent', }, attrs: { variant: 'none' @@ -10,10 +10,11 @@ export const useFoStyle = () => { }, formGroupStyle: { ui: { - wrapper: 'flex flex-col md:flex-row rounded-lg py-1 px-4 border-b-2 border-orange-500 has-[:focus]:bg-orange-100 has-[:focus]:border-t-2 has-[:focus]:border-x-2 has-[:focus]:border-b-0 mb-6', + wrapper: 'flex flex-col relative md:flex-row rounded-lg py-1 px-4 border-b-2 border-orange-500 has-[:focus]:bg-orange-100 dark:border-orange-500 dark:has-[:focus]:bg-orange-800 has-[:focus]:border-t-2 has-[:focus]:border-x-2 has-[:focus]:border-b-0 mb-6', inner: 'flex-2 content-center', - container: 'flex-1 mt-auto relative', + container: 'flex-1 mt-auto position-unset', error: 'text-red-500 text-sm absolute top[-100%] left-0 mt-2 pointer-events-none', + help: 'absolute top[-100%] left-0 mt-2 pointer-events-none', }, }, } diff --git a/modules/app/composables/profile.ts b/modules/app/composables/profile.ts index 02cbeef..33412e3 100644 --- a/modules/app/composables/profile.ts +++ b/modules/app/composables/profile.ts @@ -7,7 +7,9 @@ export const useProfile = () => { const profile = ref<{ firstname: string lastname: string - displayname?: string + displayname: string | null + email: string + is_validated: boolean } | null>(null) const displayName = computed(() => { @@ -37,8 +39,13 @@ export const useProfile = () => { return } - const { data, error } = await client.from('profiles').select('id,firstname,lastname,displayname,mail').eq('id', user.value.id).single() - return data + const { data, error } = await client.from('profiles').select('id,firstname,lastname,displayname,email,is_validated').eq('id', user.value.id).single() + + if (!error) { + return data + } + + return null }) if (error.value) { @@ -53,6 +60,8 @@ export const useProfile = () => { watch(user, (user) => { if (user && !loading.value) { getProfile() + } else { + profile.value = null } }, { immediate: true }) diff --git a/modules/app/pages/join/index.vue b/modules/app/pages/join/index.vue index 6debae8..a088b82 100644 --- a/modules/app/pages/join/index.vue +++ b/modules/app/pages/join/index.vue @@ -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() 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 @@ -40,6 +42,7 @@ const state = reactive({ firstname: undefined, lastname: undefined, isAdult: false, + lastEdition: false, }) async function onSubmit(event: FormSubmitEvent) { @@ -48,13 +51,14 @@ async function onSubmit(event: FormSubmitEvent) { // 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:

- + \ No newline at end of file diff --git a/modules/app/pages/profile/index.vue b/modules/app/pages/profile/index.vue index 1dca4c1..a33ed4a 100644 --- a/modules/app/pages/profile/index.vue +++ b/modules/app/pages/profile/index.vue @@ -17,13 +17,19 @@ const isEmailModalOpen = ref(false)

{{ displayName }}

+ +

+ Ton compte sera bientôt validé pour les organisateurs du festival Paris Est Ludique.
+

+ +

Ton compte a été validé ! Prêt pour Paris Est Ludique 2025 ?

Authentification

Gérer mes manières de me connecter au site de Force Orange.

-

{{ profile.mail }}

+

{{ profile?.email }}

Modifier mon adresse de couriel diff --git a/modules/app/pages/signin/forgot.vue b/modules/app/pages/signin/forgot.vue index b91919e..7361eed 100644 --- a/modules/app/pages/signin/forgot.vue +++ b/modules/app/pages/signin/forgot.vue @@ -2,6 +2,7 @@ import { object, string, type InferType } from 'yup' import type { Database } from '@pel/supabase/types' import type { FormSubmitEvent } from '#ui/types' +import { lowerString } from '~/utils/commons'; definePageMeta({ name: 'SigninForgot', @@ -31,7 +32,7 @@ async function onSend(event: FormSubmitEvent) { loading.value = true const formSubmit = event.data - const { data, error } = await auth.resetPasswordForEmail(formSubmit.email, { + const { data, error } = await auth.resetPasswordForEmail(lowerString(formSubmit.email), { redirectTo: `${config.public.baseUrl}/profile/auth/reset`, }) @@ -59,7 +60,7 @@ async function onSend(event: FormSubmitEvent) {