diff --git a/src/App.tsx b/src/App.tsx
index 49e12a4..5c7da9c 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -1,6 +1,7 @@
import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom'
import { ThemeProvider } from './contexts/ThemeContext'
import { AuthProvider } from './contexts/AuthContext'
+import { ModulesProvider } from './contexts/ModulesContext'
import { AppLayout } from './layouts/AppLayout'
import { LoginPage } from './pages/LoginPage'
import { CalendarPage } from './pages/CalendarPage'
@@ -10,56 +11,52 @@ import { HousekeepingPage } from './pages/HousekeepingPage'
import { ChannelsPage } from './pages/ChannelsPage'
import { ApiDocsPage } from './pages/ApiDocsPage'
import { SettingsPage } from './pages/SettingsPage'
+import { ModulesPage } from './pages/ModulesPage'
+import { ReportsPage } from './pages/ReportsPage'
+import { WebsitePage } from './pages/WebsitePage'
+import { BookingWidgetPage } from './pages/BookingWidgetPage'
+import { AvailabilityPage } from './pages/AvailabilityPage'
import { AdminDashboard } from './pages/AdminDashboard'
-import { useAuth } from './contexts/AuthContext'
-
-function RoleGuard({
- children,
- allow,
-}: {
- children: React.ReactNode
- allow: string[]
-}) {
- const { user } = useAuth()
- if (!user || !allow.includes(user.role)) {
- return
- }
- return <>{children}>
-}
export default function App() {
return (
-
-
- {/* Public */}
- } />
+
+
+
+ {/* Public */}
+ } />
- {/* Hotel routes */}
- }>
- } />
- } />
- } />
- } />
- } />
- } />
- } />
- } />
-
+ {/* App routes */}
+ }>
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ {/* Module pages */}
+ } />
+ } />
+ } />
+ } />
+
- {/* Admin routes */}
- }>
- } />
- } />
- } />
-
+ {/* Admin routes */}
+ }>
+ } />
+ } />
+ } />
+
- {/* Default */}
- } />
- } />
-
-
+ } />
+ } />
+
+
+
)
diff --git a/src/components/layout/Sidebar.tsx b/src/components/layout/Sidebar.tsx
index 9c4f9bd..127d93f 100644
--- a/src/components/layout/Sidebar.tsx
+++ b/src/components/layout/Sidebar.tsx
@@ -1,11 +1,12 @@
import { NavLink, useNavigate } from 'react-router-dom'
import {
CalendarDays, BookOpen, BedDouble, Sparkles, Globe, Settings,
- FileText, LayoutDashboard, Building2, Users, X, Hotel,
+ FileText, LayoutDashboard, Building2, Users, X, Hotel, Puzzle, CalendarRange,
} from 'lucide-react'
import { useAuth } from '../../contexts/AuthContext'
+import { useModules } from '../../contexts/ModulesContext'
+import { MODULES_DATA } from '../../data/modulesData'
import { cn } from '../../lib/utils'
-import { MOCK_HOTELS } from '../../data/mockData'
interface SidebarProps {
open: boolean
@@ -34,17 +35,19 @@ function NavItem({
export function Sidebar({ open, onClose }: SidebarProps) {
const { user } = useAuth()
+ const { statuses } = useModules()
const navigate = useNavigate()
- const hotel = user?.hotelId ? MOCK_HOTELS.find(h => h.id === user.hotelId) : null
- const slug = hotel?.slug ?? 'grand-palace'
-
const isAdmin = user?.role === 'super_admin'
const isHousekeeper = user?.role === 'housekeeper'
+ // Активные модули у которых есть sidebarItem
+ const activeModuleItems = MODULES_DATA.filter(
+ m => m.sidebarItem && (statuses[m.id] === 'active' || statuses[m.id] === 'trial'),
+ )
+
return (
<>
- {/* Mobile backdrop */}
{open && (
- HotelNext
+ HotelSync
-