import React, { useState, useEffect } from 'react'; import { useStore } from '../stores/store'; import { api } from '../stores/api'; const jourLabel = (jour) => { if (!jour) return 'Jour à préciser'; return jour.charAt(0).toUpperCase() + jour.slice(1); }; export default function Login() { const { login, loading, error, groupes, loadGroupes, setPage } = useStore(); const [courriel, setCourriel] = useState(localStorage.getItem('gm_courriel') || ''); const [pin, setPin] = useState(''); const [groupeId, setGroupeId] = useState(localStorage.getItem('gm_groupe_id') || ''); const [groupeOuvert, setGroupeOuvert] = useState(''); const [seSouvenir, setSeSouvenir] = useState(!!localStorage.getItem('gm_courriel')); const [sysadminOuvert, setSysadminOuvert] = useState(false); const [sysadminPin, setSysadminPin] = useState(''); useEffect(() => { if (groupes.length === 0) loadGroupes(); }, []); useEffect(() => { if (groupes.length === 0) return; const groupeExiste = groupes.some((g) => g.id === groupeId); if (groupeId && groupeExiste) return; const prochainGroupeId = groupes.length === 1 ? groupes[0].id : ''; setGroupeId(prochainGroupeId); if (prochainGroupeId) { localStorage.setItem('gm_groupe_id', prochainGroupeId); } else { localStorage.removeItem('gm_groupe_id'); } }, [groupes, groupeId]); const ouvrirGroupe = (id) => { const prochain = groupeOuvert === id ? '' : id; setGroupeOuvert(prochain); setGroupeId(id); localStorage.setItem('gm_groupe_id', id); }; const handleSubmit = async (e) => { e.preventDefault(); if (!courriel || !pin || !groupeId) return; try { await login(courriel, pin, groupeId, seSouvenir); } catch {} }; const ouvrirSysadmin = async (e) => { e.preventDefault(); if (sysadminPin.length !== 4) return; try { const data = await api.post('/admin/sysadmin-login', { pin: sysadminPin }); api.setToken(data.access_token, false); localStorage.setItem('gm_sysadmin_instance', '1'); localStorage.removeItem('gm_groupe_id'); useStore.setState({ token: data.access_token, membre: data.membre, groupeId: null, groupe: null, postes: ['Sysadmin'], estExecutif: true, estSysadmin: true, modulesConsultation: [], modulesSaisie: [], modulesGestion: [], sysadminInstance: true, error: null, }); setPage('G14'); } catch (e) { useStore.setState({ error: e.message }); } finally { setSysadminPin(''); } }; return (

Choisir un groupe

District 87-16

{groupes.length === 0 ? (
Chargement des groupes...
) : groupes.map((groupe) => { const ouvert = groupeOuvert === groupe.id; const horaire = `${jourLabel(groupe.jour_reunion)}${groupe.heure_reunion ? ` · ${groupe.heure_reunion}` : ''}`; return (
{ouvert && (
{groupe.adresse_local && (

Lieu : {groupe.adresse_local}

)} {groupe.format_reunion && (

Format : {groupe.format_reunion}

)} {groupe.district && (

District : {groupe.district}

)}
setCourriel(e.target.value)} className="w-full rounded-xl border-0 bg-gray-50 p-4 text-lg focus:ring-2 focus:ring-aa-blue" autoComplete="username" inputMode="email" /> setPin(e.target.value.replace(/\D/g, '').slice(0, 4))} className="w-full rounded-xl border-0 bg-gray-50 p-4 text-center text-lg tracking-[0.8em] focus:ring-2 focus:ring-aa-blue" /> {error && (

{error}

)}
)}
); })}
Découvrir l'application {sysadminOuvert && (
setSysadminPin(e.target.value.replace(/\D/g, '').slice(0, 4))} className="mb-2 w-full rounded-xl border-0 bg-gray-50 p-3 text-center text-lg tracking-[0.8em] focus:ring-2 focus:ring-aa-blue" autoFocus />
)} {!sysadminOuvert && ( )}

100% logiciel libre · Hébergé au Québec

); }