Files
dashboards/apps/super-admin/src/App.tsx
T
Alireza HassaniandCursor 0eb19bbebd Add SMS templates UI, prepaid balance settings, and list filter layout.
Business settings manage templates and balance; Super Admin verifies templates and tops up via SMS settings; filters use a separate panel with even field gaps.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-08 16:24:26 +03:30

88 lines
3.5 KiB
TypeScript

import { BrowserRouter, Routes, Route, Outlet } from 'react-router-dom'
import { AuthProvider } from './context/AuthContext'
import { ToastProvider } from './context/ToastContext'
import { AdminDomainGuard } from './components/AdminDomainGuard'
import { ProtectedRoute } from './components/ProtectedRoute'
import { GuestRoute } from './components/GuestRoute'
import { PageLayout } from './components/PageLayout'
import { RouteErrorBoundary } from './components/RouteErrorBoundary'
import { HomePage } from './pages/HomePage'
import { BusinessesPage } from './pages/BusinessesPage'
import { BusinessInvoicesPage } from './pages/BusinessInvoicesPage'
import { UsersPage } from './pages/UsersPage'
import { WebsitesPage } from './pages/WebsitesPage'
import { SettingsPage } from './pages/SettingsPage'
import { InvoiceTemplateEditorPage } from './pages/InvoiceTemplateEditorPage'
import { IssueInvoicePage } from './pages/IssueInvoicePage'
import { PublicInvoicePage } from './pages/PublicInvoicePage'
import { ProfilePage } from './pages/ProfilePage'
import { TemplatesPage } from './pages/TemplatesPage'
import { SmsTemplatesPage } from './pages/SmsTemplatesPage'
import { LoginPage } from './pages/LoginPage'
function ProtectedPages() {
return (
<RouteErrorBoundary>
<Outlet />
</RouteErrorBoundary>
)
}
function App() {
return (
<BrowserRouter>
<AuthProvider>
<ToastProvider>
<Routes>
{/* Host-agnostic: can be served from meshkee.com or other public domains */}
<Route path="invoices/:invoiceId" element={<PublicInvoicePage />} />
<Route element={<AdminDomainGuard />}>
<Route element={<GuestRoute />}>
<Route path="login" element={<LoginPage />} />
</Route>
<Route element={<ProtectedRoute />}>
<Route element={<PageLayout />}>
<Route element={<ProtectedPages />}>
<Route index element={<HomePage />} />
<Route path="businesses" element={<BusinessesPage />} />
<Route
path="businesses/:businessId/invoices"
element={<BusinessInvoicesPage />}
/>
<Route
path="businesses/:businessId/invoices/new"
element={<IssueInvoicePage />}
/>
<Route
path="businesses/:businessId/invoices/:invoiceId/edit"
element={<IssueInvoicePage />}
/>
<Route path="users" element={<UsersPage />} />
<Route path="websites" element={<WebsitesPage />} />
<Route path="templates" element={<TemplatesPage />} />
<Route path="sms-templates" element={<SmsTemplatesPage />} />
<Route path="settings" element={<SettingsPage />} />
<Route
path="settings/invoice-templates/new"
element={<InvoiceTemplateEditorPage />}
/>
<Route
path="settings/invoice-templates/:templateId"
element={<InvoiceTemplateEditorPage />}
/>
<Route path="profile" element={<ProfilePage />} />
</Route>
</Route>
</Route>
</Route>
</Routes>
</ToastProvider>
</AuthProvider>
</BrowserRouter>
)
}
export default App