| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you 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 {each, bind} from 'zrender/src/core/util'; |
| import SeriesModel from '../../model/Series'; |
| import createSeriesData from '../helper/createSeriesData'; |
| import { |
| SeriesOption, |
| SeriesEncodeOptionMixin, |
| LineStyleOption, |
| SeriesLabelOption, |
| SeriesTooltipOption, |
| DimensionName, |
| OptionDataValue, |
| StatesOptionMixin, |
| OptionEncodeValue, |
| Dictionary, |
| OptionEncode, |
| DefaultStatesMixinEmphasis, |
| ZRColor, |
| CallbackDataParams |
| } from '../../util/types'; |
| import GlobalModel from '../../model/Global'; |
| import SeriesData from '../../data/SeriesData'; |
| import { ParallelActiveState, ParallelAxisOption } from '../../coord/parallel/AxisModel'; |
| import Parallel from '../../coord/parallel/Parallel'; |
| import ParallelModel from '../../coord/parallel/ParallelModel'; |
| |
| type ParallelSeriesDataValue = OptionDataValue[]; |
| |
| interface ParallelStatesMixin { |
| emphasis?: DefaultStatesMixinEmphasis |
| } |
| export interface ParallelStateOption<TCbParams = never> { |
| lineStyle?: LineStyleOption<(TCbParams extends never ? never : (params: TCbParams) => ZRColor) | ZRColor> |
| label?: SeriesLabelOption |
| } |
| |
| export interface ParallelSeriesDataItemOption extends ParallelStateOption, |
| StatesOptionMixin<ParallelStateOption, ParallelStatesMixin> { |
| value?: ParallelSeriesDataValue[] |
| } |
| export interface ParallelSeriesOption extends |
| SeriesOption<ParallelStateOption<CallbackDataParams>, ParallelStatesMixin>, |
| ParallelStateOption<CallbackDataParams>, |
| SeriesEncodeOptionMixin { |
| |
| type?: 'parallel'; |
| |
| coordinateSystem?: string; |
| parallelIndex?: number; |
| parallelId?: string; |
| |
| inactiveOpacity?: number; |
| activeOpacity?: number; |
| |
| smooth?: boolean | number; |
| realtime?: boolean; |
| tooltip?: SeriesTooltipOption; |
| |
| parallelAxisDefault?: ParallelAxisOption; |
| |
| |
| data?: (ParallelSeriesDataValue | ParallelSeriesDataItemOption)[] |
| } |
| |
| |
| class ParallelSeriesModel extends SeriesModel<ParallelSeriesOption> { |
| |
| static type = 'series.parallel'; |
| readonly type = ParallelSeriesModel.type; |
| |
| static dependencies = ['parallel']; |
| |
| visualStyleAccessPath = 'lineStyle'; |
| visualDrawType = 'stroke' as const; |
| |
| coordinateSystem: Parallel; |
| |
| |
| getInitialData(this: ParallelSeriesModel, option: ParallelSeriesOption, ecModel: GlobalModel): SeriesData { |
| return createSeriesData(null, this, { |
| useEncodeDefaulter: bind(makeDefaultEncode, null, this) |
| }); |
| } |
| |
| /** |
| * User can get data raw indices on 'axisAreaSelected' event received. |
| * |
| * @return Raw indices |
| */ |
| getRawIndicesByActiveState(activeState: ParallelActiveState): number[] { |
| const coordSys = this.coordinateSystem; |
| const data = this.getData(); |
| const indices = [] as number[]; |
| |
| coordSys.eachActiveState(data, function (theActiveState, dataIndex) { |
| if (activeState === theActiveState) { |
| indices.push(data.getRawIndex(dataIndex)); |
| } |
| }); |
| |
| return indices; |
| } |
| |
| static defaultOption: ParallelSeriesOption = { |
| // zlevel: 0, |
| z: 2, |
| |
| coordinateSystem: 'parallel', |
| parallelIndex: 0, |
| |
| label: { |
| show: false |
| }, |
| |
| inactiveOpacity: 0.05, |
| activeOpacity: 1, |
| |
| lineStyle: { |
| width: 1, |
| opacity: 0.45, |
| type: 'solid' |
| }, |
| emphasis: { |
| label: { |
| show: false |
| } |
| }, |
| |
| progressive: 500, |
| smooth: false, // true | false | number |
| |
| animationEasing: 'linear' |
| }; |
| |
| } |
| |
| function makeDefaultEncode(seriesModel: ParallelSeriesModel): OptionEncode { |
| // The mapping of parallelAxis dimension to data dimension can |
| // be specified in parallelAxis.option.dim. For example, if |
| // parallelAxis.option.dim is 'dim3', it mapping to the third |
| // dimension of data. But `data.encode` has higher priority. |
| // Moreover, parallelModel.dimension should not be regarded as data |
| // dimensions. Consider dimensions = ['dim4', 'dim2', 'dim6']; |
| |
| const parallelModel = seriesModel.ecModel.getComponent( |
| 'parallel', seriesModel.get('parallelIndex') |
| ) as ParallelModel; |
| if (!parallelModel) { |
| return; |
| } |
| |
| const encodeDefine: Dictionary<OptionEncodeValue> = {}; |
| each(parallelModel.dimensions, function (axisDim) { |
| const dataDimIndex = convertDimNameToNumber(axisDim); |
| encodeDefine[axisDim] = dataDimIndex; |
| }); |
| |
| return encodeDefine; |
| } |
| |
| function convertDimNameToNumber(dimName: DimensionName): number { |
| return +dimName.replace('dim', ''); |
| } |
| |
| export default ParallelSeriesModel; |