@elastic-suite/gally-admin-components
Version:
Components package for gally admin BO
60 lines (53 loc) • 1.46 kB
text/typescript
import { useEffect } from 'react'
import {
IConfigurations,
IExtraBundle,
IHydraResponse,
LoadStatus,
useSchemaLoader,
} from '@elastic-suite/gally-admin-shared'
import { setData, useAppDispatch } from '../store'
import { useFetchApi } from './useApi'
import { useLog } from './useLog'
export function useDataLoader(): void {
const dispatch = useAppDispatch()
const log = useLog()
const api = useSchemaLoader()
const [bundles] = useFetchApi<IHydraResponse<IExtraBundle>>(
'extra_bundles',
undefined,
undefined,
false
)
const [configurations] = useFetchApi<IHydraResponse<IConfigurations>>(
'public_configurations',
undefined,
undefined,
false
)
useEffect(() => {
if (api.status === LoadStatus.FAILED) {
log(api.error)
}
if (bundles.status === LoadStatus.FAILED) {
log(bundles.error)
}
if (configurations.status === LoadStatus.FAILED) {
log(configurations.error)
}
if (api.data && bundles.data && configurations.data) {
dispatch(
setData({
api: api.data,
bundles: bundles.data['hydra:member'].map((bundle) => bundle.name),
configurations: Object.fromEntries(
configurations.data['hydra:member'].map((configuration) => [
configuration.path,
configuration.value,
])
),
})
)
}
}, [api, bundles, configurations, dispatch, log])
}