blob: f940873046e6c001933d5945ea975c08592fbc3f [file] [log] [blame]
/*
* 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 createListFromArray from '../helper/createListFromArray';
import SeriesModel from '../../model/Series';
import {
SeriesOnCartesianOptionMixin,
SeriesOption,
SeriesOnPolarOptionMixin,
SeriesStackOptionMixin,
SeriesLabelOption,
LineStyleOption,
ItemStyleOption,
AreaStyleOption,
OptionDataValue,
SymbolOptionMixin,
SeriesSamplingOptionMixin,
StatesOptionMixin,
SeriesEncodeOptionMixin,
CallbackDataParams,
DefaultEmphasisFocus
} from '../../util/types';
import List from '../../data/List';
import type Cartesian2D from '../../coord/cartesian/Cartesian2D';
import type Polar from '../../coord/polar/Polar';
type LineDataValue = OptionDataValue | OptionDataValue[];
interface ExtraStateOption {
emphasis?: {
focus?: DefaultEmphasisFocus
scale?: boolean
}
}
export interface LineStateOption {
itemStyle?: ItemStyleOption
label?: SeriesLabelOption
}
export interface LineDataItemOption extends SymbolOptionMixin,
LineStateOption, StatesOptionMixin<LineStateOption, ExtraStateOption> {
name?: string
value?: LineDataValue
}
export interface LineEndLabelOption extends SeriesLabelOption {
valueAnimation: boolean
}
export interface LineSeriesOption extends SeriesOption<LineStateOption, ExtraStateOption & {
emphasis?: {
lineStyle?: LineStyleOption | {
width?: 'bolder'
}
areaStyle?: AreaStyleOption
}
blur?: {
lineStyle?: LineStyleOption
areaStyle?: AreaStyleOption
}
}>, LineStateOption,
SeriesOnCartesianOptionMixin,
SeriesOnPolarOptionMixin,
SeriesStackOptionMixin,
SeriesSamplingOptionMixin,
SymbolOptionMixin<CallbackDataParams>,
SeriesEncodeOptionMixin {
type?: 'line'
coordinateSystem?: 'cartesian2d' | 'polar'
// If clip the overflow value
clip?: boolean
label?: SeriesLabelOption
endLabel?: LineEndLabelOption
lineStyle?: LineStyleOption
areaStyle?: AreaStyleOption & {
origin?: 'auto' | 'start' | 'end'
}
step?: false | 'start' | 'end' | 'middle'
smooth?: boolean | number
smoothMonotone?: 'x' | 'y' | 'none'
connectNulls?: boolean
showSymbol?: boolean
// false | 'auto': follow the label interval strategy.
// true: show all symbols.
showAllSymbol?: 'auto'
data?: (LineDataValue | LineDataItemOption)[]
}
class LineSeriesModel extends SeriesModel<LineSeriesOption> {
static readonly type = 'series.line';
type = LineSeriesModel.type;
static readonly dependencies = ['grid', 'polar'];
coordinateSystem: Cartesian2D | Polar;
hasSymbolVisual = true;
legendSymbol = 'line';
getInitialData(option: LineSeriesOption): List {
if (__DEV__) {
const coordSys = option.coordinateSystem;
if (coordSys !== 'polar' && coordSys !== 'cartesian2d') {
throw new Error('Line not support coordinateSystem besides cartesian and polar');
}
}
return createListFromArray(this.getSource(), this, {
useEncodeDefaulter: true
});
}
static defaultOption: LineSeriesOption = {
zlevel: 0,
z: 3,
coordinateSystem: 'cartesian2d',
legendHoverLink: true,
clip: true,
label: {
position: 'top'
},
endLabel: {
show: false,
valueAnimation: true,
distance: 8
},
lineStyle: {
width: 2,
type: 'solid'
},
emphasis: {
scale: true,
lineStyle: {
width: 'bolder'
}
},
// areaStyle: {
// origin of areaStyle. Valid values:
// `'auto'/null/undefined`: from axisLine to data
// `'start'`: from min to data
// `'end'`: from data to max
// origin: 'auto'
// },
// false, 'start', 'end', 'middle'
step: false,
// Disabled if step is true
smooth: false,
smoothMonotone: null,
symbol: 'emptyCircle',
symbolSize: 4,
symbolRotate: null,
showSymbol: true,
// `false`: follow the label interval strategy.
// `true`: show all symbols.
// `'auto'`: If possible, show all symbols, otherwise
// follow the label interval strategy.
showAllSymbol: 'auto',
// Whether to connect break point.
connectNulls: false,
// Sampling for large data. Can be: 'average', 'max', 'min', 'sum', 'lttb'.
sampling: 'none',
animationEasing: 'linear',
// Disable progressive
progressive: 0,
hoverLayerThreshold: Infinity
};
}
export default LineSeriesModel;