UNPKG

echarts

Version:

Apache ECharts is a powerful, interactive charting and data visualization library for browser

59 lines (58 loc) 2.3 kB
/** * ECharts option manager */ import ExtensionAPI from '../core/ExtensionAPI.js'; import { OptionPreprocessor, ECUnitOption, ECBasicOption } from '../util/types.js'; import GlobalModel, { InnerSetOptionOpts } from './Global.js'; /** * TERM EXPLANATIONS: * See `ECOption` and `ECUnitOption` in `src/util/types.ts`. */ declare class OptionManager { private _api; private _timelineOptions; private _mediaList; private _mediaDefault; /** * -1, means default. * empty means no media. */ private _currentMediaIndices; private _optionBackup; private _newBaseOption; constructor(api: ExtensionAPI); setOption(rawOption: ECBasicOption, optionPreprocessorFuncs: OptionPreprocessor[], opt: InnerSetOptionOpts): void; mountOption(isRecreate: boolean): ECUnitOption; getTimelineOption(ecModel: GlobalModel): ECUnitOption; getMediaOption(ecModel: GlobalModel): ECUnitOption[]; } /** * Consider case: * `chart.setOption(opt1);` * Then user do some interaction like dataZoom, dataView changing. * `chart.setOption(opt2);` * Then user press 'reset button' in toolbox. * * After doing that all of the interaction effects should be reset, the * chart should be the same as the result of invoke * `chart.setOption(opt1); chart.setOption(opt2);`. * * Although it is not able ensure that * `chart.setOption(opt1); chart.setOption(opt2);` is equivalents to * `chart.setOption(merge(opt1, opt2));` exactly, * this might be the only simple way to implement that feature. * * MEMO: We've considered some other approaches: * 1. Each model handles its self restoration but not uniform treatment. * (Too complex in logic and error-prone) * 2. Use a shadow ecModel. (Performance expensive) * * FIXME: A possible solution: * Add a extra level of model for each component model. The inheritance chain would be: * ecModel <- componentModel <- componentActionModel <- dataItemModel * And all of the actions can only modify the `componentActionModel` rather than * `componentModel`. `setOption` will only modify the `ecModel` and `componentModel`. * When "resotre" action triggered, model from `componentActionModel` will be discarded * instead of recreating the "ecModel" from the "_optionBackup". */ export default OptionManager;