import { useState } from 'react' import { createRoot } from 'react-dom/client' import { HashRouter, Route, Routes } from 'react-router-dom' import '@fontsource-variable/inter' import '@fontsource-variable/jetbrains-mono' import '../../../packages/ui/src/tokens.css' import './app.css' import { initTheme } from '@sims/ui' import { logout } from './api' import { Layout } from './Layout' import { Login } from './Login' import { Dashboard } from './pages/Dashboard' import { GenericPage } from './pages/GenericPage' import { PurchaseInbox } from './pages/PurchaseInbox' import { SettingsPage } from './pages/SettingsPage' import { UsersRoles } from './pages/UsersRoles' import { AuditPage, BillsPage, CustomersPage, ExpiryPage, ItemsPage, ReturnsPage, StockPage } from './pages/live' import { Gstr1Page, Gstr3bPage, HsnPage } from './pages/gst' import { LabelsPage } from './pages/labels' import { PurchaseEntryPage, PurchasesListPage } from './pages/purchase-entry' import { PAGES } from './pages/registry' /** Custom/live pages override registry configs; everything else renders generically. */ const CUSTOM: Record React.JSX.Element> = { '/purchases/inbox': PurchaseInbox, '/admin/settings': SettingsPage, '/admin/users': UsersRoles, '/catalog/items': ItemsPage, '/catalog/labels': LabelsPage, '/sales/customers': CustomersPage, '/sales/bills': BillsPage, '/sales/returns': ReturnsPage, '/inventory/stock': StockPage, '/inventory/expiry': ExpiryPage, '/gst/gstr1': Gstr1Page, '/gst/gstr3b': Gstr3bPage, '/gst/hsn': HsnPage, '/admin/audit': AuditPage, '/purchases/entry': PurchaseEntryPage, '/purchases/list': PurchasesListPage, } function App() { const [userName, setUserName] = useState() if (userName === undefined) return return ( { void logout(); setUserName(undefined) }} />}> } /> {Object.entries(CUSTOM).map(([path, Page]) => ( } /> ))} {PAGES.filter((p) => !(p.path in CUSTOM)).map((p) => ( } /> ))} } /> ) } initTheme() createRoot(document.getElementById('root')!).render()