diff --git a/src/components/calendar/BookingCalendar.tsx b/src/components/calendar/BookingCalendar.tsx index 6945623..8250371 100644 --- a/src/components/calendar/BookingCalendar.tsx +++ b/src/components/calendar/BookingCalendar.tsx @@ -437,11 +437,6 @@ export function BookingCalendar({ rooms, bookings, slug, onBookingCreate, onBook {room.number} {room.name && !isMobile && {room.name}} - {!compact && !isMobile && ( - - {room.type} - - )} diff --git a/src/components/rooms/RoomModal.tsx b/src/components/rooms/RoomModal.tsx index a1d7407..39031fd 100644 --- a/src/components/rooms/RoomModal.tsx +++ b/src/components/rooms/RoomModal.tsx @@ -46,6 +46,7 @@ type ModalTab = 'main' | 'places' | 'description' | 'photos' interface RoomModalProps { open: boolean room?: Room + existingNumbers?: string[] categories?: { id: string; name: string }[] onClose: () => void onSave: (room: Room) => void @@ -53,7 +54,7 @@ interface RoomModalProps { error?: string | null } -export function RoomModal({ open, room, categories = [], onClose, onSave, onDelete, error }: RoomModalProps) { +export function RoomModal({ open, room, existingNumbers = [], categories = [], onClose, onSave, onDelete, error }: RoomModalProps) { const isEdit = !!room const [tab, setTab] = useState('main') @@ -126,8 +127,24 @@ export function RoomModal({ open, room, categories = [], onClose, onSave, onDele setPhotoIdx(p => Math.max(0, p - 1)) } + // Find next available room number (skips existing ones) + const nextFreeNumber = (() => { + if (isEdit) return null + const taken = new Set(existingNumbers) + // Try incrementing from the highest existing number + const nums = existingNumbers + .map(n => parseInt(n)) + .filter(n => !isNaN(n)) + .sort((a, b) => a - b) + let candidate = (nums[nums.length - 1] ?? 100) + 1 + while (taken.has(String(candidate))) candidate++ + return String(candidate) + })() + + const numberTaken = !isEdit && !!form.number && existingNumbers.includes(form.number) + const handleSave = () => { - if (!form.number) return + if (!form.number || numberTaken) return onSave({ id: room?.id ?? `r-${Date.now()}`, hotelId: room?.hotelId ?? 'hotel-1', @@ -183,7 +200,7 @@ export function RoomModal({ open, room, categories = [], onClose, onSave, onDele

{error}

)} - @@ -213,7 +230,16 @@ export function RoomModal({ open, room, categories = [], onClose, onSave, onDele
- set('number', e.target.value)} /> + set('number', e.target.value)} + /> + {numberTaken && ( +

Номер {form.number} уже существует{nextFreeNumber ? `. Следующий свободный: ${nextFreeNumber}` : ''}

+ )}
diff --git a/src/pages/RoomsPage.tsx b/src/pages/RoomsPage.tsx index 337ad06..572e036 100644 --- a/src/pages/RoomsPage.tsx +++ b/src/pages/RoomsPage.tsx @@ -208,6 +208,7 @@ export function RoomsPage() { key={editingRoom?.id ?? 'new'} open={modalOpen} room={editingRoom} + existingNumbers={rooms.map(r => r.number)} onClose={() => { setModalOpen(false); setSaveError(null) }} onSave={handleSave} categories={categories}