echarts
Version:
Apache ECharts is a powerful, interactive charting and data visualization library for browser
59 lines (58 loc) • 2.3 kB
TypeScript
/**
* 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;