From 95c18aa6b039b41fac86a9ca1bc384c26951e0ad Mon Sep 17 00:00:00 2001 From: Bowen Tan Date: Mon, 29 Nov 2021 15:56:23 +0800 Subject: [PATCH] can remove Module --- packages/editor/src/AppStorage.ts | 10 +++- .../src/components/Explorer/Explorer.tsx | 55 +++++++++++++------ 2 files changed, 46 insertions(+), 19 deletions(-) diff --git a/packages/editor/src/AppStorage.ts b/packages/editor/src/AppStorage.ts index fa933855..ef4a50f9 100644 --- a/packages/editor/src/AppStorage.ts +++ b/packages/editor/src/AppStorage.ts @@ -25,7 +25,7 @@ export class AppStorage { eventBus.on('componentsChange', (components: ApplicationComponent[]) => { this.components = components; - this.saveInLS(); + this.saveComponentsInLS(); }); } @@ -66,7 +66,13 @@ export class AppStorage { this.saveModulesInLS(); } - saveInLS() { + removeModule(module: ImplementedRuntimeModule) { + console.log(module) + this.setModules(this.modules.filter(m => m !== module)); + this.saveModulesInLS(); + } + + saveComponentsInLS() { console.log('saveInLS', this.components); switch (this.currentEditingType) { case 'app': diff --git a/packages/editor/src/components/Explorer/Explorer.tsx b/packages/editor/src/components/Explorer/Explorer.tsx index aced2a7a..935ecf67 100644 --- a/packages/editor/src/components/Explorer/Explorer.tsx +++ b/packages/editor/src/components/Explorer/Explorer.tsx @@ -1,19 +1,20 @@ import { Divider, HStack, IconButton, Text, VStack } from '@chakra-ui/react'; import React from 'react'; -import { RuntimeModuleSpec } from '@sunmao-ui/core'; import { AppStorage } from '../../AppStorage'; -import { AddIcon } from '@chakra-ui/icons'; +import { AddIcon, DeleteIcon } from '@chakra-ui/icons'; import { eventBus } from '../../eventBus'; +import { ImplementedRuntimeModule } from '@sunmao-ui/runtime'; type ExplorerProps = { appStorage: AppStorage; }; const useAppStorage = (appStorage: AppStorage) => { - const [modules, setModules] = React.useState(appStorage.modules); + const [modules, setModules] = React.useState( + appStorage.modules + ); eventBus.on('modulesChange', newModules => { - console.log('modulesChange') setModules(newModules); }); @@ -43,18 +44,22 @@ export const Explorer: React.FC = ({ appStorage }) => { ); const { modules } = useAppStorage(appStorage); - const moduleItems = modules.map((module: RuntimeModuleSpec) => { + const moduleItems = modules.map((module: ImplementedRuntimeModule) => { const moduleItemId = `module_${module.metadata.name}`; const onClickModule = (id: string) => { setSelectedItem(id); appStorage.updateCurrentId('module', module.metadata.name); }; + const onRemove = () => { + appStorage.removeModule(module); + }; return ( ); @@ -88,21 +93,37 @@ type ExplorerItemProps = { title: string; isActive: boolean; onClick: (id: string) => void; + onRemove?: () => void; }; -const ExplorerItem: React.FC = ({ id, title, isActive, onClick }) => { +const ExplorerItem: React.FC = ({ + id, + title, + isActive, + onClick, + onRemove, +}) => { return ( -
onClick(id)} - style={{ - cursor: 'pointer', - padding: '10px', - borderRadius: '5px', - backgroundColor: isActive ? '#eee' : '#fff', - width: '100%', - }} + - {title} -
+ onClick(id)}> + {title} + + {onRemove ? ( + } + onClick={() => onRemove()} + /> + ) : null} + ); };