import { useEffect, useState } from "react"; import { fetchMe, type ActingContextSelectorProps } from "@govoplan/core-webui"; import { fetchActingContexts, switchActingContext, type ActingContext } from "../../api/actingContext"; export default function ActingContextSelector({ settings, auth, onAuthChange }: ActingContextSelectorProps) { const [contexts, setContexts] = useState([]); const [activeId, setActiveId] = useState(""); const [busy, setBusy] = useState(false); const [error, setError] = useState(""); useEffect(() => { let active = true; void fetchActingContexts(settings) .then((response) => { if (!active) return; setContexts(response.contexts); setActiveId(response.active_assignment_id ?? ""); }) .catch((reason: unknown) => { if (active) setError(reason instanceof Error ? reason.message : "Acting context could not be loaded."); }); return () => { active = false; }; }, [settings.apiBaseUrl, settings.accessToken, settings.apiKey, auth.active_tenant?.id, auth.tenant.id]); if (!contexts.length && !activeId) return null; async function selectContext(assignmentId: string) { setBusy(true); setError(""); try { const response = await switchActingContext(settings, assignmentId || null); setContexts(response.contexts); setActiveId(response.active_assignment_id ?? ""); onAuthChange(await fetchMe(settings)); } catch (reason) { setError(reason instanceof Error ? reason.message : "Acting context could not be changed."); } finally { setBusy(false); } } return ( ); }