|  | /* | 
|  | * 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 SeriesModel from '../../model/Series'; | 
|  | import createSeriesDataSimply from '../helper/createSeriesDataSimply'; | 
|  | import * as zrUtil from 'zrender/src/core/util'; | 
|  | import LegendVisualProvider from '../../visual/LegendVisualProvider'; | 
|  | import { | 
|  | SeriesOption, | 
|  | LineStyleOption, | 
|  | SeriesLabelOption, | 
|  | SymbolOptionMixin, | 
|  | ItemStyleOption, | 
|  | AreaStyleOption, | 
|  | OptionDataValue, | 
|  | StatesOptionMixin, | 
|  | OptionDataItemObject, | 
|  | SeriesEncodeOptionMixin, | 
|  | CallbackDataParams, | 
|  | DefaultStatesMixinEmphasis | 
|  | } from '../../util/types'; | 
|  | import GlobalModel from '../../model/Global'; | 
|  | import SeriesData from '../../data/SeriesData'; | 
|  | import Radar from '../../coord/radar/Radar'; | 
|  | import { | 
|  | createTooltipMarkup, retrieveVisualColorForTooltipMarker | 
|  | } from '../../component/tooltip/tooltipMarkup'; | 
|  |  | 
|  | type RadarSeriesDataValue = OptionDataValue[]; | 
|  |  | 
|  | interface RadarStatesMixin { | 
|  | emphasis?: DefaultStatesMixinEmphasis | 
|  | } | 
|  | export interface RadarSeriesStateOption<TCbParams = never> { | 
|  | lineStyle?: LineStyleOption | 
|  | areaStyle?: AreaStyleOption | 
|  | label?: SeriesLabelOption | 
|  | itemStyle?: ItemStyleOption<TCbParams> | 
|  | } | 
|  | export interface RadarSeriesDataItemOption extends SymbolOptionMixin, | 
|  | RadarSeriesStateOption<CallbackDataParams>, | 
|  | StatesOptionMixin<RadarSeriesStateOption<CallbackDataParams>, RadarStatesMixin>, | 
|  | OptionDataItemObject<RadarSeriesDataValue> { | 
|  | } | 
|  |  | 
|  | export interface RadarSeriesOption | 
|  | extends SeriesOption<RadarSeriesStateOption, RadarStatesMixin>, | 
|  | RadarSeriesStateOption, | 
|  | SymbolOptionMixin<CallbackDataParams>, SeriesEncodeOptionMixin { | 
|  | type?: 'radar' | 
|  | coordinateSystem?: 'radar' | 
|  |  | 
|  | radarIndex?: number | 
|  | radarId?: string | 
|  |  | 
|  | data?: (RadarSeriesDataItemOption | RadarSeriesDataValue)[] | 
|  | } | 
|  |  | 
|  | class RadarSeriesModel extends SeriesModel<RadarSeriesOption> { | 
|  |  | 
|  | static readonly type = 'series.radar'; | 
|  | readonly type = RadarSeriesModel.type; | 
|  |  | 
|  | static dependencies = ['radar']; | 
|  |  | 
|  | coordinateSystem: Radar; | 
|  |  | 
|  | hasSymbolVisual = true; | 
|  |  | 
|  | // Overwrite | 
|  | init(option: RadarSeriesOption) { | 
|  | super.init.apply(this, arguments as any); | 
|  |  | 
|  | // Enable legend selection for each data item | 
|  | // Use a function instead of direct access because data reference may changed | 
|  | this.legendVisualProvider = new LegendVisualProvider( | 
|  | zrUtil.bind(this.getData, this), zrUtil.bind(this.getRawData, this) | 
|  | ); | 
|  |  | 
|  | } | 
|  |  | 
|  | getInitialData(option: RadarSeriesOption, ecModel: GlobalModel): SeriesData { | 
|  | return createSeriesDataSimply(this, { | 
|  | generateCoord: 'indicator_', | 
|  | generateCoordCount: Infinity | 
|  | }); | 
|  | } | 
|  |  | 
|  | formatTooltip( | 
|  | dataIndex: number, | 
|  | multipleSeries?: boolean, | 
|  | dataType?: string | 
|  | ) { | 
|  | const data = this.getData(); | 
|  | const coordSys = this.coordinateSystem; | 
|  | const indicatorAxes = coordSys.getIndicatorAxes(); | 
|  | const name = this.getData().getName(dataIndex); | 
|  | const nameToDisplay = name === '' ? this.name : name; | 
|  | const markerColor = retrieveVisualColorForTooltipMarker(this, dataIndex); | 
|  |  | 
|  | return createTooltipMarkup('section', { | 
|  | header: nameToDisplay, | 
|  | sortBlocks: true, | 
|  | blocks: zrUtil.map(indicatorAxes, axis => { | 
|  | const val = data.get(data.mapDimension(axis.dim), dataIndex); | 
|  | return createTooltipMarkup('nameValue', { | 
|  | markerType: 'subItem', | 
|  | markerColor: markerColor, | 
|  | name: axis.name, | 
|  | value: val, | 
|  | sortParam: val | 
|  | }); | 
|  | }) | 
|  | }); | 
|  | } | 
|  |  | 
|  | getTooltipPosition(dataIndex: number) { | 
|  | if (dataIndex != null) { | 
|  | const data = this.getData(); | 
|  | const coordSys = this.coordinateSystem; | 
|  | const values = data.getValues( | 
|  | zrUtil.map(coordSys.dimensions, function (dim) { | 
|  | return data.mapDimension(dim); | 
|  | }), dataIndex | 
|  | ); | 
|  |  | 
|  | for (let i = 0, len = values.length; i < len; i++) { | 
|  | if (!isNaN(values[i] as number)) { | 
|  | const indicatorAxes = coordSys.getIndicatorAxes(); | 
|  | return coordSys.coordToPoint(indicatorAxes[i].dataToCoord(values[i]), i); | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | static defaultOption: RadarSeriesOption = { | 
|  | // zlevel: 0, | 
|  | z: 2, | 
|  | colorBy: 'data', | 
|  | coordinateSystem: 'radar', | 
|  | legendHoverLink: true, | 
|  | radarIndex: 0, | 
|  | lineStyle: { | 
|  | width: 2, | 
|  | type: 'solid', | 
|  | join: 'round' | 
|  | }, | 
|  | label: { | 
|  | position: 'top' | 
|  | }, | 
|  | // areaStyle: { | 
|  | // }, | 
|  | // itemStyle: {} | 
|  | symbolSize: 8 | 
|  | // symbolRotate: null | 
|  | }; | 
|  | } | 
|  |  | 
|  | export default RadarSeriesModel; |