mirror of
https://github.com/siop-spelev/siop2.git
synced 2026-08-08 12:41:54 +00:00
fix(web): connexion — signaler clairement une API injoignable
Le formulaire email/mot de passe s'affichait seul, sans explication, quand l'API locale n'était pas démarrée (la liste démo était masquée comme si DEMO_MODE était absent). Une erreur réseau affiche désormais « L'API ne répond pas — démarrez-la avec pnpm dev » ; le 404 (pas de mode démo) reste silencieux, c'est le comportement ADR-002. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -21,7 +21,9 @@ export function useMe() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** ADR-002 : la liste n'existe qu'en DEMO_MODE — un 404 signifie « pas de
|
/** ADR-002 : la liste n'existe qu'en DEMO_MODE — un 404 signifie « pas de
|
||||||
* mode démo », le web n'affiche alors rien (null). */
|
* mode démo », le web n'affiche alors rien (null). Une ERREUR RÉSEAU, en
|
||||||
|
* revanche, signifie que l'API est injoignable : l'écran de connexion
|
||||||
|
* l'affiche clairement (isError) au lieu de masquer la démo en silence. */
|
||||||
export function useDemoAccounts() {
|
export function useDemoAccounts() {
|
||||||
return useQuery({
|
return useQuery({
|
||||||
queryKey: ['demo-accounts'],
|
queryKey: ['demo-accounts'],
|
||||||
@@ -29,8 +31,9 @@ export function useDemoAccounts() {
|
|||||||
staleTime: 5 * 60_000,
|
staleTime: 5 * 60_000,
|
||||||
queryFn: async () => {
|
queryFn: async () => {
|
||||||
const { data, response } = await api.GET('/auth/demo-accounts');
|
const { data, response } = await api.GET('/auth/demo-accounts');
|
||||||
if (response.status === 404) return null;
|
if (response.status === 404) return null; // pas de mode démo : normal
|
||||||
return data?.accounts ?? null;
|
if (!data) throw new Error(`API : ${response.status}`);
|
||||||
|
return data.accounts;
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ export default function PageConnexion() {
|
|||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const login = useLogin();
|
const login = useLogin();
|
||||||
const demoLogin = useDemoLogin();
|
const demoLogin = useDemoLogin();
|
||||||
const { data: demoAccounts } = useDemoAccounts();
|
const { data: demoAccounts, isError: apiInjoignable } = useDemoAccounts();
|
||||||
const [email, setEmail] = useState('');
|
const [email, setEmail] = useState('');
|
||||||
const [password, setPassword] = useState('');
|
const [password, setPassword] = useState('');
|
||||||
|
|
||||||
@@ -33,6 +33,12 @@ export default function PageConnexion() {
|
|||||||
<div className="conn">
|
<div className="conn">
|
||||||
<div className="carte-conn">
|
<div className="carte-conn">
|
||||||
<Logo sousTitre="Maintenance d'ascenseurs" />
|
<Logo sousTitre="Maintenance d'ascenseurs" />
|
||||||
|
{apiInjoignable ? (
|
||||||
|
<p className="erreur-form" role="alert">
|
||||||
|
L'API ne répond pas — en local, démarrez-la avec <code>pnpm dev</code>{' '}
|
||||||
|
(à la racine, elle lance l'API et le web ensemble).
|
||||||
|
</p>
|
||||||
|
) : null}
|
||||||
<form
|
<form
|
||||||
onSubmit={surConnexion}
|
onSubmit={surConnexion}
|
||||||
className="flex flex-col gap-[14px]"
|
className="flex flex-col gap-[14px]"
|
||||||
|
|||||||
Reference in New Issue
Block a user