This repository has been archived on 2026-08-11. You can view files and clone it, but cannot push or open issues or pull requests.
Gishen-Admin/src/app/AppRoutes.tsx
kirukib dd471c5909 Add doctor actor, guest orders, and richer catalog/stock Admin flows.
Wire hospital-affiliated doctors and unauthenticated customer checkout into mocks, UI, and the backend spec so clinical and walk-in paths match the product model.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-07 11:25:45 +03:00

123 lines
8.7 KiB
TypeScript

import type { ReactNode } from 'react'
import { Navigate, Route, Routes } from 'react-router-dom'
import { AppLayout } from '@/layouts/AppLayout'
import { LoginPage } from '@/pages/auth/LoginPage'
import { DashboardPage } from '@/pages/dashboard/DashboardPage'
import { OrdersPage } from '@/pages/orders/OrdersPage'
import { CreateOrderPage } from '@/pages/orders/CreateOrderPage'
import { OrderDetailPage } from '@/pages/orders/OrderDetailPage'
import { PrescriptionsPage } from '@/pages/prescriptions/PrescriptionsPage'
import { CreatePrescriptionPage } from '@/pages/prescriptions/CreatePrescriptionPage'
import { PrescriptionDetailPage } from '@/pages/prescriptions/PrescriptionDetailPage'
import { StockPage } from '@/pages/stock/StockPage'
import { CreateStockPage } from '@/pages/stock/CreateStockPage'
import { StockDetailPage } from '@/pages/stock/StockDetailPage'
import { ProcurementPage } from '@/pages/procurement/ProcurementPage'
import { CreateProcurementRequestPage } from '@/pages/procurement/CreateProcurementRequestPage'
import { ProcurementDetailPage } from '@/pages/procurement/ProcurementDetailPage'
import { FinancePage } from '@/pages/finance/FinancePage'
import { PaymentGatewaysPage } from '@/pages/finance/PaymentGatewaysPage'
import { SettlementDetailPage } from '@/pages/finance/SettlementDetailPage'
import { OrganisationsPage } from '@/pages/organisations/OrganisationsPage'
import { CreateOrganisationPage } from '@/pages/organisations/CreateOrganisationPage'
import { OrganisationDetailPage } from '@/pages/organisations/OrganisationDetailPage'
import { DoctorsPage } from '@/pages/doctors/DoctorsPage'
import { CreateDoctorPage } from '@/pages/doctors/CreateDoctorPage'
import { DoctorDetailPage } from '@/pages/doctors/DoctorDetailPage'
import { MarketingPage } from '@/pages/marketing/MarketingPage'
import { CrmPage } from '@/pages/marketing/CrmPage'
import { CustomerDetailPage } from '@/pages/marketing/CustomerDetailPage'
import { LoyaltyPage } from '@/pages/marketing/LoyaltyPage'
import { CampaignsPage } from '@/pages/marketing/CampaignsPage'
import { CampaignDetailPage } from '@/pages/marketing/CampaignDetailPage'
import { SegmentDetailPage } from '@/pages/marketing/SegmentDetailPage'
import { DispatchPage } from '@/pages/dispatch/DispatchPage'
import { RiderDetailPage } from '@/pages/dispatch/RiderDetailPage'
import { TeamPage } from '@/pages/team/TeamPage'
import { CreateTeamMemberPage } from '@/pages/team/CreateTeamMemberPage'
import { TeamMemberDetailPage } from '@/pages/team/TeamMemberDetailPage'
import { AuditPage } from '@/pages/audit/AuditPage'
import { AuditEventDetailPage } from '@/pages/audit/AuditEventDetailPage'
import { FaqPage } from '@/pages/faq/FaqPage'
import { FaqDetailPage } from '@/pages/faq/FaqDetailPage'
import { SettingsPage } from '@/pages/settings/SettingsPage'
import { BranchDetailPage } from '@/pages/settings/BranchDetailPage'
import { MigrationsPage } from '@/pages/migrations/MigrationsPage'
import { MigrationJobDetailPage } from '@/pages/migrations/MigrationJobDetailPage'
import { AnalyticsPage } from '@/pages/analytics/AnalyticsPage'
import { ProfilePage } from '@/pages/profile/ProfilePage'
import { PosPage } from '@/pages/pos/PosPage'
import { ItemsPage } from '@/pages/items/ItemsPage'
import { CreateItemPage } from '@/pages/items/CreateItemPage'
import { ItemDetailPage } from '@/pages/items/ItemDetailPage'
import { useAuthStore } from '@/zustand/authStore'
import { canAccess } from '@/config/permissions'
import type { ModuleKey } from '@/types'
function Guard({ module, children }: { module: ModuleKey; children: ReactNode }) {
const user = useAuthStore((s) => s.user)
if (!user) return <Navigate to="/login" replace />
if (!canAccess(user.role, module)) return <Navigate to="/" replace />
return children
}
export function AppRoutes() {
return (
<Routes>
<Route path="/login" element={<LoginPage />} />
<Route element={<AppLayout />}>
<Route index element={<Guard module="dashboard"><DashboardPage /></Guard>} />
{/* Available to every signed-in role — not a permission-gated module. */}
<Route path="profile" element={<ProfilePage />} />
<Route path="pos" element={<Guard module="pos"><PosPage /></Guard>} />
<Route path="items" element={<Guard module="stock"><ItemsPage /></Guard>} />
<Route path="items/new" element={<Guard module="stock"><CreateItemPage /></Guard>} />
<Route path="items/:id" element={<Guard module="stock"><ItemDetailPage /></Guard>} />
<Route path="orders" element={<Guard module="orders"><OrdersPage /></Guard>} />
<Route path="orders/new" element={<Guard module="orders"><CreateOrderPage /></Guard>} />
<Route path="orders/:id" element={<Guard module="orders"><OrderDetailPage /></Guard>} />
<Route path="prescriptions" element={<Guard module="prescriptions"><PrescriptionsPage /></Guard>} />
<Route path="prescriptions/new" element={<Guard module="prescriptions"><CreatePrescriptionPage /></Guard>} />
<Route path="prescriptions/:id" element={<Guard module="prescriptions"><PrescriptionDetailPage /></Guard>} />
<Route path="stock" element={<Guard module="stock"><StockPage /></Guard>} />
<Route path="stock/new" element={<Guard module="stock"><CreateStockPage /></Guard>} />
<Route path="stock/:sku" element={<Guard module="stock"><StockDetailPage /></Guard>} />
<Route path="procurement" element={<Guard module="procurement"><ProcurementPage /></Guard>} />
<Route path="procurement/new" element={<Guard module="procurement"><CreateProcurementRequestPage /></Guard>} />
<Route path="procurement/:id" element={<Guard module="procurement"><ProcurementDetailPage /></Guard>} />
<Route path="finance" element={<Guard module="finance"><FinancePage /></Guard>} />
<Route path="finance/gateways" element={<Guard module="finance"><PaymentGatewaysPage /></Guard>} />
<Route path="finance/settlements/:id" element={<Guard module="finance"><SettlementDetailPage /></Guard>} />
<Route path="organisations" element={<Guard module="organisations"><OrganisationsPage /></Guard>} />
<Route path="organisations/new" element={<Guard module="organisations"><CreateOrganisationPage /></Guard>} />
<Route path="organisations/:id" element={<Guard module="organisations"><OrganisationDetailPage /></Guard>} />
<Route path="doctors" element={<Guard module="organisations"><DoctorsPage /></Guard>} />
<Route path="doctors/new" element={<Guard module="organisations"><CreateDoctorPage /></Guard>} />
<Route path="doctors/:id" element={<Guard module="organisations"><DoctorDetailPage /></Guard>} />
<Route path="marketing" element={<Guard module="marketing"><MarketingPage /></Guard>} />
<Route path="marketing/:id" element={<Guard module="marketing"><SegmentDetailPage /></Guard>} />
<Route path="crm" element={<Guard module="crm"><CrmPage /></Guard>} />
<Route path="crm/:id" element={<Guard module="crm"><CustomerDetailPage /></Guard>} />
<Route path="loyalty" element={<Guard module="loyalty"><LoyaltyPage /></Guard>} />
<Route path="campaigns" element={<Guard module="campaigns"><CampaignsPage /></Guard>} />
<Route path="campaigns/:id" element={<Guard module="campaigns"><CampaignDetailPage /></Guard>} />
<Route path="dispatch" element={<Guard module="dispatch"><DispatchPage /></Guard>} />
<Route path="dispatch/riders/:id" element={<Guard module="dispatch"><RiderDetailPage /></Guard>} />
<Route path="analytics" element={<Guard module="analytics"><AnalyticsPage /></Guard>} />
<Route path="migrations" element={<Guard module="migrations"><MigrationsPage /></Guard>} />
<Route path="migrations/:id" element={<Guard module="migrations"><MigrationJobDetailPage /></Guard>} />
<Route path="faq" element={<Guard module="faq"><FaqPage /></Guard>} />
<Route path="faq/:id" element={<Guard module="faq"><FaqDetailPage /></Guard>} />
<Route path="team" element={<Guard module="team"><TeamPage /></Guard>} />
<Route path="team/new" element={<Guard module="team"><CreateTeamMemberPage /></Guard>} />
<Route path="team/:id" element={<Guard module="team"><TeamMemberDetailPage /></Guard>} />
<Route path="audit" element={<Guard module="audit"><AuditPage /></Guard>} />
<Route path="audit/:id" element={<Guard module="audit"><AuditEventDetailPage /></Guard>} />
<Route path="settings" element={<Guard module="settings"><SettingsPage /></Guard>} />
<Route path="settings/branches/:id" element={<Guard module="settings"><BranchDetailPage /></Guard>} />
</Route>
<Route path="*" element={<Navigate to="/" replace />} />
</Routes>
)
}