/* 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 (
);
}
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 (
setToast(false)} lang={lang} />
);
}
ReactDOM.createRoot(document.getElementById('root')).render();