Initial commit: HotelSync PMS v0.1.0
- React 18 + TypeScript + Vite + Tailwind CSS - Шахматка бронирований (drag-to-book) - Страницы: Calendar, Bookings, Rooms, Housekeeping, Channels, API Docs, Settings - Роли: super_admin, hotel_manager, housekeeper - Светлая/тёмная тема - Docker + Nginx конфигурация - Лендинг hotelsync.ru
This commit is contained in:
66
src/App.tsx
Normal file
66
src/App.tsx
Normal file
@@ -0,0 +1,66 @@
|
||||
import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom'
|
||||
import { ThemeProvider } from './contexts/ThemeContext'
|
||||
import { AuthProvider } from './contexts/AuthContext'
|
||||
import { AppLayout } from './layouts/AppLayout'
|
||||
import { LoginPage } from './pages/LoginPage'
|
||||
import { CalendarPage } from './pages/CalendarPage'
|
||||
import { BookingsPage } from './pages/BookingsPage'
|
||||
import { RoomsPage } from './pages/RoomsPage'
|
||||
import { HousekeepingPage } from './pages/HousekeepingPage'
|
||||
import { ChannelsPage } from './pages/ChannelsPage'
|
||||
import { ApiDocsPage } from './pages/ApiDocsPage'
|
||||
import { SettingsPage } from './pages/SettingsPage'
|
||||
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 <Navigate to="/login" replace />
|
||||
}
|
||||
return <>{children}</>
|
||||
}
|
||||
|
||||
export default function App() {
|
||||
return (
|
||||
<ThemeProvider>
|
||||
<AuthProvider>
|
||||
<BrowserRouter>
|
||||
<Routes>
|
||||
{/* Public */}
|
||||
<Route path="/login" element={<LoginPage />} />
|
||||
|
||||
{/* Hotel routes */}
|
||||
<Route path="/:hotelSlug" element={<AppLayout />}>
|
||||
<Route index element={<Navigate to="calendar" replace />} />
|
||||
<Route path="calendar" element={<CalendarPage />} />
|
||||
<Route path="bookings" element={<BookingsPage />} />
|
||||
<Route path="rooms" element={<RoomsPage />} />
|
||||
<Route path="housekeeping" element={<HousekeepingPage />} />
|
||||
<Route path="channels" element={<ChannelsPage />} />
|
||||
<Route path="api-docs" element={<ApiDocsPage />} />
|
||||
<Route path="settings" element={<SettingsPage />} />
|
||||
</Route>
|
||||
|
||||
{/* Admin routes */}
|
||||
<Route path="/admin" element={<AppLayout />}>
|
||||
<Route index element={<AdminDashboard />} />
|
||||
<Route path="hotels" element={<AdminDashboard />} />
|
||||
<Route path="users" element={<AdminDashboard />} />
|
||||
</Route>
|
||||
|
||||
{/* Default */}
|
||||
<Route path="/" element={<Navigate to="/login" replace />} />
|
||||
<Route path="*" element={<Navigate to="/login" replace />} />
|
||||
</Routes>
|
||||
</BrowserRouter>
|
||||
</AuthProvider>
|
||||
</ThemeProvider>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user