diff --git a/packages/designer/src/builtins/simulator/renderer/renderer.ts b/packages/designer/src/builtins/simulator/renderer/renderer.ts index 08298fc08..40cb6647d 100644 --- a/packages/designer/src/builtins/simulator/renderer/renderer.ts +++ b/packages/designer/src/builtins/simulator/renderer/renderer.ts @@ -314,7 +314,10 @@ export interface LibraryMap { function buildComponents(libraryMap: LibraryMap, componentsMap: { [componentName: string]: NpmInfo }) { const components: any = {}; Object.keys(componentsMap).forEach(componentName => { - components[componentName] = findComponent(libraryMap, componentName, componentsMap[componentName]); + const component = findComponent(libraryMap, componentName, componentsMap[componentName]); + if (component) { + components[componentName] = component; + } }); return components; } diff --git a/packages/editor/src/config/assets.js b/packages/editor/src/config/assets.js index aa464b50c..9e98c1d5c 100644 --- a/packages/editor/src/config/assets.js +++ b/packages/editor/src/config/assets.js @@ -13,6 +13,44 @@ export default { } }, components: { + Page: { + componentName: 'Page', + title: '页面', + configure: { + events: { + supportedLifecycles: [ + { + description: '初始化时', + name: 'constructor', + }, + { + description: '装载后', + name: 'componentDidMount', + }, + { + description: '更新时', + name: 'componentDidMount', + }, + { + description: '卸载时', + name: 'componentWillUnmount', + }, + ] + }, + component: { + isContainer: true, + } + } + }, + Div: { + componentName: 'Div', + title: '容器', + configure: { + component: { + isContainer: true, + } + } + }, Button: { componentName: 'Button', title: '按钮', @@ -164,7 +202,15 @@ export default { name: 'children', propType: 'node' } - ] + ], + configure: { + component: { + isContainer: true, + nestingRule: { + childWhitelist: 'Button' + } + } + } }, Input: { componentName: 'Input', @@ -446,7 +492,12 @@ export default { propType: 'bool', description: '是否开启预览态' } - ] + ], + configure: { + component: { + isContainer: true, + } + } }, 'Form.Item': { componentName: 'Form.Item', @@ -743,7 +794,15 @@ export default { propType: 'func', description: '预览态模式下渲染的内容\n@param {any} value 根据包裹的组件的 value 类型而决定' } - ] + ], + configure: { + component: { + isContainer: true, + nestingRule: { + parentWhitelist: 'Form' + } + } + } }, NumberPicker: { componentName: 'NumberPicker', @@ -1131,7 +1190,15 @@ export default { name: 'locale', propType: 'object' } - ] + ], + configure: { + component: { + isContainer: true, + nestingRule: { + childWhitelist: 'Select.Option' + } + } + } }, 'Select.Option': { componentName: 'Select.Option', @@ -1162,7 +1229,15 @@ export default { name: 'children', propType: 'any' } - ] + ], + configure: { + component: { + isContainer: true, + nestingRule: { + parentWhitelist: 'Select' + } + } + } } }, componentList: [ diff --git a/packages/editor/src/config/setters.ts b/packages/editor/src/config/setters.ts index 46f762ff0..32a404a41 100644 --- a/packages/editor/src/config/setters.ts +++ b/packages/editor/src/config/setters.ts @@ -1,8 +1,7 @@ -import { DatePicker, Input, Radio, Select, Switch } from '@alifd/next'; -import NumberSetter from '../../../plugin-setters/src/number-setter'; +import { DatePicker, Input, Radio, Select, Switch, NumberPicker } from '@alifd/next'; import ExpressionSetter from '../../../plugin-setters/src/expression-setter'; import MixinSetter from '../../../plugin-setters/src/mixin-setter'; -import EventsSetter from '../../../plugin-settings/src/builtin-setters/events-setter' +import EventsSetter from '../../../plugin-setters/src/events-setter'; import { registerSetter } from '../../../plugin-settings/src'; import { createElement } from 'react'; @@ -17,17 +16,20 @@ registerSetter('ClassNameSetter', () => { }); registerSetter('EventsSetter', EventsSetter); - -registerSetter('StringSetter', { component: Input, props: { placeholder: '请输入' } }); - -registerSetter('NumberSetter', NumberSetter as any); - -registerSetter('StringSetter', { component: Input, props: { placeholder: '请输入' } }); +registerSetter('StringSetter', { component: Input, defaultProps: { placeholder: '请输入' } }); +registerSetter('NumberSetter', NumberPicker); registerSetter('ExpressionSetter', ExpressionSetter); registerSetter('MixinSetter', MixinSetter); registerSetter('BoolSetter', Switch); -registerSetter('RadioGroupSetter', Radio.RadioGroup); +registerSetter('RadioGroupSetter', { + component: Radio.Group, + defaultProps: { + shape: 'button' + } +}); registerSetter('SelectSetter', Select); + +// suggest: 做成 StringSetter 的一个参数, registerSetter('TextAreaSetter', Input.TextArea); registerSetter('DateSetter', DatePicker); registerSetter('DateYearSetter', DatePicker.YearPicker); diff --git a/packages/plugin-settings/src/builtin-setters/events-setter/event-dialog.tsx b/packages/plugin-setters/src/events-setter/event-dialog.tsx similarity index 100% rename from packages/plugin-settings/src/builtin-setters/events-setter/event-dialog.tsx rename to packages/plugin-setters/src/events-setter/event-dialog.tsx diff --git a/packages/plugin-settings/src/builtin-setters/events-setter/index.tsx b/packages/plugin-setters/src/events-setter/index.tsx similarity index 100% rename from packages/plugin-settings/src/builtin-setters/events-setter/index.tsx rename to packages/plugin-setters/src/events-setter/index.tsx diff --git a/packages/plugin-settings/src/builtin-setters/events-setter/native-events.ts b/packages/plugin-setters/src/events-setter/native-events.ts similarity index 100% rename from packages/plugin-settings/src/builtin-setters/events-setter/native-events.ts rename to packages/plugin-setters/src/events-setter/native-events.ts diff --git a/packages/plugin-settings/src/builtin-setters/events-setter/style.less b/packages/plugin-setters/src/events-setter/style.less similarity index 100% rename from packages/plugin-settings/src/builtin-setters/events-setter/style.less rename to packages/plugin-setters/src/events-setter/style.less diff --git a/packages/plugin-setters/src/mixin-setter.tsx b/packages/plugin-setters/src/mixin-setter.tsx index 476e4fb35..d1e6b23e1 100644 --- a/packages/plugin-setters/src/mixin-setter.tsx +++ b/packages/plugin-setters/src/mixin-setter.tsx @@ -34,7 +34,8 @@ export default class Mixin extends PureComponent { }; static defaultProps = { locale: 'zh-CN', - messages: zhCN + messages: zhCN, + types: ['StringSetter', 'ExpressionSetter', 'NumberSetter', 'BoolSetter', 'SelectSetter', 'RadioGroupSetter'], }; constructor(props) { super(props); diff --git a/packages/plugin-settings/src/index.tsx b/packages/plugin-settings/src/index.tsx index c7ebbf33a..36f6fc754 100644 --- a/packages/plugin-settings/src/index.tsx +++ b/packages/plugin-settings/src/index.tsx @@ -8,6 +8,7 @@ import Node from '../../designer/src/designer/document/node/node'; import ArraySetter from './builtin-setters/array-setter'; import ObjectSetter from './builtin-setters/object-setter'; import './register-transducer'; +import { TipContainer } from './tip'; export default class SettingsMainView extends Component { private main: SettingsMain; @@ -42,10 +43,10 @@ export default class SettingsMainView extends Component { let node: Node | null = this.main.nodes[0]!; const items = []; - let l = 4; + let l = 3; while (l-- > 0 && node) { const props = - l === 3 + l === 2 ? {} : { onMouseOver: hoverNode.bind(null, node, true), @@ -101,6 +102,7 @@ export default class SettingsMainView extends Component { return (