From 5bfea34423cc57c15b35a8dc70903e8f1979a6f0 Mon Sep 17 00:00:00 2001 From: Bowen Tan Date: Wed, 1 Dec 2021 16:47:32 +0800 Subject: [PATCH] add module metaData form --- packages/editor/src/AppStorage.ts | 26 +++++++- .../GeneralTraitFormList/GeneralTraitForm.tsx | 2 +- .../Explorer/ExplorerForm/ExplorerForm.tsx | 17 +++-- .../ExplorerForm/ModuleMetaDataForm.tsx | 63 +++++++++++++++++++ .../runtime/src/components/_internal/Text.tsx | 5 +- 5 files changed, 103 insertions(+), 10 deletions(-) create mode 100644 packages/editor/src/components/Explorer/ExplorerForm/ModuleMetaDataForm.tsx diff --git a/packages/editor/src/AppStorage.ts b/packages/editor/src/AppStorage.ts index e3355f46..304332ee 100644 --- a/packages/editor/src/AppStorage.ts +++ b/packages/editor/src/AppStorage.ts @@ -84,7 +84,7 @@ export class AppStorage { } } - saveAppMetaDataInLS({version, name}: { version: string, name: string }) { + saveAppMetaDataInLS({ version, name }: { version: string; name: string }) { const newApp = produce(this.app, draft => { draft.metadata.name = name; draft.version = version; @@ -93,6 +93,30 @@ export class AppStorage { this.saveAppInLS(); } + saveModuleMetaDataInLS( + { originName, originVersion }: { originName: string; originVersion: string }, + { + version, + name, + stateMap, + }: { + version: string; + name: string; + stateMap: Record; + } + ) { + const i = this.modules.findIndex( + m => m.version === originVersion && m.metadata.name === originName + ); + const newModules = produce(this.modules, draft => { + draft[i].metadata.name = name; + draft[i].spec.stateMap = stateMap; + draft[i].version = version; + }); + this.setModules(newModules); + this.saveModulesInLS(); + } + private saveAppInLS() { localStorage.setItem(AppStorage.AppLSKey, JSON.stringify(this.app)); } diff --git a/packages/editor/src/components/ComponentForm/GeneralTraitFormList/GeneralTraitForm.tsx b/packages/editor/src/components/ComponentForm/GeneralTraitFormList/GeneralTraitForm.tsx index 7806c596..b49bd752 100644 --- a/packages/editor/src/components/ComponentForm/GeneralTraitFormList/GeneralTraitForm.tsx +++ b/packages/editor/src/components/ComponentForm/GeneralTraitFormList/GeneralTraitForm.tsx @@ -31,7 +31,7 @@ export const GeneralTraitForm: React.FC = props => { value, fullKey: key, type: trait.type, - selectedId: component.id, + selectedComponentId: component.id, }); }); return ( diff --git a/packages/editor/src/components/Explorer/ExplorerForm/ExplorerForm.tsx b/packages/editor/src/components/Explorer/ExplorerForm/ExplorerForm.tsx index bc02e2b7..40390575 100644 --- a/packages/editor/src/components/Explorer/ExplorerForm/ExplorerForm.tsx +++ b/packages/editor/src/components/Explorer/ExplorerForm/ExplorerForm.tsx @@ -3,6 +3,9 @@ import { observer } from 'mobx-react-lite'; import { Button, Text, VStack } from '@chakra-ui/react'; import { ArrowLeftIcon } from '@chakra-ui/icons'; import { AppMetaDataForm } from './AppMetaDataForm'; +import { ModuleMetaDataForm } from './ModuleMetaDataForm'; +import { registry } from '../../../setup'; + type Props = { formType: 'app' | 'module'; version: string; @@ -22,11 +25,13 @@ export const ExplorerForm: React.FC = observer( form = ; break; case 'module': - form = ( - - module Form: {version}/{name} - - ); + const moduleSpec = registry.getModule(version, name); + const moduleMetaData = { + name, + version, + stateMap: moduleSpec.spec.stateMap, + }; + form = ; break; } return ( @@ -38,7 +43,7 @@ export const ExplorerForm: React.FC = observer( variant="ghost" colorScheme="blue" onClick={onBack} - padding='0' + padding="0" > Back diff --git a/packages/editor/src/components/Explorer/ExplorerForm/ModuleMetaDataForm.tsx b/packages/editor/src/components/Explorer/ExplorerForm/ModuleMetaDataForm.tsx new file mode 100644 index 00000000..55b12625 --- /dev/null +++ b/packages/editor/src/components/Explorer/ExplorerForm/ModuleMetaDataForm.tsx @@ -0,0 +1,63 @@ +import React from 'react'; +import { FormControl, FormLabel, Input, VStack } from '@chakra-ui/react'; +import { useFormik } from 'formik'; +import { observer } from 'mobx-react-lite'; +import { editorStore } from '../../../EditorStore'; +import { KeyValueEditor } from '../../KeyValueEditor'; + +type ModuleMetaDataFormData = { + name: string; + version: string; + stateMap: Record; +}; + +type ModuleMetaDataFormProps = { + data: ModuleMetaDataFormData; +}; + +export const ModuleMetaDataForm: React.FC = observer( + ({ data }) => { + const onSubmit = (value: ModuleMetaDataFormData) => { + editorStore.appStorage.saveModuleMetaDataInLS( + { originName: data.name, originVersion: data.version }, + value + ); + }; + const formik = useFormik({ + initialValues: data, + onSubmit, + }); + return ( + + + Module Version + formik.submitForm()} + /> + + + Module Name + formik.submitForm()} + /> + + + Module StateMap + { + formik.setFieldValue('stateMap', json); + formik.submitForm(); + }} + /> + + + ); + } +); diff --git a/packages/runtime/src/components/_internal/Text.tsx b/packages/runtime/src/components/_internal/Text.tsx index e42f1c51..032208e7 100644 --- a/packages/runtime/src/components/_internal/Text.tsx +++ b/packages/runtime/src/components/_internal/Text.tsx @@ -18,13 +18,14 @@ export type TextProps = { }; const Text: React.FC = ({ value, cssStyle }) => { + const text = typeof value.raw === 'string' ? value.raw : `${value.raw}`; if (value.format === 'md') { const Div = styled.div` ${cssStyle} `; return (
- {value.raw} + {text}
); } @@ -33,7 +34,7 @@ const Text: React.FC = ({ value, cssStyle }) => { const Span = styled.span` ${cssStyle} `; - return {value.raw}; + return {text}; }; export default Text;