diff --git a/src/App.tsx b/src/App.tsx index 0103b37..e56561c 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -35,6 +35,7 @@ import { LoyaltyPage } from './pages/LoyaltyPage' import { MaintenancePage } from './pages/MaintenancePage' import { DiscountsPage } from './pages/DiscountsPage' import { GuestReviewPage } from './pages/GuestReviewPage' +import { GuestRoomServicePage } from './pages/GuestRoomServicePage' export default function App() { return ( @@ -48,6 +49,7 @@ export default function App() { {/* Public */} } /> } /> + } /> {/* App routes */} }> diff --git a/src/components/calendar/BookingCalendar.tsx b/src/components/calendar/BookingCalendar.tsx index 29369f1..0c66fc7 100644 --- a/src/components/calendar/BookingCalendar.tsx +++ b/src/components/calendar/BookingCalendar.tsx @@ -74,8 +74,10 @@ export function BookingCalendar({ rooms, bookings, onBookingCreate, onBookingUpd const [dragStart, setDragStart] = useState<{ roomId: string; dayIdx: number } | null>(null) const [dragEnd, setDragEnd] = useState(null) - // Compact mode - const [compact, setCompact] = useState(false) + // Compact mode (default from Settings → Appearance) + const [compact, setCompact] = useState( + () => localStorage.getItem('calendarCompact') === 'true', + ) const rowHeight = compact ? ROW_HEIGHT_COMPACT : ROW_HEIGHT // Modals @@ -253,7 +255,7 @@ export function BookingCalendar({ rooms, bookings, onBookingCreate, onBookingUpd + )} +
+

{config.name}

+

Room Service

+
+ {step === 'menu' && cartCount > 0 && ( + + )} + + + +
+ + {/* ── MENU ── */} + {step === 'menu' && ( +
+ {/* Category tabs */} +
+ {CATEGORIES.map(cat => ( + + ))} +
+ + {/* Items */} +
+ {MENU.filter(i => i.category === category && !i.stopList).map(item => ( +
+ {item.emoji} +
+
+

{item.name}

+ {item.popular && ( + Хит + )} +
+

+ {item.time} мин +

+

{formatCurrency(item.price)}

+
+ {/* Counter */} + {(cart[item.id] ?? 0) === 0 ? ( + + ) : ( +
+ + {cart[item.id]} + +
+ )} +
+ ))} +
+ + {/* Sticky cart button */} + {cartCount > 0 && ( +
+ +
+ )} +
+ )} + + {/* ── CART ── */} + {step === 'cart' && ( +
+

Ваш заказ

+ +
+ {cartItems.map((item, i) => ( +
+ {item.emoji} +
+

{item.name}

+

{formatCurrency(item.price)} × {cart[item.id]}

+
+
+ + {cart[item.id]} + +
+ {formatCurrency(item.price * cart[item.id])} +
+ ))} + +
+
+ Сумма заказа + {formatCurrency(subtotal)} +
+
+ Обслуживание {config.serviceChargePct}% + +{formatCurrency(svcCharge)} +
+
+ Итого + {formatCurrency(total)} +
+
+
+ + {/* Room number */} +
+
+ + setRoomNumber(e.target.value)} + /> +
+
+ +