Show API save errors in RoomModal footer
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -49,9 +49,10 @@ interface RoomModalProps {
|
||||
categories?: { id: string; name: string }[]
|
||||
onClose: () => 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 [tab, setTab] = useState<ModalTab>('main')
|
||||
|
||||
@@ -164,6 +165,9 @@ export function RoomModal({ open, room, categories = [], onClose, onSave }: Room
|
||||
size="xl"
|
||||
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={handleSave} className="btn-primary" disabled={!form.number}>
|
||||
{isEdit ? 'Сохранить' : 'Добавить номер'}
|
||||
|
||||
@@ -62,7 +62,10 @@ export function RoomsPage() {
|
||||
setModalOpen(true)
|
||||
}
|
||||
|
||||
const [saveError, setSaveError] = useState<string | null>(null)
|
||||
|
||||
const handleSave = async (room: Room) => {
|
||||
setSaveError(null)
|
||||
try {
|
||||
const isNew = !rooms.find(r => r.id === room.id)
|
||||
if (isNew) {
|
||||
@@ -90,7 +93,12 @@ export function RoomsPage() {
|
||||
}
|
||||
setModalOpen(false)
|
||||
} 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
|
||||
open={modalOpen}
|
||||
room={editingRoom}
|
||||
onClose={() => setModalOpen(false)}
|
||||
onClose={() => { setModalOpen(false); setSaveError(null) }}
|
||||
onSave={handleSave}
|
||||
categories={MOCK_CATEGORIES}
|
||||
error={saveError}
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user