import { useEffect, useState } from "react"; import { useNavigate } from "react-router-dom"; import * as api from "../api/client"; import { Button } from "../components/ui"; import { SearchableDropdown, type Option } from "../components/SearchableDropdown"; import { useAuth } from "../auth/AuthContext"; // Вход без регистрации: школьник выбирает только школу и класс, аккаунт // и пароль не нужны. Результат теста запишется в базу со снимком // организации/группы, но без привязки к пользователю. export function AnonymousEntryPage() { const navigate = useNavigate(); const { loginAnonymous } = useAuth(); const [orgId, setOrgId] = useState(null); const [groupId, setGroupId] = useState(null); const [orgs, setOrgs] = useState([]); const [groups, setGroups] = useState([]); const [error, setError] = useState(""); useEffect(() => { let cancelled = false; (async () => { const [o, g] = await Promise.all([api.getOrganizations(), api.getGroups()]); if (cancelled) return; setOrgs(o); setGroups(g); })(); return () => { cancelled = true; }; }, []); const onOrgChange = (id: string | null) => { setOrgId(id); const org = orgs.find((o) => o.id === id); if (org?.group_id) setGroupId(org.group_id); }; const orgOptions: Option[] = orgs.map((o) => ({ key: o.id, text: o.name_organization })); const groupOptions: Option[] = groups.map((g) => ({ key: g.id, text: g.name_group })); const proceed = () => { if (!orgId || !groupId) { setError("Выберите школу и класс"); return; } loginAnonymous(orgId, groupId); navigate("/"); }; return (
ЦОПП
Пройти тест без регистрации — выберите школу и класс
{ e.preventDefault(); proceed(); }} > {error &&
{error}
}
); }