/* App shell — drives the click-through prototype. Uses a navigation history stack so "back" always returns to the previous screen. */ function ParentApp() { const [hist, setHist] = React.useState(['login']); const [convo, setConvo] = React.useState(null); const [childId, setChildId] = React.useState(() => { try { return localStorage.getItem('jl_child') || window.JL_CHILDREN[0].id; } catch(e){ return window.JL_CHILDREN[0].id; } }); const screen = hist[hist.length - 1]; const isDark = screen === 'login'; const canBack = hist.length > 1 && screen !== 'login'; const child = window.JL_CHILDREN.find(c => c.id === childId) || window.JL_CHILDREN[0]; window.JL_CHILD = child; const switchChild = (id) => { setChildId(id); try { localStorage.setItem('jl_child', id); } catch(e){} }; const [lang, setLang] = React.useState(() => { try { return localStorage.getItem('jl_lang') || 'en'; } catch(e){ return 'en'; } }); window.JL_LANG = lang; const setLanguage = (id) => { setLang(id); try { localStorage.setItem('jl_lang', id); } catch(e){} }; const [onboarded, setOnboarded] = React.useState(() => { try { return localStorage.getItem('jl_onboarded')==='1'; } catch(e){ return false; } }); const finishOnboarding = () => { setOnboarded(true); try { localStorage.setItem('jl_onboarded','1'); } catch(e){} reset('home'); }; const go = (s) => setHist(h => h[h.length - 1] === s ? h : [...h, s]); const back = () => setHist(h => h.length > 1 ? h.slice(0, -1) : h); const reset = (s) => setHist([s]); let view; switch (screen) { case 'login': view = reset(onboarded ? 'home' : 'onboarding')} />; break; case 'onboarding': view = ; break; case 'home': view = ; break; case 'messages': view = { setConvo(c); go('chat'); }} />; break; case 'chat': view = ; break; case 'transport': view = ; break; case 'pickup': view = ; break; case 'activities': view = ; break; case 'safety': view = ; break; case 'attendance': view = ; break; case 'engagement': view = ; break; case 'grades': view = ; break; case 'wallet': view = ; break; case 'tutor': view = ; break; case 'marketplace':view = ; break; case 'help': view = ; break; case 'calendar': view = ; break; case 'notifications': view = ; break; case 'forms': view = ; break; case 'health': view = ; break; case 'docs': view = ; break; case 'waitlist': view = ; break; case 'timeline': view = ; break; case 'wristband': view = ; break; case 'watch': view = ; break; case 'notifsettings': view = ; break; case 'profile': view = reset('login')} lang={lang} onSetLang={setLanguage} />; break; default: view = ; } return (
{view}
{/* hint when on login */} {screen==='login' && (
Tap Sign In to explore the app
)}
); } ReactDOM.createRoot(document.getElementById('root')).render();