From 95f58af13c48df4b083765b9c19085934e45bae5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A4=D1=80=D0=BE=D0=BB=D0=BE=D0=B2?= Date: Thu, 22 Jul 2021 14:22:18 +0500 Subject: [PATCH] =?UTF-8?q?CF2-35=20=D0=9F=D0=B5=D1=80=D0=B5=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D0=B0=D1=82=D1=8C=20WellTreeSelector=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=83=20=D1=81=20=D0=BC=D0=B5?= =?UTF-8?q?=D1=82=D0=BE=D0=B4=D0=BE=D0=BC=20GET'/api/deposit'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/WellTreeSelector.jsx | 79 +++++++++++------------------ 1 file changed, 31 insertions(+), 48 deletions(-) diff --git a/src/components/WellTreeSelector.jsx b/src/components/WellTreeSelector.jsx index 7ff8615..fde7017 100644 --- a/src/components/WellTreeSelector.jsx +++ b/src/components/WellTreeSelector.jsx @@ -1,71 +1,55 @@ import { useState, useEffect } from 'react' -import { useParams } from 'react-router-dom' -import { WellService } from '../services/api' -import Loader from '../components/Loader' +import { useRouteMatch } from 'react-router-dom' +import { DepositService } from '../services/api' +import LoaderPortal from './LoaderPortal' 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([]) +export default function WellTreeSelector({}) { const [wellsTree, setWellsTree] = useState([]) - const [loader, setLoader] = useState(false) + const [showLoader, setShowLoader] = useState(false) const history = useHistory() - let { id } = useParams(); + const routeMatch = useRouteMatch('/:route/:id') - let updateWellsList = async () => { - setLoader(true) + const updateWellsList = async () => { + setShowLoader(true) try { - let newWells = (await WellService.getWells()).map(w => { return { key: w.id, ...w } }) - let wellsTree = groupBy(newWells, 'deposit', 'cluster', 'caption') + const deposits = await DepositService.getDeposits() + const wellsTree = deposits.map(deposit =>({ + title: deposit.caption, + key: `/deposit/${deposit.id}`, + value: `/deposit/${deposit.id}`, + children: deposit.clusters.map(cluster => ({ + title: cluster.caption, + key: `/cluster/${cluster.id}`, + value: `/cluster/${cluster.id}`, + children: cluster.wells.map(well => ({ + title: well.caption, + key: `/well/${well.id}`, + value: `/well/${well.id}`, + })), + })), + })) setWellsTree(wellsTree) } catch (e) { notify('Не удалось загрузить список скважин', 'error') - console.error(`${e.message}`); + console.error(`${e.message}`) } - setLoader(false) + setShowLoader(false) } useEffect(() => { updateWellsList() }, []) - const onSelect = (value) => { + const onSelect = (value, node) => { if (value) - history.push(`/well/${value}/`); + history.push(value); console.log(value) } return ( - <> + - {loader && } - + ) } \ No newline at end of file