import { useEffect, useState } from 'react' import { invokeWebApiWrapperAsync } from '../../components/factory' import LoaderPortal from '../../components/LoaderPortal' import { EditableTable, makeColumn, makeSelectColumn, makeActionHandler, makeStringSorter } from '../../components/Table' import { AdminClusterService, AdminDepositService } from '../../services/api' import { arrayOrDefault } from '../../utils' export default function ClusterController() { const [deposits, setDeposits] = useState([]) const [clusters, setClusters] = useState([]) const [showLoader, setShowLoader] = useState(false) const clusterColumns = [ makeSelectColumn('Месторождение', 'idDeposit', deposits, '--', { width: 200, editable: true, sorter: makeStringSorter('idDeposit') }), makeColumn('Название', 'caption', { width: 200, editable: true, sorter: makeStringSorter('caption') }), makeColumn('Широта', 'latitude', { width: 150, editable: true }), makeColumn('Долгота', 'longitude', { width: 150, editable: true }) ] const updateTable = () => invokeWebApiWrapperAsync( async () => { const clusters = await AdminClusterService.getAll() setClusters(arrayOrDefault(clusters)) }, setShowLoader, `Не удалось загрузить список кустов` ) useEffect(() => invokeWebApiWrapperAsync( async () => { let deposits = arrayOrDefault(await AdminDepositService.getAll()) deposits = deposits.map((deposit) => ({ value: deposit.id, label: deposit.caption })) setDeposits(deposits) }, setShowLoader, `Не удалось загрузить список месторождений` ), []) useEffect(updateTable, []) const handlerProps = { service: AdminClusterService, setLoader: setShowLoader, errorMsg: `Не удалось выполнить операцию`, onComplete: updateTable, } return ( ) }