feat: Refactor NodeDebugResponse to utilize workflowInteractiveResponse for improved interactivity

This commit is contained in:
sd0ric4
2025-03-27 10:56:48 +08:00
parent 92e30e70ba
commit de1cc6b7d4
2 changed files with 28 additions and 61 deletions

View File

@@ -26,58 +26,15 @@ interface NodeDebugResponseProps {
const NodeDebugResponse = ({ nodeId, debugResult }: NodeDebugResponseProps) => { const NodeDebugResponse = ({ nodeId, debugResult }: NodeDebugResponseProps) => {
const { t } = useTranslation(); const { t } = useTranslation();
const nodeList = useContextSelector(WorkflowContext, (v) => v.nodeList);
const node = useMemo(() => nodeList.find((node) => node.nodeId === nodeId), [nodeList, nodeId]); const firstInteractive = debugResult?.workflowInteractiveResponse;
const firstInteractive = useMemo(() => {
if (
node &&
node.flowNodeType === FlowNodeTypeEnum.userSelect &&
!node.debugResult?.response?.userSelectResult
) {
return true;
}
if (
node &&
node.flowNodeType === FlowNodeTypeEnum.formInput &&
!node.debugResult?.response?.formInputResult
) {
return true;
}
return false;
}, [node]);
const { onChangeNode, onStopNodeDebug, onNextNodeDebug, workflowDebugData } = useContextSelector( const { onChangeNode, onStopNodeDebug, onNextNodeDebug, workflowDebugData } = useContextSelector(
WorkflowContext, WorkflowContext,
(v) => v (v) => v
); );
const interactive: UserSelectInteractive | UserInputInteractive | undefined = useMemo(() => { const interactive = debugResult?.workflowInteractiveResponse;
const description = node?.inputs?.find((input) => input.key === 'description')?.value;
const userSelectOptions = node?.inputs?.find(
(input) => input.key === 'userSelectOptions'
)?.value;
const formInputForms = node?.inputs?.find((input) => input.key === 'userInputForms')?.value;
if (node?.flowNodeType === FlowNodeTypeEnum.userSelect) {
return {
type: 'userSelect',
params: {
description,
userSelectOptions
}
};
}
if (node?.flowNodeType === FlowNodeTypeEnum.formInput) {
return {
type: 'userInput',
params: {
description,
inputForm: formInputForms
}
};
}
return undefined;
}, [node]);
const { openConfirm, ConfirmModal } = useConfirm({ const { openConfirm, ConfirmModal } = useConfirm({
content: t('common:core.workflow.Confirm stop debug') content: t('common:core.workflow.Confirm stop debug')

View File

@@ -638,19 +638,25 @@ const WorkflowContextProvider = ({
try { try {
// 4. Run one step // 4. Run one step
const { finishedEdges, finishedNodes, nextStepRunNodes, flowResponses, newVariables } = const {
await postWorkflowDebug({ finishedEdges,
nodes: runtimeNodes, finishedNodes,
edges: debugData.runtimeEdges, nextStepRunNodes,
variables: { flowResponses,
appId, newVariables,
cTime: formatTime2YMDHMW(), workflowInteractiveResponse
...debugData.variables } = await postWorkflowDebug({
}, nodes: runtimeNodes,
query, // 添加 query 参数 edges: debugData.runtimeEdges,
history, variables: {
appId appId,
}); cTime: formatTime2YMDHMW(),
...debugData.variables
},
query, // 添加 query 参数
history,
appId
});
// 5. Store debug result // 5. Store debug result
const newStoreDebugData = { const newStoreDebugData = {
runtimeNodes: finishedNodes, runtimeNodes: finishedNodes,
@@ -659,10 +665,13 @@ const WorkflowContextProvider = ({
nextRunNodes: nextStepRunNodes, nextRunNodes: nextStepRunNodes,
variables: newVariables, variables: newVariables,
query, query,
history history,
workflowInteractiveResponse: workflowInteractiveResponse
}; };
setWorkflowDebugData(newStoreDebugData); setWorkflowDebugData(newStoreDebugData);
if (workflowInteractiveResponse) {
console.log('workflowInteractiveResponse', workflowInteractiveResponse);
}
// 6. selected entry node and Update entry node debug result // 6. selected entry node and Update entry node debug result
setNodes((state) => setNodes((state) =>
state.map((node) => { state.map((node) => {
@@ -695,7 +704,8 @@ const WorkflowContextProvider = ({
status: 'success', status: 'success',
response: result, response: result,
showResult: true, showResult: true,
isExpired: false isExpired: false,
workflowInteractiveResponse: workflowInteractiveResponse
} }
} }
}; };