var { useState } = React; const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "accent": "#2563eb", "density": "regular" }/*EDITMODE-END*/; function App() { const [isAuthenticated, setIsAuthenticated] = useState(!!localStorage.getItem('token')); const initialRoute = (() => { const id = (window.location.hash || '').replace(/^#/, ''); return window.NAV_ITEMS?.some(item => item.id === id) ? id : 'home'; })(); const [current, setCurrent] = useState(initialRoute); const [selectedStudent, setSelectedStudent] = useState(null); const [navContext, setNavContext] = useState(null); const [t, setTweak] = window.useTweaks ? window.useTweaks(TWEAK_DEFAULTS) : [TWEAK_DEFAULTS, () => {}]; React.useEffect(() => { const handleUnauthorized = () => setIsAuthenticated(false); window.addEventListener('unauthorized', handleUnauthorized); return () => window.removeEventListener('unauthorized', handleUnauthorized); }, []); React.useEffect(() => { const initialState = history.state && history.state.app === 'libera' ? history.state : { app: 'libera', current, selectedStudent: null, navContext: null }; history.replaceState(initialState, '', `#${initialState.current || current}`); const handlePopState = (event) => { const state = event.state; if (!state || state.app !== 'libera') { const id = (window.location.hash || '').replace(/^#/, ''); setCurrent(window.NAV_ITEMS?.some(item => item.id === id) ? id : 'home'); setSelectedStudent(null); setNavContext(null); return; } setCurrent(state.current || 'home'); setSelectedStudent(state.selectedStudent || null); setNavContext(state.navContext || null); }; window.addEventListener('popstate', handlePopState); return () => window.removeEventListener('popstate', handlePopState); }, []); if (!isAuthenticated) { return setIsAuthenticated(true)} accent={t.accent} />; } const commitRoute = (id, student = null, context = null, replace = false) => { setCurrent(id); setSelectedStudent(student); setNavContext(context); const state = { app: 'libera', current: id, selectedStudent: student, navContext: context }; const url = student ? `#${id}/detail/${encodeURIComponent(student.id || '')}` : `#${id}`; if (replace) { history.replaceState(state, '', url); } else { history.pushState(state, '', url); } }; const handleNav = (id, context = null) => { commitRoute(id, null, context); }; const handleOpenStudent = (student) => { commitRoute('schueler', student, null); }; let content; if (selectedStudent) { content = commitRoute('schueler', null, null)} onNav={handleNav} />; } else { switch (current) { case 'home': content = ; break; case 'verkauf': content = handleNav('home')} preselectedStudent={navContext} />; break; case 'rueckgabe': content = handleNav('home')} preselectedStudent={navContext} />; break; case 'kombiniert': content = handleNav('home')} preselectedStudent={navContext} />; break; case 'schueler': content = ; break; case 'buecher': content = ; break; case 'lernmaterial': content = ; break; case 'buchhaltung': content = ; break; case 'klassenversetzung': content = ; break; case 'archiv': content = ; break; case 'profil': content = ; break; default: content = ; break; } } return (
{content}
{window.TweaksPanel && ( setTweak('accent', v)} /> setTweak('density', v)} /> )}
); } const root = ReactDOM.createRoot(document.getElementById('root')); root.render();