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 axisDefault from './axisDefault'; | |
| import ComponentModel from '../model/Component'; | |
| import { | |
| getLayoutParams, | |
| mergeLayoutParam, | |
| fetchLayoutMode | |
| } from '../util/layout'; | |
| import OrdinalMeta from '../data/OrdinalMeta'; | |
| import { DimensionName, BoxLayoutOptionMixin, OrdinalRawValue } from '../util/types'; | |
| import { AxisBaseOption, AXIS_TYPES, CategoryAxisBaseOption } from './axisCommonTypes'; | |
| import GlobalModel from '../model/Global'; | |
| import { each, merge } from 'zrender/src/core/util'; | |
| import { EChartsExtensionInstallRegisters } from '../extension'; | |
| type Constructor<T> = new (...args: any[]) => T; | |
| export interface AxisModelExtendedInCreator { | |
| getCategories(rawData?: boolean): OrdinalRawValue[] | CategoryAxisBaseOption['data'] | |
| getOrdinalMeta(): OrdinalMeta | |
| } | |
| /** | |
| * Generate sub axis model class | |
| * @param axisName 'x' 'y' 'radius' 'angle' 'parallel' ... | |
| */ | |
| export default function axisModelCreator< | |
| AxisOptionT extends AxisBaseOption, | |
| AxisModelCtor extends Constructor<ComponentModel<AxisOptionT>> | |
| >( | |
| registers: EChartsExtensionInstallRegisters, | |
| axisName: DimensionName, | |
| BaseAxisModelClass: AxisModelCtor, | |
| extraDefaultOption?: AxisOptionT | |
| ) { | |
| each(AXIS_TYPES, function (v, axisType) { | |
| const defaultOption = merge( | |
| merge({}, axisDefault[axisType], true), | |
| extraDefaultOption, true | |
| ); | |
| class AxisModel extends BaseAxisModelClass implements AxisModelExtendedInCreator { | |
| static type = axisName + 'Axis.' + axisType; | |
| type = axisName + 'Axis.' + axisType; | |
| static defaultOption = defaultOption; | |
| private __ordinalMeta: OrdinalMeta; | |
| mergeDefaultAndTheme(option: AxisOptionT, ecModel: GlobalModel): void { | |
| const layoutMode = fetchLayoutMode(this); | |
| const inputPositionParams = layoutMode | |
| ? getLayoutParams(option as BoxLayoutOptionMixin) : {}; | |
| const themeModel = ecModel.getTheme(); | |
| merge(option, themeModel.get(axisType + 'Axis')); | |
| merge(option, this.getDefaultOption()); | |
| option.type = getAxisType(option); | |
| if (layoutMode) { | |
| mergeLayoutParam(option as BoxLayoutOptionMixin, inputPositionParams, layoutMode); | |
| } | |
| } | |
| optionUpdated(): void { | |
| const thisOption = this.option; | |
| if (thisOption.type === 'category') { | |
| this.__ordinalMeta = OrdinalMeta.createByAxisModel(this); | |
| } | |
| } | |
| /** | |
| * Should not be called before all of 'getInitailData' finished. | |
| * Because categories are collected during initializing data. | |
| */ | |
| getCategories(rawData?: boolean): OrdinalRawValue[] | CategoryAxisBaseOption['data'] { | |
| const option = this.option; | |
| // FIXME | |
| // warning if called before all of 'getInitailData' finished. | |
| if (option.type === 'category') { | |
| if (rawData) { | |
| return (option as CategoryAxisBaseOption).data; | |
| } | |
| return this.__ordinalMeta.categories; | |
| } | |
| } | |
| getOrdinalMeta(): OrdinalMeta { | |
| return this.__ordinalMeta; | |
| } | |
| } | |
| registers.registerComponentModel(AxisModel); | |
| }); | |
| registers.registerSubTypeDefaulter( | |
| axisName + 'Axis', | |
| getAxisType | |
| ); | |
| } | |
| function getAxisType(option: AxisBaseOption) { | |
| // Default axis with data is category axis | |
| return option.type || ((option as CategoryAxisBaseOption).data ? 'category' : 'value'); | |
| } | |