Spaces:
Running
Running
| /* | |
| * 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; | |