Add delete room button in RoomModal
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -2,7 +2,7 @@ import { useState, useRef } from 'react'
|
|||||||
import { Modal } from '../ui/Modal'
|
import { Modal } from '../ui/Modal'
|
||||||
import { cn } from '../../lib/utils'
|
import { cn } from '../../lib/utils'
|
||||||
import type { Room, RoomStatus, HousekeepingStatus, BedType, BedItem, BedItemType, ExtraPlace, ChildPolicy } from '../../types'
|
import type { Room, RoomStatus, HousekeepingStatus, BedType, BedItem, BedItemType, ExtraPlace, ChildPolicy } from '../../types'
|
||||||
import { ImagePlus, X as XIcon, ChevronLeft, ChevronRight, Plus, Minus, Baby } from 'lucide-react'
|
import { ImagePlus, X as XIcon, ChevronLeft, ChevronRight, Plus, Minus, Baby, Trash2 } from 'lucide-react'
|
||||||
import { useAmenities } from '../../contexts/AmenitiesContext'
|
import { useAmenities } from '../../contexts/AmenitiesContext'
|
||||||
|
|
||||||
const ROOM_TYPES = ['Стандарт', 'Делюкс', 'Полулюкс', 'Люкс', 'Пентхаус', 'Апартаменты', 'Другой']
|
const ROOM_TYPES = ['Стандарт', 'Делюкс', 'Полулюкс', 'Люкс', 'Пентхаус', 'Апартаменты', 'Другой']
|
||||||
@@ -49,10 +49,11 @@ interface RoomModalProps {
|
|||||||
categories?: { id: string; name: string }[]
|
categories?: { id: string; name: string }[]
|
||||||
onClose: () => void
|
onClose: () => void
|
||||||
onSave: (room: Room) => void
|
onSave: (room: Room) => void
|
||||||
|
onDelete?: () => void
|
||||||
error?: string | null
|
error?: string | null
|
||||||
}
|
}
|
||||||
|
|
||||||
export function RoomModal({ open, room, categories = [], onClose, onSave, error }: RoomModalProps) {
|
export function RoomModal({ open, room, categories = [], onClose, onSave, onDelete, error }: RoomModalProps) {
|
||||||
const isEdit = !!room
|
const isEdit = !!room
|
||||||
const [tab, setTab] = useState<ModalTab>('main')
|
const [tab, setTab] = useState<ModalTab>('main')
|
||||||
|
|
||||||
@@ -165,6 +166,15 @@ export function RoomModal({ open, room, categories = [], onClose, onSave, error
|
|||||||
size="xl"
|
size="xl"
|
||||||
footer={
|
footer={
|
||||||
<>
|
<>
|
||||||
|
{isEdit && onDelete && (
|
||||||
|
<button
|
||||||
|
onClick={onDelete}
|
||||||
|
className="btn-ghost text-red-600 dark:text-red-400 hover:bg-red-50 dark:hover:bg-red-900/20 mr-auto"
|
||||||
|
>
|
||||||
|
<Trash2 size={14} />
|
||||||
|
Удалить номер
|
||||||
|
</button>
|
||||||
|
)}
|
||||||
{error && (
|
{error && (
|
||||||
<p className="text-sm text-red-600 dark:text-red-400 flex-1 text-left">{error}</p>
|
<p className="text-sm text-red-600 dark:text-red-400 flex-1 text-left">{error}</p>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -64,6 +64,17 @@ export function RoomsPage() {
|
|||||||
|
|
||||||
const [saveError, setSaveError] = useState<string | null>(null)
|
const [saveError, setSaveError] = useState<string | null>(null)
|
||||||
|
|
||||||
|
const handleDelete = async (roomId: string) => {
|
||||||
|
try {
|
||||||
|
await api.rooms.delete(slug, roomId)
|
||||||
|
setRooms(prev => prev.filter(r => r.id !== roomId))
|
||||||
|
setModalOpen(false)
|
||||||
|
} catch (err) {
|
||||||
|
const msg = err instanceof Error ? err.message : 'Ошибка удаления'
|
||||||
|
setSaveError(msg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const handleSave = async (room: Room) => {
|
const handleSave = async (room: Room) => {
|
||||||
setSaveError(null)
|
setSaveError(null)
|
||||||
try {
|
try {
|
||||||
|
|||||||
Reference in New Issue
Block a user