import React, { useState, useEffect } from "react"; import { useParams } from 'react-router-dom'; import { Form, DatePicker, Radio, Button, Select, Table } from 'antd'; import 'moment/locale/ru'; import locale from 'antd/lib/locale/ru_RU'; import moment from "moment"; import {Subscribe} from '../services/signalr'; import notify from '../components/notify'; import LoaderPortal from '../components/LoaderPortal'; import { ReportService } from '../services/api'; const { RangePicker } = DatePicker; const { Option } = Select; let reportDatesRange = { from: moment("0001-01-01T00:00:00"), to: moment("9999-12-31T23:59:59.9999999") } const timePeriodNames = { 600: '1 минута', 86400:'1 день', 604800:'1 неделя' } const imgPaths = { '.pdf': '/images/pdf.png', '.las': '/images/las.png' } // Экспорт рендера export default function Report(props) { const [rangeDate, setRangeDate] = useState([moment().subtract(1,'days'), moment()]) const [step, setStep] = useState(600) const [format, setFormat] = useState(0) const [reportProgress, setReportProgress] = useState(0.0) const [approxPages, setPagesCount] = useState(0) const [suitableReports, setSuitableReports] = useState([]) const [loader, setLoader] = useState(false) let wellId = useParams().id; const columns = [ { title: '', dataIndex: 'reportFormat', key: 'reportFormat', render: format => }, { title: 'Параметры отчета', dataIndex: 'reportParams', key: 'reportParams', }, { title: 'Название отчета', dataIndex: 'reportName', key: 'reportName', render: name => {name} }, ]; const handleReportProgress = (data) => { console.log('data: ' + data) if(data) { setReportProgress(data) } console.log('reportProgress: ' + reportProgress) //console.log(data) } const handleReportCreation = async (values) => { let begin = rangeDate[0].toISOString() let end = rangeDate[1].toISOString() let taskId = null; ReportService.createReport(wellId, values.step, values.format, begin, end) .then((data) => { if(data) { taskId = data let unSubscribeReportHub = Subscribe('hubs/reports', 'GetReportProgress', `Report_${taskId}`, handleReportProgress) //unSubscribeReportHub() } }) .catch(error => { notify(`Не удалось создать отчет по скважине (${wellId}) c ${rangeDate[0].format("DD.MM.YYYY hh:mm:ss")} по ${rangeDate[1].format("DD.MM.YYYY hh:mm:ss")}`, 'error') console.error(error) }) }; function disabledDate(current) { return reportDatesRange.From >= current || reportDatesRange.To <= current; } useEffect(()=>{ async function getRepostSizeAsync() { let begin = rangeDate[0].toISOString() let end = rangeDate[1].toISOString() try { let approxPagesResponse = await ReportService.getReportSize(wellId, step, format, begin, end) setPagesCount(approxPagesResponse) } catch(error) { notify(`Не удалось получить предварительный размер отчета c ${rangeDate[0].format("DD.MM.YYYY hh:mm:ss")} по ${rangeDate[1].format("DD.MM.YYYY hh:mm:ss")}`, 'error') console.error(error) } finally { setLoader(false) } } getRepostSizeAsync() },[rangeDate, step, format]) useEffect(()=>{ async function getSuitableReportsAsync() { let begin = rangeDate[0].toISOString() let end = rangeDate[1].toISOString() try { setLoader(true) let suitableReportsResponse = await ReportService.getSuitableReportsNames(wellId, step, format, begin, end) let suitableReports = suitableReportsResponse.map(value => { return { key: value.id, reportFormat: value.format, reportParams: `Дата создания: ${new Date(value.date).toLocaleDateString()}, Данные от ${new Date(value.begin).toLocaleString()} до ${new Date(value.end).toLocaleString()}, Шаг: ${timePeriodNames[value.step]}`, reportName: value.name } }) setSuitableReports(suitableReports) } catch(error) { notify(`Не удалось получить подходящие по параметрам отчеты c ${rangeDate[0].format("DD.MM.YYYY hh:mm:ss")} по ${rangeDate[1].format("DD.MM.YYYY hh:mm:ss")}`, 'error') console.error(error) } finally { setLoader(false) } } getSuitableReportsAsync() },[rangeDate, step, format]) useEffect(()=>{ async function getDatesRange() { let response = await ReportService.getReportsDateRange(wellId) reportDatesRange.from = moment(response.from) reportDatesRange.to = moment(response.to) } getDatesRange() //return ()=>{uns && uns()} },[]) return (<>