Skip to content

Commit

Permalink
♻️ Make organisation type field required (#836)
Browse files Browse the repository at this point in the history
  • Loading branch information
bjlaa authored Feb 5, 2025
1 parent 4bff904 commit 35d78a2
Show file tree
Hide file tree
Showing 10 changed files with 63 additions and 60 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,19 +31,11 @@ export default function OrganisationFields({
{...register('name')}
/>
<Select
label={
<p className="mb-0 flex justify-between">
<Trans>Type d'organisation</Trans>{' '}
<span className="font-bold italic text-secondary-700">
{' '}
<Trans>facultatif</Trans>
</span>
</p>
}
label={<Trans>Type d'organisation</Trans>}
value={defaultValues.organisationType}
{...register('organisationType')}>
{/* Empty option to reset field */}
<option className="cursor-pointer"></option>
{...register('organisationType', {
required: t('Ce champ est requis'),
})}>
{Object.entries(ORGANISATION_TYPES).map(([key, value]) => (
<option className="cursor-pointer" key={key} value={key}>
{value}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
'use client'

import useLogin from '@/hooks/authentication/useLogin'
import { useUser } from '@/publicodes-state'
import dayjs from 'dayjs'
import EmailForm from './emailSection/EmailForm'
Expand All @@ -8,14 +9,28 @@ import VerificationForm from './emailSection/VerificationForm'
export default function EmailSection() {
const { user } = useUser()

const {
mutateAsync: login,
isPending: isPendingValidate,
isSuccess: isSuccessValidate,
} = useLogin()

const hasSavedValidLoginExpirationDate = user?.loginExpirationDate
? dayjs(user?.loginExpirationDate).isAfter(dayjs())
: false

if (!user) return null

if (hasSavedValidLoginExpirationDate) {
return <VerificationForm />
// We want to keep displaying the verification form when validated
// until redirecting to the next page
if (hasSavedValidLoginExpirationDate || isSuccessValidate) {
return (
<VerificationForm
login={login}
isPendingValidate={isPendingValidate}
isSuccessValidate={isSuccessValidate}
/>
)
}

return <EmailForm />
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,32 @@
import useLogin from '@/hooks/authentication/useLogin'
import useFetchOrganisations from '@/hooks/organisations/useFetchOrganisations'
import useTimeLeft from '@/hooks/organisations/useTimeleft'
import { useClientTranslation } from '@/hooks/useClientTranslation'
import { useCreateVerificationCode } from '@/hooks/verification-codes/useCreateVerificationCode'
import { useUser } from '@/publicodes-state'
import type { UseMutateAsyncFunction } from '@tanstack/react-query'
import dayjs from 'dayjs'
import { useRouter } from 'next/navigation'
import { useEffect, useRef, useState } from 'react'
import NotReceived from './verificationForm/NotReceived'
import VerificationContent from './verificationForm/VerificationContent'

export default function VerificationForm() {
export default function VerificationForm({
login,
isPendingValidate,
isSuccessValidate,
}: {
login: UseMutateAsyncFunction<
any,
Error,
{
email: string
code: string
},
unknown
>
isPendingValidate: boolean
isSuccessValidate: boolean
}) {
const { updateLoginExpirationDate, user, updateUserOrganisation } = useUser()

const [email, setEmail] = useState<string | undefined>(
Expand Down Expand Up @@ -44,13 +60,9 @@ export default function VerificationForm() {
isPending: isPendingResend,
} = useCreateVerificationCode()

const {
mutateAsync: login,
isPending: isPendingValidate,
isSuccess: isSuccessValidate,
} = useLogin()

const { refetch: fetchOrganisations } = useFetchOrganisations({ enabled: false })
const { refetch: fetchOrganisations } = useFetchOrganisations({
enabled: false,
})

function sendVerificationCode(email: string) {
setEmail(email)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,14 @@ import { usePreventNavigation } from '@/hooks/navigation/usePreventNavigation'
import { useCreateOrganisation } from '@/hooks/organisations/useCreateOrganisation'
import { useClientTranslation } from '@/hooks/useClientTranslation'
import { useUser } from '@/publicodes-state'
import { captureException } from '@sentry/react'
import { captureException } from '@sentry/nextjs'
import { useRouter } from 'next/navigation'
import { useEffect, useRef, useState } from 'react'
import { useForm as useReactHookForm } from 'react-hook-form'

type Inputs = {
name: string
organisationType?: OrganisationTypeEnum
organisationType: OrganisationTypeEnum
administratorName: string
hasOptedInForCommunications: boolean
shouldNavigateToPollForm?: boolean
Expand Down Expand Up @@ -58,7 +58,7 @@ export default function CreationForm() {
try {
const organisationUpdated = await createOrganisation({
name,
type: organisationType || OrganisationTypeEnum.other,
type: organisationType,
administrators: [
{
name: administratorName,
Expand Down Expand Up @@ -122,18 +122,13 @@ export default function CreationForm() {

<div>
<Select
label={
<p className="mb-0 flex justify-between">
<Trans>Type d'organisation</Trans>{' '}
<span className="font-bold italic text-secondary-700">
{' '}
<Trans>facultatif</Trans>
</span>
</p>
}
{...register('organisationType')}>
{/* Empty option to reset field */}
<option className="cursor-pointer"></option>
label={<Trans>Type d'organisation</Trans>}
error={formState.errors.organisationType?.message}
{...register('organisationType', {
required: t(
'Vous devez renseigner le type de votre organisation'
),
})}>
{Object.entries(ORGANISATION_TYPES).map(([key, value]) => (
<option className="cursor-pointer" key={key} value={key}>
{value}
Expand Down
4 changes: 1 addition & 3 deletions src/constants/organisations/organisationTypes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,9 @@ export enum OrganisationTypeEnum {

export const ORGANISATION_TYPES = {
[OrganisationTypeEnum.company]: t('Entreprise'),
[OrganisationTypeEnum.publicOrRegionalAuthority]: t(
'Public ou collectivité territoriale'
),
[OrganisationTypeEnum.cooperative]: t('Coopérative'),
[OrganisationTypeEnum.association]: t('Association'),
[OrganisationTypeEnum.publicOrRegionalAuthority]: t('Service public'),
[OrganisationTypeEnum.universityOrSchool]: t('Université ou école'),
[OrganisationTypeEnum.groupOfFriends]: t("Groupe d'amis"),
[OrganisationTypeEnum.other]: t('Autre'),
Expand Down
2 changes: 1 addition & 1 deletion src/hooks/organisations/useCreateOrganisation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import axios from 'axios'

type OrganisationToCreate = {
name: string
type?: OrganisationTypeEnum | null
type: OrganisationTypeEnum
numberOfCollaborators?: number
administrators?: [
{
Expand Down
3 changes: 3 additions & 0 deletions src/locales/ui/ui-en.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1568,3 +1568,6 @@ entries:
Super, vous êtes déjà inscrit !: Great, you're already registered!
Diffuser Nos Gestes Climat: Spreading Our Gestes Climat
'Oups, une erreur est survenue lors de la copie du lien, voici le lien à copier / coller :': 'Oops, there was an error copying the link, here is the link to copy / paste :'
Vous devez renseigner le type de votre organisation: You must enter the type of organisation
Votre nom complet: Your full name
Service public: Public services
3 changes: 3 additions & 0 deletions src/locales/ui/ui-es.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1561,3 +1561,6 @@ entries:
Diffuser Nos Gestes Climat: Difundir Nos Gestes Climat
Super, vous êtes déjà inscrit !: Genial, ¡ya estás registrado!
'Oups, une erreur est survenue lors de la copie du lien, voici le lien à copier / coller :': 'Oops, hubo un error al copiar el enlace, aquí está el enlace para copiar / pegar :'
Vous devez renseigner le type de votre organisation: Debe introducir el tipo de organización
Votre nom complet: Su nombre completo
Service public: Servicios públicos
19 changes: 2 additions & 17 deletions src/locales/ui/ui-fr.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,6 @@ entries:
Ce modèle a été conçu par: Ce modèle a été conçu par
model.questions: Découvrez <2>la liste des questions disponibles dans le modèle</2>.
Oups, nous n'avons pas d'article correspondant: Oups, nous n'avons pas d'article correspondant
Retour à la liste des articles: Retour à la liste des articles
Blog: Blog
simulations terminées: simulations terminées
Statistiques Northstar: Statistiques Northstar
Expand Down Expand Up @@ -188,14 +187,12 @@ entries:
Comparez vos résultats avec votre famille ou un groupe d’ami·e·s: Comparez vos résultats avec votre famille ou un groupe d’ami·e·s
Consultez la FAQ: Consultez la FAQ
'Date complète :': 'Date complète :'
'Découvrez nos articles de blog :': 'Découvrez nos articles de blog :'
disponibles: disponibles
Entrez des mots-clefs de recherche: Entrez des mots-clefs de recherche
Fermer le bandeau de feedback: Fermer le bandeau de feedback
'Identifiant :': 'Identifiant :'
Il concerne votre vie personnelle, et non pas votre boulot.: Il concerne votre vie personnelle, et non pas votre boulot.
international.comment.2: Explorez en détail les spécificités de chaque pays.
Le Blog: Le Blog
Les personas nous servent à tester le calculateur sous toutes ses coutures, et à vérifier qu’il s’adapte bien à toutes les situations de vie des citoyens métropolitains. De par leur présence, ils nous forcent à penser à tous les cas d’usage, pour nous projeter dans différentes réalités, et inclure ces réalités dans nos refontes du parcours de test et des actions proposées à la fin de ce dernier.: Les personas nous servent à tester le calculateur sous toutes ses coutures, et à vérifier qu’il s’adapte bien à toutes les situations de vie des citoyens métropolitains. De par leur présence, ils nous forcent à penser à tous les cas d’usage, pour nous projeter dans différentes réalités, et inclure ces réalités dans nos refontes du parcours de test et des actions proposées à la fin de ce dernier.
Logo de l'Association pour la transition Bas Carbone: Logo de l'Association pour la transition Bas Carbone
Mes réponses: Mes réponses
Expand Down Expand Up @@ -447,8 +444,6 @@ entries:
Accessibilité - Nos Gestes Climat: Accessibilité - Nos Gestes Climat
'Actions : comment réduire votre empreinte climat ? - Nos Gestes Climat': 'Actions : comment réduire votre empreinte climat ? - Nos Gestes Climat'
Actions, suite à votre simulation d'empreinte climat - Nos Gestes Climat: Actions, suite à votre simulation d'empreinte climat - Nos Gestes Climat
article du blog - Nos Gestes Climat: article du blog - Nos Gestes Climat
Blog - Nos Gestes Climat: Blog - Nos Gestes Climat
Budget - Nos Gestes Climat: Budget - Nos Gestes Climat
Calculer votre empreinte carbone avec vos amis - Nos Gestes Climat: Calculer votre empreinte carbone avec vos amis - Nos Gestes Climat
Calculer votre empreinte carbone individuelle - Nos Gestes Climat: Calculer votre empreinte carbone individuelle - Nos Gestes Climat
Expand All @@ -464,7 +459,6 @@ entries:
Découvrez comment nous utilisons vos données personnelles pour vous proposer un calculateur de bilan carbone personnel.: Découvrez comment nous utilisons vos données personnelles pour vous proposer un calculateur de bilan carbone personnel.
Découvrez le modèle de données de notre calculateur d'empreinte climat: Découvrez le modèle de données de notre calculateur d'empreinte climat
Découvrez les actions que vous pouvez mettre en place pour réduire votre empreinte carbone.: Découvrez les actions que vous pouvez mettre en place pour réduire votre empreinte carbone.
Découvrez les articles de blog du site Nos Gestes Climat.: Découvrez les articles de blog du site Nos Gestes Climat.
Découvrez les nouveautés du site Nos Gestes Climat.: Découvrez les nouveautés du site Nos Gestes Climat.
Découvrez les personas d'utilisateurs types qui nous servent à tester le calculateur sous toutes ses coutures.: Découvrez les personas d'utilisateurs types qui nous servent à tester le calculateur sous toutes ses coutures.
Diffuser notre calculateur d'empreinte climat - Nos Gestes Climat: Diffuser notre calculateur d'empreinte climat - Nos Gestes Climat
Expand Down Expand Up @@ -555,7 +549,6 @@ entries:
Entreprise: Entreprise
Groupe d'amis: Groupe d'amis
Le mode organisation est un mode <1>100% anonyme</1> pour les participants.: Le mode organisation est un mode <1>100% anonyme</1> pour les participants.
Public ou collectivité territoriale: Public ou collectivité territoriale
Type d'organisation: Type d'organisation
Université ou école: Université ou école
Vous devez renseigner votre nom: Vous devez renseigner votre nom
Expand Down Expand Up @@ -668,10 +661,7 @@ entries:
Tableau de bord: Tableau de bord
vous souhaitez lancer une campagne Nos Gestes Climat et sensibiliser toutes vos parties prenantes ? Découvrez nos outils 100% gratuits !: vous souhaitez lancer une campagne Nos Gestes Climat et sensibiliser toutes vos parties prenantes ? Découvrez nos outils 100% gratuits !
Ils ont testé: Ils ont testé
mis à jour le: mis à jour le
'Un article de ': 'Un article de '
'Découvrez les relais de Nos Gestes Climat : organisations, collectivités, médias, influenceurs, etc.': 'Découvrez les relais de Nos Gestes Climat : organisations, collectivités, médias, influenceurs, etc.'
Nos relais: Nos relais
Nos relais - Nos Gestes Climat: Nos relais - Nos Gestes Climat
'N.B. : aucun acteur cité ci-dessous ne finance Nos Gestes Climat, qui est et restera un service public, indépendant et gratuit de l’ADEME.': 'N.B. : aucun acteur cité ci-dessous ne finance Nos Gestes Climat, qui est et restera un service public, indépendant et gratuit de l’ADEME.'
', le': ', le'
Expand Down Expand Up @@ -780,7 +770,6 @@ entries:
chrono pour calculer votre empreinte carbone et eau: chrono pour calculer votre empreinte carbone et eau
Comment <1>agir</1> ?: Comment <1>agir</1> ?
Comment on la mesure ?: Comment on la mesure ?
d'eau <1>par jour</1>: d'eau <1>par jour</1>
d’eau domestique par jour: d’eau domestique par jour
D’où vient mon empreinte ?: D’où vient mon empreinte ?
Découvre mes empreintes: Découvre mes empreintes
Expand Down Expand Up @@ -1084,7 +1073,6 @@ entries:
Un tee-shirt, symbolisant la consommation d'eau pour l'industrie textile: Un tee-shirt, symbolisant la consommation d'eau pour l'industrie textile
Une balance indiquant la quantité d'eau nécessaire pour produire un ordinateur: Une balance indiquant la quantité d'eau nécessaire pour produire un ordinateur
Une pomme, symbolisant le lien entre eau et agriculture: Une pomme, symbolisant le lien entre eau et agriculture
<0>2 millions de personnes</0> ont déjà <3></3>calculé leur empreinte !: <0>2 millions de personnes</0> ont déjà <3></3>calculé leur empreinte !
Libre et documenté: Libre et documenté
L’empreinte eau d'un jean est de 30 000 litres d'eau.: L’empreinte eau d'un jean est de 30 000 litres d'eau.
La production d’un ordinateur nécessite 195 000 litres d’eau.: La production d’un ordinateur nécessite 195 000 litres d’eau.
Expand Down Expand Up @@ -1149,8 +1137,6 @@ entries:
La valeur pour ce champ est comprise entre: La valeur pour ce champ est comprise entre
En participant vous acceptez que vos résultats soient partagés anonymement avec cette organisation.: En participant vous acceptez que vos résultats soient partagés anonymement avec cette organisation.
'{{signe}} {{value}} {{unit}} sur votre empreinte {{metric}}': '{{signe}} {{value}} {{unit}} sur votre empreinte {{metric}}'
d'eau / jour: d'eau / jour
de CO₂e / an: de CO₂e / an
Aide: Aide
Cette section statistique est générée via Metabase.: Cette section statistique est générée via Metabase.
Il est question ici des modes "Organisations" et "Challenge tes amis". Cette section est générée via Metabase.: Il est question ici des modes "Organisations" et "Challenge tes amis". Cette section est générée via Metabase.
Expand All @@ -1160,11 +1146,10 @@ entries:
Empreinte carbone, voir le détail ci-dessous: Empreinte carbone, voir le détail ci-dessous
Empreinte eau, sélectionné, voir le détail ci-dessous: Empreinte eau, sélectionné, voir le détail ci-dessous
Empreinte eau, voir le détail ci-dessous: Empreinte eau, voir le détail ci-dessous
Bien noté ! Vous aurez prochainement de nos nouvelles.: Bien noté ! Vous aurez prochainement de nos nouvelles.
Diffuser Nos Gestes Climat: Diffuser Nos Gestes Climat
Inscrivez-vous à notre infolettre: Inscrivez-vous à notre infolettre
Qui sommes-nous: Qui sommes-nous
Relais et partenaires: Relais et partenaires
Ressources: Ressources
Super, vous êtes déjà inscrit !: Super, vous êtes déjà inscrit !
'Oups, une erreur est survenue lors de la copie du lien, voici le lien à copier / coller :': 'Oups, une erreur est survenue lors de la copie du lien, voici le lien à copier / coller :'
Vous devez renseigner le type de votre organisation: Vous devez renseigner le type de votre organisation
Service public: Service public
2 changes: 1 addition & 1 deletion src/types/organisations.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ type BaseOrganisation = {
slug: string
administrators?: [VerifiedUser]
polls?: Omit<OrganisationPoll, 'simulations'>[]
type?: OrganisationTypeEnum | null
type?: OrganisationTypeEnum
numberOfCollaborators?: number | null
hasCustomQuestionEnabled?: boolean
createdAt?: string
Expand Down

0 comments on commit 35d78a2

Please sign in to comment.