123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 |
- /**
- * Caution: If the mechanism should be changed some day, these cases
- * should be considered:
- *
- * (1) In `merge option` mode, if using the same option to call `setOption`
- * many times, the result should be the same (try our best to ensure that).
- * (2) In `merge option` mode, if a component has no id/name specified, it
- * will be merged by index, and the result sequence of the components is
- * consistent to the original sequence.
- * (3) In `replaceMerge` mode, keep the result sequence of the components is
- * consistent to the original sequence, even though there might result in "hole".
- * (4) `reset` feature (in toolbox). Find detailed info in comments about
- * `mergeOption` in module:echarts/model/OptionManager.
- */
- import { HashMap } from 'zrender/lib/core/util.js';
- import Model from './Model.js';
- import ComponentModel from './Component.js';
- import SeriesModel from './Series.js';
- import { Payload, OptionPreprocessor, ECBasicOption, ECUnitOption, ComponentMainType, ComponentSubType, OptionId, OptionName } from '../util/types.js';
- import OptionManager from './OptionManager.js';
- import Scheduler from '../core/Scheduler.js';
- import { LocaleOption } from '../core/locale.js';
- import { PaletteMixin } from './mixin/palette.js';
- export interface GlobalModelSetOptionOpts {
- replaceMerge: ComponentMainType | ComponentMainType[];
- }
- export interface InnerSetOptionOpts {
- replaceMergeMainTypeMap: HashMap<boolean, string>;
- }
- declare class GlobalModel extends Model<ECUnitOption> {
- option: ECUnitOption;
- private _theme;
- private _locale;
- private _optionManager;
- private _componentsMap;
- /**
- * `_componentsMap` might have "hole" becuase of remove.
- * So save components count for a certain mainType here.
- */
- private _componentsCount;
- /**
- * Mapping between filtered series list and raw series list.
- * key: filtered series indices, value: raw series indices.
- * Items of `_seriesIndices` never be null/empty/-1.
- * If series has been removed by `replaceMerge`, those series
- * also won't be in `_seriesIndices`, just like be filtered.
- */
- private _seriesIndices;
- /**
- * Key: seriesIndex.
- * Keep consistent with `_seriesIndices`.
- */
- private _seriesIndicesMap;
- /**
- * Model for store update payload
- */
- private _payload;
- scheduler: Scheduler;
- ssr: boolean;
- init(option: ECBasicOption, parentModel: Model, ecModel: GlobalModel, theme: object, locale: object, optionManager: OptionManager): void;
- setOption(option: ECBasicOption, opts: GlobalModelSetOptionOpts, optionPreprocessorFuncs: OptionPreprocessor[]): void;
- /**
- * @param type null/undefined: reset all.
- * 'recreate': force recreate all.
- * 'timeline': only reset timeline option
- * 'media': only reset media query option
- * @return Whether option changed.
- */
- resetOption(type: 'recreate' | 'timeline' | 'media', opt?: Pick<GlobalModelSetOptionOpts, 'replaceMerge'>): boolean;
- private _resetOption;
- mergeOption(option: ECUnitOption): void;
- private _mergeOption;
- /**
- * Get option for output (cloned option and inner info removed)
- */
- getOption(): ECUnitOption;
- getTheme(): Model;
- getLocaleModel(): Model<LocaleOption>;
- setUpdatePayload(payload: Payload): void;
- getUpdatePayload(): Payload;
- /**
- * @param idx If not specified, return the first one.
- */
- getComponent(mainType: ComponentMainType, idx?: number): ComponentModel;
- /**
- * @return Never be null/undefined.
- */
- queryComponents(condition: QueryConditionKindB): ComponentModel[];
- /**
- * The interface is different from queryComponents,
- * which is convenient for inner usage.
- *
- * @usage
- * let result = findComponents(
- * {mainType: 'dataZoom', query: {dataZoomId: 'abc'}}
- * );
- * let result = findComponents(
- * {mainType: 'series', subType: 'pie', query: {seriesName: 'uio'}}
- * );
- * let result = findComponents(
- * {mainType: 'series',
- * filter: function (model, index) {...}}
- * );
- * // result like [component0, componnet1, ...]
- */
- findComponents(condition: QueryConditionKindA): ComponentModel[];
- /**
- * Travel components (before filtered).
- *
- * @usage
- * eachComponent('legend', function (legendModel, index) {
- * ...
- * });
- * eachComponent(function (componentType, model, index) {
- * // componentType does not include subType
- * // (componentType is 'a' but not 'a.b')
- * });
- * eachComponent(
- * {mainType: 'dataZoom', query: {dataZoomId: 'abc'}},
- * function (model, index) {...}
- * );
- * eachComponent(
- * {mainType: 'series', subType: 'pie', query: {seriesName: 'uio'}},
- * function (model, index) {...}
- * );
- */
- eachComponent<T>(cb: EachComponentAllCallback, context?: T): void;
- eachComponent<T>(mainType: string, cb: EachComponentInMainTypeCallback, context?: T): void;
- eachComponent<T>(mainType: QueryConditionKindA, cb: EachComponentInMainTypeCallback, context?: T): void;
- /**
- * Get series list before filtered by name.
- */
- getSeriesByName(name: OptionName): SeriesModel[];
- /**
- * Get series list before filtered by index.
- */
- getSeriesByIndex(seriesIndex: number): SeriesModel;
- /**
- * Get series list before filtered by type.
- * FIXME: rename to getRawSeriesByType?
- */
- getSeriesByType(subType: ComponentSubType): SeriesModel[];
- /**
- * Get all series before filtered.
- */
- getSeries(): SeriesModel[];
- /**
- * Count series before filtered.
- */
- getSeriesCount(): number;
- /**
- * After filtering, series may be different
- * frome raw series.
- */
- eachSeries<T>(cb: (this: T, series: SeriesModel, rawSeriesIndex: number) => void, context?: T): void;
- /**
- * Iterate raw series before filtered.
- *
- * @param {Function} cb
- * @param {*} context
- */
- eachRawSeries<T>(cb: (this: T, series: SeriesModel, rawSeriesIndex: number) => void, context?: T): void;
- /**
- * After filtering, series may be different.
- * frome raw series.
- */
- eachSeriesByType<T>(subType: ComponentSubType, cb: (this: T, series: SeriesModel, rawSeriesIndex: number) => void, context?: T): void;
- /**
- * Iterate raw series before filtered of given type.
- */
- eachRawSeriesByType<T>(subType: ComponentSubType, cb: (this: T, series: SeriesModel, rawSeriesIndex: number) => void, context?: T): void;
- isSeriesFiltered(seriesModel: SeriesModel): boolean;
- getCurrentSeriesIndices(): number[];
- filterSeries<T>(cb: (this: T, series: SeriesModel, rawSeriesIndex: number) => boolean, context?: T): void;
- restoreData(payload?: Payload): void;
- private static internalField;
- }
- /**
- * @param condition.mainType Mandatory.
- * @param condition.subType Optional.
- * @param condition.query like {xxxIndex, xxxId, xxxName},
- * where xxx is mainType.
- * If query attribute is null/undefined or has no index/id/name,
- * do not filtering by query conditions, which is convenient for
- * no-payload situations or when target of action is global.
- * @param condition.filter parameter: component, return boolean.
- */
- export interface QueryConditionKindA {
- mainType: ComponentMainType;
- subType?: ComponentSubType;
- query?: {
- [k: string]: number | number[] | string | string[];
- };
- filter?: (cmpt: ComponentModel) => boolean;
- }
- /**
- * If none of index and id and name used, return all components with mainType.
- * @param condition.mainType
- * @param condition.subType If ignore, only query by mainType
- * @param condition.index Either input index or id or name.
- * @param condition.id Either input index or id or name.
- * @param condition.name Either input index or id or name.
- */
- export interface QueryConditionKindB {
- mainType: ComponentMainType;
- subType?: ComponentSubType;
- index?: number | number[];
- id?: OptionId | OptionId[];
- name?: OptionName | OptionName[];
- }
- export interface EachComponentAllCallback {
- (mainType: string, model: ComponentModel, componentIndex: number): void;
- }
- interface EachComponentInMainTypeCallback {
- (model: ComponentModel, componentIndex: number): void;
- }
- interface GlobalModel extends PaletteMixin<ECUnitOption> {
- }
- export default GlobalModel;
|