783c7da7a1
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
57 lines
3.4 KiB
React
57 lines
3.4 KiB
React
/* Main app router */
|
|
(function () {
|
|
const { useState, useEffect } = React;
|
|
const Icon = window.Icon, Logo = window.Logo, Shell = window.Shell, useToast = window.useToast;
|
|
|
|
const APP_ROUTES = ['dashboard', 'plot', 'construction', 'payments', 'documents', 'notices', 'sectormaps', 'transfer', 'assistant', 'support', 'profile', 'sampleplans', 'journey', 'myjourney'];
|
|
|
|
function App() {
|
|
const [route, setRoute] = useState(() => localStorage.getItem('yeida_route') || 'welcome');
|
|
const [toastNode, toast] = useToast();
|
|
const go = (r) => { setRoute(r); localStorage.setItem('yeida_route', r); window.scrollTo(0, 0); };
|
|
useEffect(() => { document.body.style.background = APP_ROUTES.includes(route) ? 'var(--bg)' : '#fff'; }, [route]);
|
|
|
|
// Auth + public
|
|
if (route === 'welcome') return React.createElement(window.Welcome, { go });
|
|
if (route === 'login') return React.createElement(window.LoginSelect, { go });
|
|
if (route === 'login-allotment') return React.createElement(window.AllotmentLookup, { go });
|
|
if (route === 'verify' || route === 'otp') return React.createElement(window.Verify, { go });
|
|
if (route === 'register') return React.createElement(window.Register, { go });
|
|
if (route === 'app') { go('dashboard'); return null; }
|
|
if (route === 'sectormaps-public') return React.createElement(PublicMaps, { go });
|
|
|
|
// Authenticated app
|
|
const content = {
|
|
dashboard: window.Dashboard, plot: window.MyPlot, construction: window.Construction,
|
|
payments: window.Payments, documents: window.Documents, notices: window.Notices,
|
|
sectormaps: window.SectorMaps, transfer: window.Transfer, assistant: window.Assistant,
|
|
support: window.Support, profile: window.Profile,
|
|
sampleplans: window.SamplePlans, journey: window.Journey, myjourney: window.MyJourney,
|
|
}[route] || window.Dashboard;
|
|
|
|
return React.createElement(React.Fragment, null,
|
|
React.createElement(Shell, { route, go },
|
|
React.createElement(content, { go, toast })),
|
|
toastNode
|
|
);
|
|
}
|
|
|
|
// Public sector maps (pre-login)
|
|
function PublicMaps({ go }) {
|
|
return React.createElement('div', { style: { minHeight: '100vh', background: 'var(--bg)' } },
|
|
React.createElement('header', { style: { height: 64, background: '#fff', borderBottom: '1px solid var(--line)', display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '0 32px', position: 'sticky', top: 0, zIndex: 50 } },
|
|
React.createElement('button', { onClick: () => go('welcome'), style: { background: 'none', border: 'none', cursor: 'pointer' } }, React.createElement(Logo, { size: 36 })),
|
|
React.createElement('div', { className: 'row gap-3' },
|
|
React.createElement('button', { className: 'btn btn-ghost', onClick: () => go('welcome') }, React.createElement(Icon, { name: 'chevL', size: 16 }), 'Home'),
|
|
React.createElement('button', { className: 'btn btn-primary', onClick: () => go('login') }, 'Login to Portal', React.createElement(Icon, { name: 'arrowR', size: 17 })))
|
|
),
|
|
React.createElement('div', { style: { maxWidth: 1600, margin: '0 auto', padding: '28px 36px' } },
|
|
React.createElement(window.PageHead, { title: 'Explore Sector Maps', subtitle: 'Browse plotted layouts and master plans across YEIDA sectors — no login required' }),
|
|
React.createElement(window.SectorMaps, { go })
|
|
)
|
|
);
|
|
}
|
|
|
|
ReactDOM.createRoot(document.getElementById('root')).render(React.createElement(App));
|
|
})();
|