feat: right-click context menu for room status + bed type capacity

- Add RoomContextMenu component (portal, Escape/click-outside to close)
  - Change room status: available / maintenance / blocked
  - Change housekeeping status: clean / dirty / cleaning / inspect
  - Open room edit (optional)
- Calendar: right-click on room label → context menu; onRoomUpdate prop
  wired to CalendarPage (calls api.rooms.update); show 🔧/🔒 badge on label
- Rooms page: right-click on any room card → same context menu;
  show orange "ремонт" badge on maintenance rooms
- BedTypesContext: add capacity field (max guests per bed type)
- BedTypes reference UI: add capacity input to add/edit form; show "N чел."

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-23 14:30:14 +03:00
parent 8c6cdfb1c7
commit fd50e02be0
6 changed files with 252 additions and 33 deletions

View File

@@ -2,20 +2,21 @@ import { createContext, useContext, useState } from 'react'
import type { ReactNode } from 'react'
export interface BedTypeItem {
value: string // unique key stored in DB (e.g. 'double', 'sofa')
label: string // display name
icon: string // emoji
value: string // unique key stored in DB (e.g. 'double', 'sofa')
label: string // display name
icon: string // emoji
capacity: number // max guests on this bed type
}
const DEFAULT_BED_TYPES: BedTypeItem[] = [
{ value: 'single', label: 'Кровать 1-сп.', icon: '🛏' },
{ value: 'double', label: 'Кровать 2-сп.', icon: '🛏' },
{ value: 'queen', label: 'Queen-кровать', icon: '🛏' },
{ value: 'king', label: 'King-кровать', icon: '🛏' },
{ value: 'twin', label: 'Две кровати', icon: '🛏' },
{ value: 'sofa', label: 'Диван', icon: '🛋' },
{ value: 'bunk', label: 'Двухъярусная', icon: '🛏' },
{ value: 'cot', label: 'Раскладушка', icon: '🪑' },
{ value: 'single', label: 'Кровать 1-сп.', icon: '🛏', capacity: 1 },
{ value: 'double', label: 'Кровать 2-сп.', icon: '🛏', capacity: 2 },
{ value: 'queen', label: 'Queen-кровать', icon: '🛏', capacity: 2 },
{ value: 'king', label: 'King-кровать', icon: '🛏', capacity: 2 },
{ value: 'twin', label: 'Две кровати', icon: '🛏', capacity: 2 },
{ value: 'sofa', label: 'Диван', icon: '🛋', capacity: 1 },
{ value: 'bunk', label: 'Двухъярусная', icon: '🛏', capacity: 2 },
{ value: 'cot', label: 'Раскладушка', icon: '🪑', capacity: 1 },
]
interface BedTypesContextValue {