import { Button, Layout } from 'antd' import { CloseOutlined, FileWordOutlined, LoadingOutlined } from '@ant-design/icons' import { memo, useCallback, useEffect, useState } from 'react' import { Flex } from '@components/Grid' import LoaderPortal from '@components/LoaderPortal' import { invokeWebApiWrapperAsync } from '@components/factory' import { arrayOrDefault, formatDate } from '@utils' import { DrillingProgramService } from '@api' import CategoryAdder from './CategoryAdder' import CategoryRender from './CategoryRender' import CategoryEditor from './CategoryEditor' import CategoryHistory from './CategoryHistory' import '@styles/drilling_program.less' const stateString = { 0: 'Не настроена', 1: 'Согласовывается', 2: 'Формируется', [-1]: 'Неизвестно', } export const DrillingProgram = memo(({ idWell }) => { const [selectedCategory, setSelectedCategory] = useState() const [historyVisible, setHistoryVisible] = useState(false) const [editorVisible, setEditorVisible] = useState(false) const [showLoader, setShowLoader] = useState(false) const [categories, setCategories] = useState([]) const [data, setData] = useState({}) const updateData = useCallback(async () => await invokeWebApiWrapperAsync( async () => { const data = await DrillingProgramService.getState(idWell) const categories = arrayOrDefault(await DrillingProgramService.getCategories(idWell)) setData(data) setCategories(categories.filter(cat => { if (cat?.id && (cat.name || cat.shortName)) if (data?.parts.findIndex((val) => val.idFileCategory === cat.id) < 0) return true return false })) }, setShowLoader, `Не удалось загрузить название скважины "${idWell}"` ), [idWell]) useEffect(() => updateData(), [updateData]) const onCategoryEdit = (catId) => { setSelectedCategory(catId) setEditorVisible(!!catId) } const onCategoryHistory = (catId) => { setSelectedCategory(catId) setHistoryVisible(!!catId) } const onEditorClosed = useCallback(() => { setEditorVisible(false) updateData() }, [updateData]) return ( {data && (

Программа бурения

{data?.idState === 3 ? ( <>
Размер: {data.program.size}
Загружен: {formatDate(data.program.uploadDate)}
) : (

{data?.idState <= 0 ? ( ) : ( )} {stateString[data?.idState ?? -1]}

)}
)} {data?.parts?.map?.((part, idx) => part && ( ))} part.idFileCategory === selectedCategory) ?? {}} /> setHistoryVisible(false)} visible={historyVisible} />
) }) export default DrillingProgram