import { useState, useEffect } from 'react' import { useParams } from 'react-router-dom' import { WellService } from '../services/api' import Loader from '../components/Loader' import { TreeSelect } from 'antd' import { useHistory } from 'react-router-dom' import notify from './notify' const groupBy = (table, ...keys) => { let key = keys[0] let groups = table.reduce((rv, item) => { let keyValue = item[key] let group = rv.find(o => o.title === keyValue) if (!group) { group = { title: keyValue, value: keys.length === 1 ? `${item['id']}` : `${key} ${keyValue} ${item['id']}`, selectable: keys.length === 1, children: [] } rv.push(group) } if (keys.length > 1) group.children.push(item); return rv; }, []); if (keys.length > 1) { for (let group of groups) { group.children = groupBy(group.children, ...keys.slice(1)) } } return groups }; export default function WellTreeSelector(props) { // const [wells, setWells] = useState([]) const [wellsTree, setWellsTree] = useState([]) const [loader, setLoader] = useState(false) const history = useHistory() let { id } = useParams(); let updateWellsList = async () => { setLoader(true) try { let newWells = (await WellService.getWells()).map(w => { return { key: w.id, ...w } }) let wellsTree = groupBy(newWells, 'deposit', 'cluster', 'caption') setWellsTree(wellsTree) } catch (e) { notify('Не удалось загрузить список скважин', 'error') console.error(`${e.message}`); } setLoader(false) } useEffect(() => { updateWellsList() }, []) const onSelect = (value) => { if (value) history.push(`/well/${value}/`); console.log(value) } return ( <> {loader && } ) }