import { lazyLoad, query } from '@/routers/helpers'
import { Route } from '@/routers/router'
import { lazy, useContext, useEffect } from 'react'
import { Translation, useTranslation } from 'react-i18next'
import { Navigate, Outlet } from 'react-router-dom'
import getAddresses from '@/api/admin/addressPools/addresses/getAddresses'
import getAddressPool from '@/api/admin/addressPools/getAddressPool'
import { getKey as getPoolKey } from '@/api/admin/addressPools/useAddressPoolSWR'
import { getKey as getAddressesKey } from '@/api/admin/addressPools/useAddressesSWR'
import { NavigationBarContext } from '@/components/elements/navigation/NavigationBar'
export const routes: Route[] = [
{
path: 'ipam',
handle: {
crumb: () => ({
to: '/admin/ipam',
element: (
{t => t('ipam')}
),
}),
},
children: [
{
index: true,
element: lazyLoad(
lazy(() => import('@/components/admin/ipam/IpamContainer'))
),
},
{
path: ':poolId',
loader: ({ params }) =>
query(getPoolKey(parseInt(params.poolId!)), () =>
getAddressPool(parseInt(params.poolId!))
),
element: lazyLoad(lazy(() => import('./AdminIpamRouter'))),
handle: {
crumb: data => ({
to: `/admin/ipam/${data.poolId}`,
element: data.name,
}),
},
children: [
{
index: true,
element: ,
},
{
path: 'addresses',
loader: ({ params }) => {
const id = parseInt(params.poolId!)
const page = params.page ? parseInt(params.page) : 1
return query(getAddressesKey(id, page, ''), () =>
getAddresses(id, {
page,
query: '',
include: ['server'],
})
)
},
element: lazyLoad(
lazy(
() =>
import(
'@/components/admin/ipam/addresses/AddressesContainer'
)
)
),
},
],
},
],
},
]
const AdminIpamRouter = () => {
const { setRoutes, setBreadcrumb } = useContext(NavigationBarContext)
const { t: tStrings } = useTranslation('strings')
const navRoutes = [
{
name: tStrings('overview'),
path: '/admin',
end: true,
},
{
name: tStrings('location_other'),
path: '/admin/locations',
},
{
name: tStrings('node_other'),
path: '/admin/nodes',
},
{
name: tStrings('server_other'),
path: '/admin/servers',
},
{
name: tStrings('ipam'),
path: '/admin/ipam',
},
{
name: tStrings('user_other'),
path: '/admin/users',
},
{
name: tStrings('token_other'),
path: '/admin/tokens',
},
]
useEffect(() => {
setRoutes(navRoutes)
}, [])
return
}
export default AdminIpamRouter