49 lines
1.6 KiB
TypeScript
49 lines
1.6 KiB
TypeScript
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'
|
|
import { api } from './client'
|
|
|
|
export interface RackItem {
|
|
id: number
|
|
object_id: number
|
|
name: string
|
|
description: string | null
|
|
location: string | null
|
|
zone_id: number | null
|
|
zone_name: string | null
|
|
created_at: string
|
|
}
|
|
|
|
export const useRacks = (objId: number) =>
|
|
useQuery({
|
|
queryKey: ['racks', objId],
|
|
queryFn: () =>
|
|
api.get<RackItem[]>(`/api/v1/objects/${objId}/racks`).then((r) => r.data),
|
|
})
|
|
|
|
export const useCreateRack = (objId: number) => {
|
|
const qc = useQueryClient()
|
|
return useMutation({
|
|
mutationFn: (body: { name: string; description?: string; location?: string; zone_id?: number | null }) =>
|
|
api.post<RackItem>(`/api/v1/objects/${objId}/racks`, body).then((r) => r.data),
|
|
onSuccess: () => qc.invalidateQueries({ queryKey: ['racks', objId] }),
|
|
})
|
|
}
|
|
|
|
export const useUpdateRack = (objId: number) => {
|
|
const qc = useQueryClient()
|
|
return useMutation({
|
|
mutationFn: ({ id, body }: { id: number; body: Partial<{ name: string; description: string; location: string; zone_id: number | null }> }) =>
|
|
api.patch<RackItem>(`/api/v1/objects/${objId}/racks/${id}`, body).then((r) => r.data),
|
|
onSuccess: () => qc.invalidateQueries({ queryKey: ['racks', objId] }),
|
|
})
|
|
}
|
|
|
|
export const useDeleteRack = (objId: number) => {
|
|
const qc = useQueryClient()
|
|
return useMutation({
|
|
mutationFn: (id: number) => api.delete(`/api/v1/objects/${objId}/racks/${id}`),
|
|
onSuccess: () => {
|
|
qc.invalidateQueries({ queryKey: ['racks', objId] })
|
|
qc.invalidateQueries({ queryKey: ['devices', objId] })
|
|
},
|
|
})
|
|
}
|