import { TreeSelect } from 'antd' import { useState, useEffect } from 'react' import { useHistory, useRouteMatch } from 'react-router-dom' import LoaderPortal from './LoaderPortal' import { DepositService } from '../services/api' import { invokeWebApiWrapperAsync } from './factory' import '../styles/wellTreeSelect.css' import { WellIcon, WellIconState } from './icons/WellIcon' import { ReactComponent as DepositIcon } from '../images/DepositIcon.svg' import { ReactComponent as ClusterIcon } from '../images/ClusterIcon.svg' import { DepositDto } from '../services/api' export const getWellState = (idState?: number): WellIconState => idState === 1 ? 'active' : 'unknown' export const checkIsWellOnline = (lastTelemetryDate?: string | number | Date | null): boolean => { if (!lastTelemetryDate) return false return Date.now() - +new Date(lastTelemetryDate) < 600_000 } interface TreeNodeData { title?: string | null key?: string value?: string icon?: React.ReactNode children?: TreeNodeData[] } export const WellTreeSelector = (): React.ReactNode => { const [wellsTree, setWellsTree] = useState([]) const [showLoader, setShowLoader] = useState(false) const history = useHistory() const routeMatch = useRouteMatch('/:route/:id') useEffect(() => { invokeWebApiWrapperAsync( async () => { const deposits: Array = await DepositService.getDeposits() const wellsTree: TreeNodeData[] = deposits.map(deposit =>({ title: deposit.caption, key: `/deposit/${deposit.id}`, value: `/deposit/${deposit.id}`, icon: , children: deposit.clusters?.map(cluster => ({ title: cluster.caption, key: `/cluster/${cluster.id}`, value: `/cluster/${cluster.id}`, icon: , children: cluster.wells?.map(well => ({ title: well.caption, key: `/well/${well.id}`, value: `/well/${well.id}`, icon: })), })), })) setWellsTree(wellsTree) }, setShowLoader, `Не удалось загрузить список скважин` ) }, []) const onSelect = (value: string): void => { if (value) history.push(value) } return ( ) } export default WellTreeSelector