| /* | |
| * 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 BaseBarSeriesModel, {BaseBarSeriesOption} from './BaseBarSeries'; | |
| import { | |
| ItemStyleOption, | |
| OptionDataValue, | |
| SeriesStackOptionMixin, | |
| StatesOptionMixin, | |
| OptionDataItemObject, | |
| SeriesSamplingOptionMixin, | |
| SeriesLabelOption, | |
| SeriesEncodeOptionMixin, | |
| DefaultStatesMixinEmphasis, | |
| CallbackDataParams | |
| } from '../../util/types'; | |
| import type Cartesian2D from '../../coord/cartesian/Cartesian2D'; | |
| import createSeriesData from '../helper/createSeriesData'; | |
| import type Polar from '../../coord/polar/Polar'; | |
| import { inheritDefaultOption } from '../../util/component'; | |
| import SeriesData from '../../data/SeriesData'; | |
| import { BrushCommonSelectorsForSeries } from '../../component/brush/selector'; | |
| export type PolarBarLabelPosition = SeriesLabelOption['position'] | |
| | 'start' | 'insideStart' | 'middle' | 'end' | 'insideEnd'; | |
| export type BarSeriesLabelOption = Omit<SeriesLabelOption, 'position'> | |
| & {position?: PolarBarLabelPosition | 'outside'}; | |
| export interface BarStateOption<TCbParams = never> { | |
| itemStyle?: BarItemStyleOption<TCbParams> | |
| label?: BarSeriesLabelOption | |
| } | |
| interface BarStatesMixin { | |
| emphasis?: DefaultStatesMixinEmphasis | |
| } | |
| export interface BarItemStyleOption<TCbParams = never> extends ItemStyleOption<TCbParams> { | |
| // Border radius is not supported for bar on polar | |
| borderRadius?: number | number[] | |
| } | |
| export interface BarDataItemOption extends BarStateOption, | |
| StatesOptionMixin<BarStateOption, BarStatesMixin>, | |
| OptionDataItemObject<OptionDataValue> { | |
| cursor?: string | |
| } | |
| export interface BarSeriesOption | |
| extends BaseBarSeriesOption<BarStateOption<CallbackDataParams>, BarStatesMixin>, | |
| BarStateOption<CallbackDataParams>, | |
| SeriesStackOptionMixin, SeriesSamplingOptionMixin, SeriesEncodeOptionMixin { | |
| type?: 'bar' | |
| coordinateSystem?: 'cartesian2d' | 'polar' | |
| clip?: boolean | |
| /** | |
| * If use caps on two sides of bars | |
| * Only available on tangential polar bar | |
| */ | |
| roundCap?: boolean | |
| showBackground?: boolean | |
| backgroundStyle?: ItemStyleOption & { | |
| borderRadius?: number | number[] | |
| } | |
| data?: (BarDataItemOption | OptionDataValue | OptionDataValue[])[] | |
| realtimeSort?: boolean | |
| } | |
| class BarSeriesModel extends BaseBarSeriesModel<BarSeriesOption> { | |
| static type = 'series.bar'; | |
| type = BarSeriesModel.type; | |
| static dependencies = ['grid', 'polar']; | |
| coordinateSystem: Cartesian2D | Polar; | |
| getInitialData(): SeriesData { | |
| return createSeriesData(null, this, { | |
| useEncodeDefaulter: true, | |
| createInvertedIndices: !!this.get('realtimeSort', true) || null | |
| }); | |
| } | |
| /** | |
| * @override | |
| */ | |
| getProgressive() { | |
| // Do not support progressive in normal mode. | |
| return this.get('large') | |
| ? this.get('progressive') | |
| : false; | |
| } | |
| /** | |
| * @override | |
| */ | |
| getProgressiveThreshold() { | |
| // Do not support progressive in normal mode. | |
| let progressiveThreshold = this.get('progressiveThreshold'); | |
| const largeThreshold = this.get('largeThreshold'); | |
| if (largeThreshold > progressiveThreshold) { | |
| progressiveThreshold = largeThreshold; | |
| } | |
| return progressiveThreshold; | |
| } | |
| brushSelector(dataIndex: number, data: SeriesData, selectors: BrushCommonSelectorsForSeries): boolean { | |
| return selectors.rect(data.getItemLayout(dataIndex)); | |
| } | |
| static defaultOption: BarSeriesOption = inheritDefaultOption(BaseBarSeriesModel.defaultOption, { | |
| // If clipped | |
| // Only available on cartesian2d | |
| clip: true, | |
| roundCap: false, | |
| showBackground: false, | |
| backgroundStyle: { | |
| color: 'rgba(180, 180, 180, 0.2)', | |
| borderColor: null, | |
| borderWidth: 0, | |
| borderType: 'solid', | |
| borderRadius: 0, | |
| shadowBlur: 0, | |
| shadowColor: null, | |
| shadowOffsetX: 0, | |
| shadowOffsetY: 0, | |
| opacity: 1 | |
| }, | |
| select: { | |
| itemStyle: { | |
| borderColor: '#212121' | |
| } | |
| }, | |
| realtimeSort: false | |
| } as BarSeriesOption); | |
| } | |
| export default BarSeriesModel; |