/* REVO JURIS — App shell wiring all sections together (language provider) */ function Toast({ show, onClose, lang }) { const cjk = lang === 'ZH' ? ' cjk' : ''; React.useEffect(() => { if (show) { const t = setTimeout(onClose, 4200); return () => clearTimeout(t); } }, [show]); const title = lang === 'ZH' ? '24小時刑事緊急熱線' : '24h Criminal Hotline'; const body = lang === 'ZH' ? '+852 5715 5628 — 正為您接通當值律師' : '+852 5715 5628 — connecting you to a duty solicitor'; return (
{title} {body}
); } function go(hash) { if (location.hash === hash) { history.replaceState(null, '', ' '); } location.hash = hash; } function App() { const [matter, setMatter] = React.useState(() => { try { const m = localStorage.getItem('revojuris_matter'); if (m) { localStorage.removeItem('revojuris_matter'); return m; } } catch (e) {} return 'criminal'; }); const [lang, setLang] = React.useState(() => { const saved = localStorage.getItem('revojuris_lang'); if (saved) return saved; return (navigator.language || '').toLowerCase().startsWith('zh') ? 'ZH' : 'EN'; }); const [toast, setToast] = React.useState(false); const onEnquire = (m) => { if (m) setMatter(m); go('#contact'); }; const onHotline = () => { setMatter('criminal'); setToast(true); }; const onFees = () => go('#fees'); const onSelectArea = (id) => { setMatter(id); go('#contact'); }; React.useEffect(() => { localStorage.setItem('revojuris_lang', lang); document.documentElement.lang = lang === 'ZH' ? 'zh-HK' : 'en'; document.body.dataset.lang = lang; }, [lang]); return (