123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274 |
- /*
- * <<
- * Davinci
- * ==
- * Copyright (C) 2016 - 2017 EDP
- * ==
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * >>
- */
- import { IChartProps } from '../../components/Chart'
- import { DEFAULT_SPLITER } from 'app/globalConstants'
- import {
- decodeMetricName,
- getChartTooltipLabel
- } from '../../components/util'
- import {
- getDimetionAxisOption,
- getMetricAxisOption,
- getLabelOption,
- getLegendOption,
- getGridPositions,
- makeGrouped,
- getGroupedXaxis,
- getCartesianChartMetrics,
- getCartesianChartReferenceOptions
- } from './util'
- import { getFormattedValue } from '../../components/Config/Format'
- import ChartTypes from '../../config/chart/ChartTypes'
- const defaultTheme = require('assets/json/echartsThemes/default.project.json')
- const defaultThemeColors = defaultTheme.theme.color
- export default function (chartProps: IChartProps, drillOptions?: any) {
- const { data, cols, chartStyles, color, tip, references } = chartProps
- const metrics = getCartesianChartMetrics(chartProps.metrics)
- const { spec, xAxis, yAxis, splitLine, label, legend } = chartStyles
- const {
- showVerticalLine,
- verticalLineColor,
- verticalLineSize,
- verticalLineStyle,
- showHorizontalLine,
- horizontalLineColor,
- horizontalLineSize,
- horizontalLineStyle
- } = splitLine
- const { smooth, step } = spec
- const { selectedItems } = drillOptions
- const labelOption = {
- label: getLabelOption('line', label, metrics)
- }
- const referenceOptions = getCartesianChartReferenceOptions(references, ChartTypes.Line, metrics, data)
- const xAxisColumnName = cols[0].name
- let xAxisData = []
- let grouped = {}
- if (color.items.length) {
- xAxisData = getGroupedXaxis(data, xAxisColumnName, metrics)
- grouped = makeGrouped(
- data,
- color.items.map((c) => c.name),
- xAxisColumnName,
- metrics,
- xAxisData
- )
- } else {
- xAxisData = data.map((d) => d[xAxisColumnName] || '')
- }
- const series = []
- const seriesData = []
- metrics.forEach((m, i) => {
- const decodedMetricName = decodeMetricName(m.name)
- if (color.items.length) {
- const groupedEntries = Object.entries(grouped)
- groupedEntries.forEach(([k, v]: [string, any[]], gIndex) => {
- const serieObj = {
- id: `${m.name}${DEFAULT_SPLITER}${DEFAULT_SPLITER}${k}`,
- name: `${k}${metrics.length > 1 ? ` ${m.displayName}` : ''}`,
- type: 'line',
- sampling: 'average',
- data: v.map((g, index) => {
- const itemStyleObj =
- selectedItems &&
- selectedItems.length &&
- selectedItems.some((item) => item === index)
- ? {
- itemStyle: {
- normal: {
- opacity: 1,
- borderWidth: 6
- }
- }
- }
- : {}
- // if (index === interactIndex) {
- // return {
- // value: g[m],
- // itemStyle: {
- // normal: {
- // opacity: 1
- // }
- // }
- // }
- // } else {
- // return g[`${m.agg}(${decodedMetricName})`]
- return {
- value: g[`${m.agg}(${decodedMetricName})`],
- ...itemStyleObj
- }
- // }
- }),
- itemStyle: {
- normal: {
- // opacity: interactIndex === undefined ? 1 : 0.25
- color: color.items[0].config.values[k],
- opacity: selectedItems && selectedItems.length > 0 ? 0.7 : 1
- }
- },
- smooth,
- step,
- ...labelOption,
- ...(gIndex === groupedEntries.length - 1 &&
- i === metrics.length - 1 &&
- referenceOptions)
- }
- series.push(serieObj)
- seriesData.push(grouped[k])
- })
- } else {
- const serieObj = {
- id: m.name,
- name: m.displayName,
- type: 'line',
- sampling: 'average',
- data: data.map((g, index) => {
- const itemStyleObj =
- selectedItems &&
- selectedItems.length &&
- selectedItems.some((item) => item === index)
- ? {
- itemStyle: {
- normal: {
- opacity: 1,
- borderWidth: 8
- }
- }
- }
- : {}
- // if (index === interactIndex) {
- // return {
- // value: d[m],
- // lineStyle: {
- // normal: {
- // opacity: 1
- // }
- // },
- // itemStyle: {
- // normal: {
- // opacity: 1
- // }
- // }
- // }
- // } else {
- return {
- value: g[`${m.agg}(${decodedMetricName})`],
- ...itemStyleObj
- }
- // }
- }),
- // lineStyle: {
- // normal: {
- // opacity: interactIndex === undefined ? 1 : 0.25
- // }
- // },
- itemStyle: {
- normal: {
- // opacity: interactIndex === undefined ? 1 : 0.25
- color: color.value[m.name] || defaultThemeColors[i],
- opacity: selectedItems && selectedItems.length > 0 ? 0.7 : 1
- }
- },
- smooth,
- step,
- ...labelOption,
- ...(i === metrics.length - 1 && referenceOptions)
- }
- series.push(serieObj)
- seriesData.push([...data])
- }
- })
- const seriesNames = series.map((s) => s.name)
- // dataZoomOptions = dataZoomThreshold > 0 && dataZoomThreshold < dataSource.length && {
- // dataZoom: [{
- // type: 'inside',
- // start: Math.round((1 - dataZoomThreshold / dataSource.length) * 100),
- // end: 100
- // }, {
- // start: Math.round((1 - dataZoomThreshold / dataSource.length) * 100),
- // end: 100,
- // handleIcon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z',
- // handleSize: '80%',
- // handleStyle: {
- // color: '#fff',
- // shadowBlur: 3,
- // shadowColor: 'rgba(0, 0, 0, 0.6)',
- // shadowOffsetX: 2,
- // shadowOffsetY: 2
- // }
- // }]
- // }
- const xAxisSplitLineConfig = {
- showLine: showVerticalLine,
- lineColor: verticalLineColor,
- lineSize: verticalLineSize,
- lineStyle: verticalLineStyle
- }
- const yAxisSplitLineConfig = {
- showLine: showHorizontalLine,
- lineColor: horizontalLineColor,
- lineSize: horizontalLineSize,
- lineStyle: horizontalLineStyle
- }
- const options = {
- xAxis: getDimetionAxisOption(xAxis, xAxisSplitLineConfig, xAxisData),
- yAxis: getMetricAxisOption(
- yAxis,
- yAxisSplitLineConfig,
- metrics.map((m) => decodeMetricName(m.name)).join(` / `)
- ),
- series,
- tooltip: {
- formatter: getChartTooltipLabel('line', seriesData, {
- cols,
- metrics,
- color,
- tip
- })
- },
- legend: getLegendOption(legend, seriesNames),
- grid: getGridPositions(
- legend,
- seriesNames,
- '',
- false,
- yAxis,
- xAxis,
- xAxisData
- )
- }
- return options
- }
|