Show API save errors in RoomModal footer

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-17 16:55:08 +03:00
parent 55a34dc0dc
commit 56f4d997a2
2 changed files with 16 additions and 3 deletions

View File

@@ -49,9 +49,10 @@ interface RoomModalProps {
categories?: { id: string; name: string }[] categories?: { id: string; name: string }[]
onClose: () => void onClose: () => void
onSave: (room: Room) => void onSave: (room: Room) => void
error?: string | null
} }
export function RoomModal({ open, room, categories = [], onClose, onSave }: RoomModalProps) { export function RoomModal({ open, room, categories = [], onClose, onSave, error }: RoomModalProps) {
const isEdit = !!room const isEdit = !!room
const [tab, setTab] = useState<ModalTab>('main') const [tab, setTab] = useState<ModalTab>('main')
@@ -164,6 +165,9 @@ export function RoomModal({ open, room, categories = [], onClose, onSave }: Room
size="xl" size="xl"
footer={ footer={
<> <>
{error && (
<p className="text-sm text-red-600 dark:text-red-400 flex-1 text-left">{error}</p>
)}
<button onClick={onClose} className="btn-secondary">Отмена</button> <button onClick={onClose} className="btn-secondary">Отмена</button>
<button onClick={handleSave} className="btn-primary" disabled={!form.number}> <button onClick={handleSave} className="btn-primary" disabled={!form.number}>
{isEdit ? 'Сохранить' : 'Добавить номер'} {isEdit ? 'Сохранить' : 'Добавить номер'}

View File

@@ -62,7 +62,10 @@ export function RoomsPage() {
setModalOpen(true) setModalOpen(true)
} }
const [saveError, setSaveError] = useState<string | null>(null)
const handleSave = async (room: Room) => { const handleSave = async (room: Room) => {
setSaveError(null)
try { try {
const isNew = !rooms.find(r => r.id === room.id) const isNew = !rooms.find(r => r.id === room.id)
if (isNew) { if (isNew) {
@@ -90,7 +93,12 @@ export function RoomsPage() {
} }
setModalOpen(false) setModalOpen(false)
} catch (err) { } catch (err) {
console.error('Failed to save room:', err) const msg = err instanceof Error ? err.message : 'Ошибка сохранения'
setSaveError(
msg.includes('already exists') || msg.includes('duplicate') || msg.includes('unique')
? `Номер «${room.number}» уже существует`
: msg,
)
} }
} }
@@ -275,9 +283,10 @@ export function RoomsPage() {
<RoomModal <RoomModal
open={modalOpen} open={modalOpen}
room={editingRoom} room={editingRoom}
onClose={() => setModalOpen(false)} onClose={() => { setModalOpen(false); setSaveError(null) }}
onSave={handleSave} onSave={handleSave}
categories={MOCK_CATEGORIES} categories={MOCK_CATEGORIES}
error={saveError}
/> />
</div> </div>
) )