import { useEffect, useState } from "react"; import "./App.css"; import logoUrl from "./assets/carepath.svg"; import { createSession } from "./api"; import { AdminReview } from "./components/AdminReview"; import { ConsentGate, type ConsentPayload } from "./components/ConsentGate"; import { DeviceCheck, type DeviceCheckResult } from "./components/DeviceCheck"; import { InterpreterConsole } from "./components/InterpreterConsole"; import { IntentQuiz, type Intent } from "./components/IntentQuiz"; import { copy, initialLanguage, persistLanguage, type Language } from "./copy"; function ProductShell({ language, setLanguage }: { language: Language; setLanguage: (language: Language) => void }) { const text = copy[language]; const publicSiteUrl = import.meta.env.VITE_PUBLIC_SITE_URL; const allProductsHref = (() => { if (!publicSiteUrl) return "/"; const url = new URL(publicSiteUrl); url.searchParams.set("lang", language); return url.href; })(); return ( CarePath / {text.productName} {text.status} {text.allProducts} setLanguage("vi")} > VI setLanguage("en")} > EN ); } function App() { const [language, setLanguage] = useState(initialLanguage); const [sessionId, setSessionId] = useState(null); const [error, setError] = useState(null); const [starting, setStarting] = useState(false); const [intent, setIntent] = useState(null); const [deviceCheck, setDeviceCheck] = useState(null); const [hash, setHash] = useState(() => window.location.hash); useEffect(() => { persistLanguage(language); document.documentElement.lang = language; document.title = copy[language].title; }, [language]); useEffect(() => { const onHashChange = () => setHash(window.location.hash); window.addEventListener("hashchange", onHashChange); return () => window.removeEventListener("hashchange", onHashChange); }, []); useEffect(() => { window.scrollTo(0, 0); }, [deviceCheck, hash, intent, sessionId]); async function handleConsent(consent: ConsentPayload) { setStarting(true); setError(null); try { const result = await createSession({ consent }); setSessionId(result.session_id); } catch { setError(copy[language].consent.startError); } finally { setStarting(false); } } let content; if (hash === "#/kiem-duyet") { content = ; } else if (sessionId && !deviceCheck) { content = ; } else if (sessionId) { content = { setSessionId(null); setDeviceCheck(null); }} sessionId={sessionId} voiceReady={deviceCheck?.voiceReady} />; } else if (!intent) { content = ; } else { content = ; } return ( {content} ); } export default App;
{text.status}