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 { t } = useTranslation();
const nodeList = useContextSelector(WorkflowContext, (v) => v.nodeList);
const node = useMemo(() => nodeList.find((node) => node.nodeId === nodeId), [nodeList, nodeId]);
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 firstInteractive = debugResult?.workflowInteractiveResponse;
const { onChangeNode, onStopNodeDebug, onNextNodeDebug, workflowDebugData } = useContextSelector(
WorkflowContext,
(v) => v
);
const interactive: UserSelectInteractive | UserInputInteractive | undefined = useMemo(() => {
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 interactive = debugResult?.workflowInteractiveResponse;
const { openConfirm, ConfirmModal } = useConfirm({
content: t('common:core.workflow.Confirm stop debug')

View File

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