forked from ddrilling/asb_cloud_front
Разрешение конфликта в TelemetryView
This commit is contained in:
commit
aab142a3f9
@ -11,7 +11,7 @@
|
|||||||
"antd": "^4.15.0",
|
"antd": "^4.15.0",
|
||||||
"chart.js": "^3.0.2",
|
"chart.js": "^3.0.2",
|
||||||
"chartjs-adapter-date-fns": "^1.1.0-beta.1",
|
"chartjs-adapter-date-fns": "^1.1.0-beta.1",
|
||||||
"chartjs-plugin-datalabels": "^2.0.0-beta.1",
|
"chartjs-plugin-datalabels": "^2.0.0-rc.1",
|
||||||
"craco-less": "^1.17.1",
|
"craco-less": "^1.17.1",
|
||||||
"date-fns": "^2.20.0",
|
"date-fns": "^2.20.0",
|
||||||
"moment": "^2.29.1",
|
"moment": "^2.29.1",
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
import { useState, useEffect } from 'react';
|
import { useState, useEffect, useRef } from 'react';
|
||||||
import {CaretUpOutlined, CaretDownOutlined} from '@ant-design/icons'
|
import {CaretUpOutlined, CaretDownOutlined} from '@ant-design/icons'
|
||||||
|
|
||||||
export const ValueDisplay = ({prefix, value, suffix, isArrowVisible}) =>{
|
export const ValueDisplay = ({prefix, value, suffix, isArrowVisible}) =>{
|
||||||
const [oldVal, setOldVal] = useState(NaN)
|
const [oldVal, setOldVal] = useState(NaN)
|
||||||
const [val, setVal] = useState('---')
|
const [val, setVal] = useState('---')
|
||||||
|
const arrowRef = useRef(null);
|
||||||
let arrow = null
|
|
||||||
|
|
||||||
useEffect(()=>{
|
useEffect(()=>{
|
||||||
if(value)
|
if(value)
|
||||||
@ -14,16 +13,16 @@ export const ValueDisplay = ({prefix, value, suffix, isArrowVisible}) =>{
|
|||||||
if (isArrowVisible)
|
if (isArrowVisible)
|
||||||
{
|
{
|
||||||
if (value > oldVal)
|
if (value > oldVal)
|
||||||
arrow = <CaretUpOutlined style={{color:"red"}} />
|
arrowRef.current = (<CaretUpOutlined style={{color:"red"}} />)
|
||||||
else if (value < oldVal)
|
else if (value < oldVal)
|
||||||
arrow = <CaretDownOutlined style={{color:"red"}} />
|
arrowRef.current = (<CaretDownOutlined style={{color:"red"}} />)
|
||||||
setOldVal(value)
|
setOldVal(value)
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
setVal(value)
|
setVal(value)
|
||||||
},[value])
|
},[value])
|
||||||
|
|
||||||
return(<span className='display_value'>{prefix} {val} {suffix}{arrow}</span>)
|
return(<span className='display_value'>{prefix} {val} {suffix}{arrowRef.current}</span>)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const Display = (props)=>{
|
export const Display = (props)=>{
|
||||||
|
@ -63,6 +63,7 @@ export const ChartTimeArchive: React.FC<ChartTimeProps> = (props) => {
|
|||||||
let points = props.data.map(dataItem => {
|
let points = props.data.map(dataItem => {
|
||||||
return {
|
return {
|
||||||
x: dataItem[lineCfg.xAccessorName],
|
x: dataItem[lineCfg.xAccessorName],
|
||||||
|
label:0,
|
||||||
y: new Date(dataItem[lineCfg.yAccessorName])
|
y: new Date(dataItem[lineCfg.yAccessorName])
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -11,8 +11,9 @@ import {
|
|||||||
ChartTypeRegistry,
|
ChartTypeRegistry,
|
||||||
ChartOptions} from 'chart.js'
|
ChartOptions} from 'chart.js'
|
||||||
import 'chartjs-adapter-date-fns';
|
import 'chartjs-adapter-date-fns';
|
||||||
|
import ChartDataLabels from 'chartjs-plugin-datalabels';
|
||||||
|
|
||||||
Chart.register( TimeScale, LinearScale, LineController, LineElement, PointElement, Legend );
|
Chart.register( TimeScale, LinearScale, LineController, LineElement, PointElement, Legend, ChartDataLabels );
|
||||||
|
|
||||||
const defaultOptions = {
|
const defaultOptions = {
|
||||||
//maintainAspectRatio: false,
|
//maintainAspectRatio: false,
|
||||||
@ -61,15 +62,11 @@ const defaultOptions = {
|
|||||||
hoverRadius:5,
|
hoverRadius:5,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
plugins:{
|
|
||||||
legend:{
|
|
||||||
display: false,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export type ChartTimeData = ChartData<keyof ChartTypeRegistry, {
|
export type ChartTimeData = ChartData<keyof ChartTypeRegistry, {
|
||||||
x: number;
|
x: number;
|
||||||
|
label: number;
|
||||||
y: Date;
|
y: Date;
|
||||||
}[], unknown>
|
}[], unknown>
|
||||||
|
|
||||||
@ -82,7 +79,8 @@ export type ChartTimeDataParams = {
|
|||||||
|
|
||||||
export type ChartTimeBaseProps = {
|
export type ChartTimeBaseProps = {
|
||||||
dataParams: ChartTimeDataParams,
|
dataParams: ChartTimeDataParams,
|
||||||
options?: ChartOptions<keyof ChartTypeRegistry>,
|
// TODO: Create good type for options
|
||||||
|
options?: ChartOptions<keyof ChartTypeRegistry> | any,
|
||||||
}
|
}
|
||||||
|
|
||||||
const timeUnitByInterval = (intervalSec:number):String =>{
|
const timeUnitByInterval = (intervalSec:number):String =>{
|
||||||
@ -110,6 +108,7 @@ export const ChartTimeBase: React.FC<ChartTimeBaseProps> = (props) => {
|
|||||||
|
|
||||||
let newChart = new Chart(chartRef.current, {
|
let newChart = new Chart(chartRef.current, {
|
||||||
type: 'line',
|
type: 'line',
|
||||||
|
plugins: [ChartDataLabels],
|
||||||
options: thisOptions,
|
options: thisOptions,
|
||||||
data: props.dataParams.data
|
data: props.dataParams.data
|
||||||
})
|
})
|
||||||
|
@ -19,6 +19,7 @@ function GetOrCreateDatasetByLineConfig (data: ChartTimeData, lineConfig: LineC
|
|||||||
borderColor: lineConfig.borderColor ?? color,
|
borderColor: lineConfig.borderColor ?? color,
|
||||||
borderWidth: lineConfig.borderWidth ?? 1,
|
borderWidth: lineConfig.borderWidth ?? 1,
|
||||||
borderDash: lineConfig.dash ?? [],
|
borderDash: lineConfig.dash ?? [],
|
||||||
|
showLine: lineConfig.showLine,
|
||||||
}
|
}
|
||||||
data.datasets.push(dataset);
|
data.datasets.push(dataset);
|
||||||
}
|
}
|
||||||
@ -37,6 +38,8 @@ export type LineConfig = {
|
|||||||
borderWidth?: number
|
borderWidth?: number
|
||||||
dash?:number[]
|
dash?:number[]
|
||||||
labels?: any[]
|
labels?: any[]
|
||||||
|
showLine: boolean
|
||||||
|
xConstValue?: number|null
|
||||||
}
|
}
|
||||||
|
|
||||||
export type ChartTimeProps = {
|
export type ChartTimeProps = {
|
||||||
@ -64,7 +67,8 @@ export const ChartTimeOnline: React.FC<ChartTimeProps> = (props) => {
|
|||||||
props.lines.forEach(lineCfg => {
|
props.lines.forEach(lineCfg => {
|
||||||
let dataset = GetOrCreateDatasetByLineConfig(preDataParams.data, lineCfg)
|
let dataset = GetOrCreateDatasetByLineConfig(preDataParams.data, lineCfg)
|
||||||
let points = props.data.map(dataItem => {return{
|
let points = props.data.map(dataItem => {return{
|
||||||
x: dataItem[lineCfg.xAccessorName],
|
x: lineCfg.xConstValue ?? dataItem[lineCfg.xAccessorName],
|
||||||
|
label: dataItem[lineCfg.xAccessorName],
|
||||||
y: new Date(dataItem[lineCfg.yAccessorName])}
|
y: new Date(dataItem[lineCfg.yAccessorName])}
|
||||||
})
|
})
|
||||||
//dataset.data = [ ...dataset.data, ...points,].slice(-1024)
|
//dataset.data = [ ...dataset.data, ...points,].slice(-1024)
|
||||||
@ -85,6 +89,31 @@ export const ChartTimeOnline: React.FC<ChartTimeProps> = (props) => {
|
|||||||
|
|
||||||
}, [ props.data, props.lines, props.interval, props.yDisplay])
|
}, [ props.data, props.lines, props.interval, props.yDisplay])
|
||||||
|
|
||||||
return(<ChartTimeBase dataParams = {dataParams} />)
|
const chartPluginsOptions = {
|
||||||
|
plugins:{
|
||||||
|
legend:{
|
||||||
|
display: false,
|
||||||
|
},
|
||||||
|
datalabels: {
|
||||||
|
backgroundColor: 'transparent',
|
||||||
|
borderRadius: 4,
|
||||||
|
color: '#000B',
|
||||||
|
display: function(context:any) {
|
||||||
|
return context.dataset.label === 'wellDepth'
|
||||||
|
? 'auto'
|
||||||
|
: false
|
||||||
|
},
|
||||||
|
formatter: function(value: any, context: any) {
|
||||||
|
return `${value.y.toLocaleTimeString()} ${value.label.toPrecision(4)}`
|
||||||
|
},
|
||||||
|
padding: 6,
|
||||||
|
align: 'left',
|
||||||
|
anchor: 'center',
|
||||||
|
clip: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return(<ChartTimeBase dataParams = {dataParams} options = { chartPluginsOptions } />)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,7 +21,8 @@ const dash = [7, 3]
|
|||||||
const blockHeightGroup = {
|
const blockHeightGroup = {
|
||||||
label: "Высота блока",
|
label: "Высота блока",
|
||||||
yDisplay: false,
|
yDisplay: false,
|
||||||
linePv: {label: "blockHeight", units: 'м', xAccessorName: "blockHeight", yAccessorName: "date", color: '#333'},
|
linePv: { label: "blockPosition", units: 'м', xAccessorName: "blockPosition", yAccessorName: "date", color: '#333' },
|
||||||
|
lineOther: { label: "wellDepth", units: 'м', xAccessorName: "wellDepth", yAccessorName: "date", color: '#333', showLine: false, xConstValue:30 },
|
||||||
}
|
}
|
||||||
|
|
||||||
const blockSpeedGroup = {
|
const blockSpeedGroup = {
|
||||||
@ -119,6 +120,9 @@ export const Column = ({lineGroup, data, interval}) => {
|
|||||||
if (lineGroup.lineSp)
|
if (lineGroup.lineSp)
|
||||||
lines.push(lineGroup.lineSp)
|
lines.push(lineGroup.lineSp)
|
||||||
|
|
||||||
|
if (lineGroup.lineOther)
|
||||||
|
lines.push(lineGroup.lineOther)
|
||||||
|
|
||||||
let dataLast = null
|
let dataLast = null
|
||||||
let pv = null
|
let pv = null
|
||||||
if (data?.length > 0) {
|
if (data?.length > 0) {
|
||||||
@ -222,6 +226,12 @@ export default function TelemetryView(props) {
|
|||||||
}
|
}
|
||||||
}, [id]);
|
}, [id]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
DataService.getData(id, null, chartInterval)
|
||||||
|
.then(handleReceiveDataSaub)
|
||||||
|
.catch(error => console.error(error))
|
||||||
|
}, [chartInterval]);
|
||||||
|
|
||||||
const colSpan = 24 / (paramsGroups.length)
|
const colSpan = 24 / (paramsGroups.length)
|
||||||
|
|
||||||
return (<div>
|
return (<div>
|
||||||
|
Loading…
Reference in New Issue
Block a user