Add centralized amenities directory and hourly booking example

- AmenitiesContext: shared amenities list with add/edit/delete, available app-wide
- RoomsPage: collapsible Справочник удобств section (add/rename/delete)
- RoomModal + RoomCategoriesPage: use amenities from context, no hardcoded lists
- RoomCategoriesPage: removed custom amenity input (use справочник instead)
- mockData: room 103 now has allowHourly=true, added sample hourly booking (today, 10-13ч)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-16 15:40:01 +03:00
parent c347c99228
commit 87455c2710
6 changed files with 156 additions and 59 deletions

View File

@@ -3,11 +3,7 @@ import { Modal } from '../ui/Modal'
import { cn } from '../../lib/utils'
import type { Room, RoomStatus, HousekeepingStatus, BedType } from '../../types'
import { ImagePlus, X as XIcon, ChevronLeft, ChevronRight } from 'lucide-react'
const AMENITY_LIST = [
'Wi-Fi', 'TV', 'AC', 'Mini-bar', 'Bathrobe', 'Jacuzzi',
'Panoramic view', 'Kitchen', 'Washing machine', 'Butler', 'Terrace',
]
import { useAmenities } from '../../contexts/AmenitiesContext'
const ROOM_TYPES = ['Стандарт', 'Делюкс', 'Полулюкс', 'Люкс', 'Пентхаус', 'Апартаменты', 'Другой']
@@ -65,6 +61,7 @@ export function RoomModal({ open, room, categories = [], onClose, onSave }: Room
description: room?.description ?? '',
})
const { amenities: allAmenities } = useAmenities()
const [amenities, setAmenities] = useState<string[]>(room?.amenities ?? ['Wi-Fi', 'TV', 'AC'])
const [photos, setPhotos] = useState<string[]>(room?.photos ?? [])
const [photoIdx, setPhotoIdx] = useState(0)
@@ -265,7 +262,7 @@ export function RoomModal({ open, room, categories = [], onClose, onSave }: Room
<div>
<label className="block text-sm font-medium text-slate-700 dark:text-slate-300 mb-2">Удобства</label>
<div className="flex flex-wrap gap-2">
{AMENITY_LIST.map(a => {
{allAmenities.map(a => {
const selected = amenities.includes(a)
return (
<button