|
@@ -1,4 +1,4 @@
|
|
|
-import React, { useCallback, useEffect, useContext, useMemo, useRef } from 'react';
|
|
|
|
|
|
|
+import React, { useCallback, useEffect, useContext, useMemo, useRef, useState } from 'react';
|
|
|
|
|
|
|
|
import { useObserve } from '@flowgram.ai/reactive';
|
|
import { useObserve } from '@flowgram.ai/reactive';
|
|
|
import { useStartDragNode } from '@flowgram.ai/fixed-drag-plugin';
|
|
import { useStartDragNode } from '@flowgram.ai/fixed-drag-plugin';
|
|
@@ -17,6 +17,16 @@ import {
|
|
|
import { FlowOperationService } from '../types';
|
|
import { FlowOperationService } from '../types';
|
|
|
|
|
|
|
|
export interface NodeRenderReturnType {
|
|
export interface NodeRenderReturnType {
|
|
|
|
|
+ id: string;
|
|
|
|
|
+ type: string | number;
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 节点 data 数据
|
|
|
|
|
+ */
|
|
|
|
|
+ data: any;
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 更新节点 data 数据
|
|
|
|
|
+ */
|
|
|
|
|
+ updateData: (newData: any) => void;
|
|
|
/**
|
|
/**
|
|
|
* BlockOrderIcon节点,一般用于分支的第一个占位节点
|
|
* BlockOrderIcon节点,一般用于分支的第一个占位节点
|
|
|
*/
|
|
*/
|
|
@@ -100,6 +110,9 @@ export function useNodeRender(nodeFromProps?: FlowNodeEntity): NodeRenderReturnT
|
|
|
const playground = usePlayground();
|
|
const playground = usePlayground();
|
|
|
const isBlockOrderIcon = renderNode.flowNodeType === FlowNodeBaseType.BLOCK_ORDER_ICON;
|
|
const isBlockOrderIcon = renderNode.flowNodeType === FlowNodeBaseType.BLOCK_ORDER_ICON;
|
|
|
const isBlockIcon = renderNode.flowNodeType === FlowNodeBaseType.BLOCK_ICON;
|
|
const isBlockIcon = renderNode.flowNodeType === FlowNodeBaseType.BLOCK_ICON;
|
|
|
|
|
+ const [formValueVersion, updateFormValueVersion] = useState<number>(0);
|
|
|
|
|
+ const formValueDependRef = useRef(false);
|
|
|
|
|
+ formValueDependRef.current = false;
|
|
|
// 在 BlockIcon 情况,如果在触发 fromJSON 时候更新表单数据导致刷新节点会存在 renderNode.parent 为 undefined,所以这里 nodeCache 进行缓存
|
|
// 在 BlockIcon 情况,如果在触发 fromJSON 时候更新表单数据导致刷新节点会存在 renderNode.parent 为 undefined,所以这里 nodeCache 进行缓存
|
|
|
const node =
|
|
const node =
|
|
|
(isBlockOrderIcon || isBlockIcon ? renderNode.parent! : renderNode) || nodeCache.current;
|
|
(isBlockOrderIcon || isBlockIcon ? renderNode.parent! : renderNode) || nodeCache.current;
|
|
@@ -154,10 +167,35 @@ export function useNodeRender(nodeFromProps?: FlowNodeEntity): NodeRenderReturnT
|
|
|
return () => dispose?.dispose();
|
|
return () => dispose?.dispose();
|
|
|
}, [renderNode, isBlockIcon, isBlockOrderIcon]);
|
|
}, [renderNode, isBlockIcon, isBlockOrderIcon]);
|
|
|
|
|
|
|
|
|
|
+ useEffect(() => {
|
|
|
|
|
+ const toDispose = form?.onFormValuesChange(() => {
|
|
|
|
|
+ if (formValueDependRef.current) {
|
|
|
|
|
+ updateFormValueVersion((v) => v + 1);
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ return () => toDispose?.dispose();
|
|
|
|
|
+ }, [form]);
|
|
|
|
|
+
|
|
|
const readonly = playground.config.readonly;
|
|
const readonly = playground.config.readonly;
|
|
|
|
|
|
|
|
return useMemo(
|
|
return useMemo(
|
|
|
() => ({
|
|
() => ({
|
|
|
|
|
+ id: node.id,
|
|
|
|
|
+ type: node.flowNodeType,
|
|
|
|
|
+ get data() {
|
|
|
|
|
+ if (form) {
|
|
|
|
|
+ formValueDependRef.current = true;
|
|
|
|
|
+ return form.values;
|
|
|
|
|
+ }
|
|
|
|
|
+ return getExtInfo();
|
|
|
|
|
+ },
|
|
|
|
|
+ updateData(values: any) {
|
|
|
|
|
+ if (form) {
|
|
|
|
|
+ form.updateFormValues(values);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ updateExtInfo(values);
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
node,
|
|
node,
|
|
|
isBlockOrderIcon,
|
|
isBlockOrderIcon,
|
|
|
isBlockIcon,
|
|
isBlockIcon,
|
|
@@ -177,6 +215,7 @@ export function useNodeRender(nodeFromProps?: FlowNodeEntity): NodeRenderReturnT
|
|
|
return {
|
|
return {
|
|
|
...form,
|
|
...form,
|
|
|
get values() {
|
|
get values() {
|
|
|
|
|
+ formValueDependRef.current = true;
|
|
|
return form.values!;
|
|
return form.values!;
|
|
|
},
|
|
},
|
|
|
get state() {
|
|
get state() {
|
|
@@ -202,6 +241,7 @@ export function useNodeRender(nodeFromProps?: FlowNodeEntity): NodeRenderReturnT
|
|
|
toggleExpand,
|
|
toggleExpand,
|
|
|
form,
|
|
form,
|
|
|
formState,
|
|
formState,
|
|
|
|
|
+ formValueVersion,
|
|
|
]
|
|
]
|
|
|
);
|
|
);
|
|
|
}
|
|
}
|