From f1f100f9527ec5e318e0f753d8770a9587eb45c1 Mon Sep 17 00:00:00 2001 From: roymondchen Date: Wed, 15 Mar 2023 15:06:58 +0800 Subject: [PATCH] =?UTF-8?q?feat(core):=20=E6=96=B0=E5=A2=9E=E8=8A=82?= =?UTF-8?q?=E7=82=B9=E6=93=8D=E4=BD=9C=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/App.ts | 31 +++++++++++++++++++++++-------- packages/core/src/Node.ts | 5 +++++ 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/packages/core/src/App.ts b/packages/core/src/App.ts index 639e2487..67de2928 100644 --- a/packages/core/src/App.ts +++ b/packages/core/src/App.ts @@ -18,7 +18,7 @@ import { EventEmitter } from 'events'; -import type { CodeBlockDSL, EventItemConfig, Id, MApp } from '@tmagic/schema'; +import type { CodeBlockDSL, EventItemConfig, Id, MApp, MPage } from '@tmagic/schema'; import Env from './Env'; import { bindCommonEventListener, isCommonMethod, triggerCommonMethod } from './events'; @@ -144,18 +144,22 @@ class App extends EventEmitter { this.codeDsl = config.codeBlocks; this.pages = new Map(); config.items?.forEach((page) => { - this.pages.set( - page.id, - new Page({ - config: page, - app: this, - }), - ); + this.addPage(page); }); this.setPage(curPage || this.page?.data?.id); } + public addPage(config: MPage) { + this.pages.set( + config.id, + new Page({ + config, + app: this, + }), + ); + } + public setPage(id?: Id) { let page; @@ -174,6 +178,17 @@ class App extends EventEmitter { } } + public deletePage(id: Id) { + this.pages.delete(id); + if (!this.pages.size) { + this.page = undefined; + } + } + + public getPage(id: Id) { + return this.pages.get(id); + } + public registerComponent(type: string, Component: any) { this.components.set(type, Component); } diff --git a/packages/core/src/Node.ts b/packages/core/src/Node.ts index 9dfed1e4..6964042f 100644 --- a/packages/core/src/Node.ts +++ b/packages/core/src/Node.ts @@ -65,6 +65,11 @@ class Node extends EventEmitter { }); } + public setData(data: MComponent | MContainer | MPage) { + this.data = data; + this.emit('updata-data'); + } + private listenLifeSafe() { this.once('created', async (instance: any) => { this.instance = instance;