asb_cloud_front/src/pages/Documents/DrillingProgram.jsx

100 lines
3.6 KiB
React
Raw Normal View History

import {Button, Tooltip} from 'antd'
import { FileExcelOutlined } from '@ant-design/icons'
import { useEffect, useState } from "react"
import {invokeWebApiWrapperAsync, download} from '../../components/factory'
import DocumentsTemplate from './DocumentsTemplate'
import LoaderPortal from '../../components/LoaderPortal'
import { Flex } from '../../components/Grid'
import {DrillingProgramService, WellService} from '../../services/api'
const idFileCategoryDrillingProgramItems = 13;
export default function DrillingProgram({idWell}) {
const [downloadButtonEnabled, selDownloadButtonEnabled] = useState(false)
const [showLoader, setShowLoader] = useState(false)
const [tooltip, setTooltip] = useState('нет файлов для формирования')
const [wellLabel, setWellLabel] = useState(`${idWell}`)
useEffect(() => invokeWebApiWrapperAsync(
async () => {
const well = await WellService.get(idWell)
setWellLabel(well.caption ?? `${idWell}`)
},
setShowLoader,
`Не удалось загрузить название скважины "${idWell}"`
), [idWell])
const urlDownloadProgram =`/api/well/${idWell}/drillingProgram`
const downloadProgram = () => invokeWebApiWrapperAsync(async()=>{
await download(urlDownloadProgram)
},
setShowLoader,
"Не удалось загрузить программу бурения")
const openProgramPreview = () => invokeWebApiWrapperAsync(async()=>{
var filWebUrl = await DrillingProgramService.getFileWebLink(idWell)
if(filWebUrl && filWebUrl.length)
window.open(filWebUrl, '_blank')
else
throw new Error()
},
setShowLoader,
"Программа бурения еще не сформирована. Перед просмотром сначала сформируйте программу.")
const filesUpdated = (files) =>{
if(!files || files.length === 0){
setTooltip('Нет файлов для формирования программы')
selDownloadButtonEnabled(false)
return
}
2021-09-01 15:55:23 +05:00
if(files.every(fileInfo => fileInfo?.name.toLowerCase().endsWith('.xlsx'))){
setTooltip('Программа доступна для скачивания')
selDownloadButtonEnabled(true)
}
else{
setTooltip('Список файлов содержит недопустимые типы файлов')
}
}
const downloadButton = <div>
<span>Программа бурения</span>
<Flex>
<Tooltip title={tooltip}>
<Button
2021-09-01 15:55:23 +05:00
type="primary"
onClick={downloadProgram}
disabled={!downloadButtonEnabled}>
Сформировать и скачать
</Button>
</Tooltip>
<Tooltip title={tooltip}>
<Button
type="link"
onClick={downloadProgram}
disabled={!downloadButtonEnabled}>
<FileExcelOutlined />
Программа бурения {wellLabel}.xlsx
</Button>
</Tooltip>
<Tooltip title="Перед просмотром программы бурения сначала сформируйте ее.">
<Button
type="primary"
onClick={openProgramPreview}
disabled={!downloadButtonEnabled}>
Просмотреть программу бурения
</Button>
</Tooltip>
</Flex>
</div>
return(<LoaderPortal show={showLoader}>
<DocumentsTemplate
idWell={idWell}
idCategory={idFileCategoryDrillingProgramItems}
accept='.xlsx'
headerChild={downloadButton}
onChange={filesUpdated} />
</LoaderPortal>)
}