import { injectable, inject } from 'inversify'; import EventEmitter from '@antv/event-emitter'; import { MODEL, FACTORY } from '../../constants'; import { DatasetManager } from '../dataset-manager'; import { Canvas, CanvasConfig } from '../canvas'; import { APP_MODE } from './constants'; import type { AppConfig, AppMode, Layouts } from './types'; @injectable() export class App extends EventEmitter { config: AppConfig; canvas: Canvas; mode: AppMode = APP_MODE.edit; @inject(MODEL.DatasetManager) datasetManager: DatasetManager; @inject(FACTORY.Canvas) private _createCanvas: (config: CanvasConfig) => Canvas; init(config: AppConfig) { this.config = config; this.datasetManager.init(config.datasets); this.canvas = this._createCanvas(config.canvas); } get layouts(): Layouts { const { panel } = this.config; return Object.keys(panel) .filter((panelType: keyof AppConfig['panel']) => panel[panelType].enabled) .map((panelType: keyof AppConfig['panel']) => { const panelConfig = panel[panelType]; return { i: panelType, ...panelConfig.layout, }; }); } }