From 2c4eac318c0dd87ba81b5de22a38107c7a0d0500 Mon Sep 17 00:00:00 2001 From: xiaowei Date: Wed, 30 Dec 2020 10:13:44 +0800 Subject: [PATCH] feat(panel): add intitial service, model and controller --- src/model/workbench/panel.ts | 33 ++++++++++++++++++++++++++ src/services/index.ts | 12 ++++++++++ src/services/workbench/index.ts | 1 + src/services/workbench/panelService.ts | 15 ++++++++++++ 4 files changed, 61 insertions(+) create mode 100644 src/model/workbench/panel.ts create mode 100644 src/services/workbench/panelService.ts diff --git a/src/model/workbench/panel.ts b/src/model/workbench/panel.ts new file mode 100644 index 000000000..d7d6107d8 --- /dev/null +++ b/src/model/workbench/panel.ts @@ -0,0 +1,33 @@ +import { container, inject, injectable } from 'tsyringe'; + +export interface IPanelItem { + id: string; + title?: string; + render?: () => React.ReactNode; +} + +export enum PanelEvent { + onClick = 'panel.onClick', +} + +export interface IPanel { + current: string; + panes?: IPanelItem[]; +} + +@injectable() +export class PanelModel implements IPanel { + public current: string; + public panes: IPanelItem[]; + + constructor( + @inject('PanelItems') panes: IPanelItem[] = [], + @inject('CurrentPanel') current: string = '' + ) { + this.panes = panes; + this.current = current; + } +} + +container.register('PanelItems', { useValue: [] }); +container.register('CurrentPanel', { useValue: '' }); diff --git a/src/services/index.ts b/src/services/index.ts index a40244c3d..129d39fee 100644 --- a/src/services/index.ts +++ b/src/services/index.ts @@ -4,6 +4,7 @@ import { container } from 'tsyringe'; export * from './extensionService'; export * from './theme/colorThemeService'; export * from './workbench'; +export * from './settingsService'; import { ColorThemeService, @@ -23,7 +24,10 @@ import { StatusBarService, EditorService, IEditorService, + IPanelService, + PanelService, } from './workbench'; +import { ISettingsService, SettingsService } from './settingsService'; /** * The Services of Workbench @@ -37,6 +41,7 @@ const sidebarService = container.resolve(SidebarService); const menuBarService = container.resolve(MenuBarService); const editorService = container.resolve(EditorService); const statusBarService = container.resolve(StatusBarService); +const panelService = container.resolve(PanelService); /** * The ColorTheme service, @@ -51,13 +56,20 @@ const colorThemeService = container.resolve( */ const extensionService = container.resolve(ExtensionService); +/** + * Settings service + */ +const settingsService = container.resolve(SettingsService); + export { activityBarService, explorerService, sidebarService, menuBarService, statusBarService, + panelService, editorService, extensionService, colorThemeService, + settingsService, }; diff --git a/src/services/workbench/index.ts b/src/services/workbench/index.ts index 7dac5857c..db2ebfffe 100644 --- a/src/services/workbench/index.ts +++ b/src/services/workbench/index.ts @@ -4,3 +4,4 @@ export * from './sidebarService'; export * from './editorService'; export * from './statusBarService'; export * from './explorerService'; +export * from './panelService'; diff --git a/src/services/workbench/panelService.ts b/src/services/workbench/panelService.ts new file mode 100644 index 000000000..5fd578a08 --- /dev/null +++ b/src/services/workbench/panelService.ts @@ -0,0 +1,15 @@ +import { IPanel, PanelModel } from 'mo/model/workbench/panel'; +import { Component } from 'mo/react'; +import { singleton, container } from 'tsyringe'; + +export interface IPanelService extends Component {} + +@singleton() +export class PanelService extends Component implements IPanelService { + protected state: IPanel; + + constructor() { + super(); + this.state = container.resolve(PanelModel); + } +}