import { Link, useNavigate, useParams } from 'react-router-dom' import { memo, useCallback, useEffect, useState } from 'react' import { InfoCircleFilled, CloseCircleOutlined } from '@ant-design/icons' import { Button, Result, Typography } from 'antd' import { downloadFile, invokeWebApiWrapperAsync } from '@components/factory' import { wrapPrivateComponent } from '@utils' import { FileService, WellService } from '@api' import AccessDenied from './AccessDenied' const { Paragraph, Text } = Typography export const getLinkToFile = (fileInfo) => `/file_download/${fileInfo.idWell}/${fileInfo.id}` const FileDownload = memo(function FileDownload() { const { idWell, idFile } = useParams() const [well, setWell] = useState({}) const [file, setFile] = useState({}) const [isError, setIsError] = useState(false) const navigate = useNavigate() useEffect(() => { invokeWebApiWrapperAsync( async () => setWell(await WellService.get(idWell)), null, 'Не удалось получить информацию о скважине', 'Получение данных о скважине', ) }, [idWell]) useEffect(() => { invokeWebApiWrapperAsync( async () => { const files = await FileService.getFilesInfo(idWell) // TODO Получается только одна категория файлов. // Поменять при появлении метода получения инфы о конкретном файле setFile(files.items.find((file) => file.id === idFile) ?? { id: idFile, idWell, name: `File_${idWell}_${idFile}` }) }, null, () => { setIsError(true) return 'Не удалось получить информацию о файле' }, 'Получение информации о файле' ) }, [idWell, idFile]) const download = useCallback(async () => { if (!await downloadFile(file)) setIsError(true) }, [file]) return ( } title={( <> Вы перешли к странице загрузки файла!
Файл "{file.name ?? ('№' + idFile)}", скважина "{well.caption ?? ('№' + idWell)}". )} // subTitle={} extra={( <> )} > {isError && (
Возможные причины ошибки при попытке скачивания файла:  У вас отсутствует доступ к файлу.  Обратиться в поддержку >  Файла не существует.  navigate(-1)}>Вернуться назад >  Разрешения не обновились.  Перезайти в аккаунт >
)}
) }) FileDownload.displayName = 'FileDownloadMemo' export default wrapPrivateComponent(FileDownload, { requirements: ['File.get'], route: 'file_download/:idWell/:idFile/*', }, )