фикс фикса
This commit is contained in:
parent
36a94d3a66
commit
e51e895d37
1 changed files with 44 additions and 56 deletions
|
|
@ -38,7 +38,6 @@ import { useNavigate, useParams } from 'react-router-dom'
|
|||
import {
|
||||
useDeleteDevice,
|
||||
useDeleteAllDevices,
|
||||
useForceDeleteObject,
|
||||
useDiscoverObject,
|
||||
useDevices,
|
||||
useObject,
|
||||
|
|
@ -130,6 +129,20 @@ export function ObjectDetailPage({ defaultMode = 'inventory' }: { defaultMode?:
|
|||
const [mode, setMode] = useState<Mode>(defaultMode)
|
||||
const [editMode, setEditMode] = useState(false)
|
||||
|
||||
const toggleMode = () => setMode((m) => (m === 'inventory' ? 'work' : 'inventory'))
|
||||
|
||||
useEffect(() => {
|
||||
const handleKeyDown = (e: KeyboardEvent) => {
|
||||
const tag = (e.target as HTMLElement).tagName
|
||||
if (e.code === 'Space' && tag !== 'INPUT' && tag !== 'TEXTAREA') {
|
||||
e.preventDefault()
|
||||
toggleMode()
|
||||
}
|
||||
}
|
||||
document.addEventListener('keydown', handleKeyDown)
|
||||
return () => document.removeEventListener('keydown', handleKeyDown)
|
||||
}, [])
|
||||
|
||||
const { data: obj, isLoading: objLoading } = useObject(objId)
|
||||
const { data: devices, isLoading: devLoading } = useDevices(objId)
|
||||
const { data: racks } = useRacks(objId)
|
||||
|
|
@ -144,7 +157,6 @@ export function ObjectDetailPage({ defaultMode = 'inventory' }: { defaultMode?:
|
|||
const createZone = useCreateZone(objId)
|
||||
const deleteZone = useDeleteZone(objId)
|
||||
const deleteAllDevices = useDeleteAllDevices(objId)
|
||||
const forceDeleteObject = useForceDeleteObject()
|
||||
const createTask = useCreateTask()
|
||||
|
||||
const [deviceModal, setDeviceModal] = useState(false)
|
||||
|
|
@ -196,24 +208,6 @@ export function ObjectDetailPage({ defaultMode = 'inventory' }: { defaultMode?:
|
|||
}
|
||||
}
|
||||
|
||||
const handleDeleteObject = () => {
|
||||
Modal.confirm({
|
||||
title: `Удалить объект «${obj?.name}»?`,
|
||||
content: `Будут удалены все устройства (${devices?.length ?? 0} шт.) и сам объект. Это действие необратимо.`,
|
||||
okText: 'Удалить',
|
||||
cancelText: 'Отмена',
|
||||
okButtonProps: { danger: true },
|
||||
onOk: async () => {
|
||||
try {
|
||||
await forceDeleteObject.mutateAsync(objId)
|
||||
message.success('Объект удалён')
|
||||
navigate('/inventory/objects')
|
||||
} catch {
|
||||
message.error('Ошибка при удалении объекта')
|
||||
}
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
const openTaskModal = (scope: object, title: string) => {
|
||||
setTaskModal({ scope, title })
|
||||
|
|
@ -319,9 +313,8 @@ export function ObjectDetailPage({ defaultMode = 'inventory' }: { defaultMode?:
|
|||
|
||||
if (servers.length > 0) {
|
||||
addGroup('Серверная инфраструктура', '__servers__', servers, {
|
||||
type: 'category',
|
||||
object_id: objId,
|
||||
category: 'main_server',
|
||||
type: 'device_list',
|
||||
ids: servers.map((d) => d.id),
|
||||
})
|
||||
}
|
||||
|
||||
|
|
@ -594,14 +587,16 @@ export function ObjectDetailPage({ defaultMode = 'inventory' }: { defaultMode?:
|
|||
<Row justify="space-between" align="middle" style={{ marginBottom: 16 }}>
|
||||
<Col><Breadcrumb items={breadcrumbItems} /></Col>
|
||||
<Col>
|
||||
<div onClick={toggleMode} style={{ cursor: 'pointer' }}>
|
||||
<Segmented
|
||||
value={mode}
|
||||
options={[
|
||||
{ label: 'Инвентарь', value: 'inventory', icon: <DatabaseOutlined /> },
|
||||
{ label: 'Работа', value: 'work', icon: <ControlOutlined /> },
|
||||
]}
|
||||
onChange={(val) => setMode(val as Mode)}
|
||||
onChange={() => {}}
|
||||
/>
|
||||
</div>
|
||||
</Col>
|
||||
</Row>
|
||||
|
||||
|
|
@ -630,9 +625,24 @@ export function ObjectDetailPage({ defaultMode = 'inventory' }: { defaultMode?:
|
|||
<Button icon={<ThunderboltOutlined />} onClick={() => setRackModal(true)}>
|
||||
Стойки и зоны
|
||||
</Button>
|
||||
<Button danger icon={<DeleteOutlined />} onClick={handleDeleteObject} loading={forceDeleteObject.isPending}>
|
||||
Удалить объект
|
||||
<Popconfirm
|
||||
title="Удалить все устройства?"
|
||||
description={`Будет удалено ${devices?.length ?? 0} устройств. Отменить нельзя.`}
|
||||
okText="Удалить все"
|
||||
cancelText="Отмена"
|
||||
okButtonProps={{ danger: true }}
|
||||
onConfirm={handleDeleteAllDevices}
|
||||
disabled={!devices?.length}
|
||||
>
|
||||
<Button
|
||||
danger
|
||||
icon={<DeleteOutlined />}
|
||||
loading={deleteAllDevices.isPending}
|
||||
disabled={!devices?.length}
|
||||
>
|
||||
Удалить все устройства
|
||||
</Button>
|
||||
</Popconfirm>
|
||||
</Space>
|
||||
) : (
|
||||
<Space wrap>
|
||||
|
|
@ -678,28 +688,6 @@ export function ObjectDetailPage({ defaultMode = 'inventory' }: { defaultMode?:
|
|||
)}
|
||||
</Space>
|
||||
</Col>
|
||||
{mode === 'inventory' && editMode && (
|
||||
<Col>
|
||||
<Popconfirm
|
||||
title="Удалить все устройства?"
|
||||
description={`Будет удалено ${devices?.length ?? 0} устройств. Отменить нельзя.`}
|
||||
okText="Удалить все"
|
||||
cancelText="Отмена"
|
||||
okButtonProps={{ danger: true }}
|
||||
onConfirm={handleDeleteAllDevices}
|
||||
disabled={!devices?.length}
|
||||
>
|
||||
<Button
|
||||
danger
|
||||
icon={<DeleteOutlined />}
|
||||
loading={deleteAllDevices.isPending}
|
||||
disabled={!devices?.length}
|
||||
>
|
||||
Удалить все устройства
|
||||
</Button>
|
||||
</Popconfirm>
|
||||
</Col>
|
||||
)}
|
||||
</Row>
|
||||
|
||||
<Table
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue