73 lines
1.7 KiB
TypeScript
73 lines
1.7 KiB
TypeScript
import { ServerContext } from '@/state/server'
|
|
import { ServerState } from '@/api/server/getStatus'
|
|
import useSWR from 'swr'
|
|
import http from '@/api/http'
|
|
|
|
export type DiskType = 'disk' | 'media'
|
|
|
|
export interface Disk {
|
|
type: DiskType
|
|
name: string
|
|
size: number
|
|
displayName: string | null
|
|
}
|
|
|
|
export interface Address {
|
|
address: string
|
|
cidr: number
|
|
gateway: string
|
|
}
|
|
|
|
export interface ServerDetails {
|
|
id: string
|
|
internalId: number
|
|
uuid: string
|
|
nodeId: number
|
|
state: ServerState
|
|
locked: boolean
|
|
config: {
|
|
macAddress: string
|
|
bootOrder: string
|
|
disks: Disk[]
|
|
addresses: {
|
|
ipv4?: Address
|
|
ipv6?: Address
|
|
}
|
|
}
|
|
}
|
|
|
|
export const rawDataToDisk = (data: any): Disk => ({
|
|
type: data.type,
|
|
name: data.name,
|
|
size: data.size,
|
|
displayName: data.display_name,
|
|
})
|
|
|
|
export const rawDataToServerDetails = (data: any): ServerDetails => ({
|
|
id: data.id,
|
|
internalId: data.internal_id,
|
|
uuid: data.uuid,
|
|
nodeId: data.node_id,
|
|
state: data.state,
|
|
locked: data.locked,
|
|
config: {
|
|
macAddress: data.config.mac_address,
|
|
bootOrder: data.config.boot_order,
|
|
disks: data.config.disks.map(rawDataToDisk),
|
|
addresses: data.config.addresses,
|
|
},
|
|
})
|
|
|
|
const useProxmoxDetails = () => {
|
|
const uuid = ServerContext.useStoreState(state => state.server.data!.uuid)
|
|
|
|
return useSWR<ServerDetails>(['server:details', uuid], async () => {
|
|
const {
|
|
data: { data },
|
|
} = await http.get(`/api/client/servers/${uuid}/details`)
|
|
|
|
return rawDataToServerDetails(data)
|
|
})
|
|
}
|
|
|
|
export default useProxmoxDetails
|