diff --git a/packages/dooringx-dumi-doc/docs/API/index.en.md b/packages/dooringx-dumi-doc/docs/API/index.en.md index 2ef7802..d4e1500 100644 --- a/packages/dooringx-dumi-doc/docs/API/index.en.md +++ b/packages/dooringx-dumi-doc/docs/API/index.en.md @@ -1,9 +1,6 @@ --- title: API toc: menu -nav: - title: API - order: 5 --- -In process \ No newline at end of file +In process diff --git a/packages/dooringx-dumi-doc/docs/API/index.md b/packages/dooringx-dumi-doc/docs/API/index.md index 2ef7802..12f1f50 100644 --- a/packages/dooringx-dumi-doc/docs/API/index.md +++ b/packages/dooringx-dumi-doc/docs/API/index.md @@ -1,9 +1,22 @@ --- title: API toc: menu -nav: - title: API - order: 5 --- -In process \ No newline at end of file +## useStoreState + + + +#### 传参: + +| 属性名 | 类型 | 说明 | +| ---------------------------- | ---------------- | ---- | +| config | UserConfig | | +| extraFn | Function = () => {} | | +| everyFn | Function = () => {} | | + + +#### 返回值: + +`[IStoreData]` + diff --git a/packages/dooringx-example/src/plugin/index.tsx b/packages/dooringx-example/src/plugin/index.tsx index a2a3722..7159308 100644 --- a/packages/dooringx-example/src/plugin/index.tsx +++ b/packages/dooringx-example/src/plugin/index.tsx @@ -29,6 +29,14 @@ const LeftRegistMap: LeftRegistComponentMapItem[] = [ img: 'https://img.guguzhu.com/d/file/android/ico/2021/09/08/rytzi2w34tm.png', displayName: '输入框', }, + { + type: 'basic', + component: 'testco', + img: 'icon-anniu', + imgCustom: , + displayName: '测试按钮', + urlFn: () => import('./registComponents/testco'), + }, ]; export const defaultConfig: Partial = { diff --git a/packages/dooringx-example/src/plugin/registComponents/testco.tsx b/packages/dooringx-example/src/plugin/registComponents/testco.tsx new file mode 100644 index 0000000..a3fcaec --- /dev/null +++ b/packages/dooringx-example/src/plugin/registComponents/testco.tsx @@ -0,0 +1,150 @@ +/* + * @Author: yehuozhili + * @Date: 2021-07-07 14:35:38 + * @LastEditors: yehuozhili + * @LastEditTime: 2022-04-27 22:24:23 + * @FilePath: \dooringx\packages\dooringx-example\src\plugin\registComponents\button.tsx + */ + +import { Button } from 'antd'; +import React, { useEffect, useMemo, useState } from 'react'; +import { + changeUserValue, + createComponent, + createPannelOptions, + useDynamicAddEventCenter, + useRegistFunc, +} from 'dooringx-lib'; +import { FormMap } from '../formTypes'; +import { ComponentRenderConfigProps } from 'dooringx-lib/dist/core/components/componentItem'; +function ButtonTemp(pr: ComponentRenderConfigProps) { + const props = pr.data.props; + const eventCenter = useMemo(() => { + return pr.config.getEventCenter(); + }, [pr.config]); + + useDynamicAddEventCenter(pr, `${pr.data.id}-init`, '初始渲染时机'); //注册名必须带id 约定! + useDynamicAddEventCenter(pr, `${pr.data.id}-click`, '点击执行时机'); + useEffect(() => { + // 模拟抛出事件 + if (pr.context === 'preview') { + eventCenter.runEventQueue(`${pr.data.id}-init`, pr.config); + } + }, [eventCenter, pr.config, pr.context, pr.data.id]); + + const [text, setText] = useState(''); + const op1 = props.op1; + + const fn = useMemo(() => { + const functionCenter = eventCenter.getFunctionCenter(); + return functionCenter.register({ + id: `${pr.data.id}+changeText`, + fn: async (ctx, next, config, args: any, _eventList, iname) => { + const userSelect = iname.data; + const ctxVal = changeUserValue( + userSelect['改变文本数据源'], + args, + '_changeval', + config, + ctx + ); + const text = ctxVal[0]; + setText(text); + next(); + }, + config: [ + { + name: '改变文本数据源', + data: ['ctx', 'input', 'dataSource'], + options: { + receive: '_changeval', + multi: false, + }, + }, + ], + name: `${pr.data.id}+改变文本函数`, + componentId: pr.data.id, + }); + }, []); + + useRegistFunc(op1, pr.context, fn); + + return ( + + ); +} + +const MButton = createComponent({ + name: 'testco', + display: '测试按钮', + props: { + style: [ + createPannelOptions('input', { + receive: 'text', + label: '文字', + }), + ], + fn: [ + createPannelOptions('switch', { + receive: 'op1', + label: '改变文本函数', + }), + ], + animate: [createPannelOptions('animateControl', {})], + actions: [createPannelOptions('actionButton', {})], + }, + initData: { + props: { + text: 'yehuozhili', + sizeData: [100, 30], + backgroundColor: 'rgba(0,132,255,1)', + lineHeight: 1, + borderRadius: 0, + op1: false, + borderData: { + borderWidth: 0, + borderColor: 'rgba(0,0,0,1)', + borderStyle: 'solid', + }, + fontData: { + fontSize: 14, + textDecoration: 'none', + fontStyle: 'normal', + color: 'rgba(255,255,255,1)', + fontWeight: 'normal', + }, + }, + width: 100, // 绝对定位元素初始必须有宽高,否则适配会有问题。 + height: 30, // 绝对定位元素初始必须有宽高,否则适配会有问题。 + rotate: { + canRotate: true, + value: 0, + }, + canDrag: true, // false就不能拖 + }, + render: (data, context, store, config) => { + return ; + }, + resize: true, +}); + +export default MButton; diff --git a/packages/dooringx-lib/src/core/components/abstract.ts b/packages/dooringx-lib/src/core/components/abstract.ts index 00deb1a..00aafd3 100644 --- a/packages/dooringx-lib/src/core/components/abstract.ts +++ b/packages/dooringx-lib/src/core/components/abstract.ts @@ -21,3 +21,30 @@ export class ComponentItemFactory implements ComponentItem { public remoteConfig: ComponentItem['remoteConfig'] = {} ) {} } +export interface IPluginConfig { + name: ComponentItemFactory['name']; + display: ComponentItemFactory['display']; + props: ComponentItemFactory['props']; + initData: ComponentItemFactory['initData']; + render: ComponentItem['render']; + resize?: ComponentItem['resize']; + needPosition?: ComponentItem['needPosition']; + init?: ComponentItem['init']; + destroy?: ComponentItem['destroy']; + remoteConfig?: ComponentItem['remoteConfig']; +} + +export function createComponent(config: IPluginConfig) { + return new ComponentItemFactory( + config.name, + config.display, + config.props, + config.initData, + config.render, + config.resize, + config.needPosition, + config.init, + config.destroy, + config.remoteConfig + ); +} diff --git a/packages/dooringx-lib/src/core/utils/index.ts b/packages/dooringx-lib/src/core/utils/index.ts index 7d8e571..80fe6c5 100644 --- a/packages/dooringx-lib/src/core/utils/index.ts +++ b/packages/dooringx-lib/src/core/utils/index.ts @@ -7,20 +7,6 @@ import { specialCoList } from './special'; import deepCopys from 'deepcopy'; import { FunctionDataMap } from '../functionCenter/config'; import UserConfig from '../../config'; -import { IPluginConfig } from './types'; -import { ComponentItemFactory } from '../components/abstract'; - -// 创建插件 -export const createPlugin = (config: IPluginConfig) => { - return new ComponentItemFactory( - config.key, - config.name, - {}, - config.attr, - config.render, - config.attr.resize - ); -}; export function deepCopy(obj: T): T { return deepCopys(obj); diff --git a/packages/dooringx-lib/src/core/utils/types.ts b/packages/dooringx-lib/src/core/utils/types.ts deleted file mode 100644 index bbb4a80..0000000 --- a/packages/dooringx-lib/src/core/utils/types.ts +++ /dev/null @@ -1,7 +0,0 @@ -export interface IPluginConfig { - key: string; - name: string; - attr: any; - render: (props: any) => JSX.Element; - resize?: boolean; -} diff --git a/packages/dooringx-lib/src/index.tsx b/packages/dooringx-lib/src/index.tsx index c1a6ca2..710b493 100644 --- a/packages/dooringx-lib/src/index.tsx +++ b/packages/dooringx-lib/src/index.tsx @@ -40,7 +40,7 @@ export { scaleFn } from './core/scale/index'; // 以下导出用于制作插件 // 用于制作组件的函数 -export { ComponentItemFactory } from './core/components/abstract'; +export { ComponentItemFactory, createComponent } from './core/components/abstract'; // 用于菜单拖拽的函数 export { dragEventResolve } from './core/crossDrag/index'; // 用于制作组件配置项的函数