diff --git a/frontend/src/views/AngularWorkflow.jsx b/frontend/src/views/AngularWorkflow.jsx index f1a87e7f..db69e886 100755 --- a/frontend/src/views/AngularWorkflow.jsx +++ b/frontend/src/views/AngularWorkflow.jsx @@ -692,6 +692,7 @@ const AngularWorkflow = (defaultprops) => { const [workflowExecutions, setWorkflowExecutions] = React.useState([]); const [executionTimeline, setExecutionTimeline] = React.useState([]); const [workflowExecutionCount, setWorkflowExecutionCount] = React.useState(0); + const [executionsLoading, setExecutionsLoading] = React.useState(false); const [defaultEnvironmentIndex, setDefaultEnvironmentIndex] = React.useState(0); const [workflowRecommendations, setWorkflowRecommendations] = React.useState(undefined); const [showErrors, setShowErrors] = React.useState(true); @@ -2343,6 +2344,8 @@ const AngularWorkflow = (defaultprops) => { return } + setExecutionsLoading(true); + var url = `${globalUrl}/api/v2/workflows/${id}/executions` var method = "GET" if (filter === undefined || filter === null || filter.toUpperCase() === "ALL") { @@ -2413,7 +2416,11 @@ const AngularWorkflow = (defaultprops) => { const newkeys = sortByKey(responseJson.executions, "-started_at"); setWorkflowExecutions(newkeys); - var tmpView = new URLSearchParams(cursearch).get("execution_id"); + // If an explicit orgId is passed (suborg context), don't read execution_id from the URL + // because that execution_id belongs to a different org's context. + var tmpView = (orgId !== undefined && orgId !== null && orgId.length > 0) + ? null + : new URLSearchParams(window.location.search).get("execution_id"); if (execution_id !== undefined && execution_id !== null && execution_id.length > 0 && (tmpView === undefined || tmpView === null || tmpView.length === 0)) { tmpView = execution_id; } @@ -2422,6 +2429,7 @@ const AngularWorkflow = (defaultprops) => { if (tmpView !== undefined && tmpView !== null && tmpView.length > 0) { // Don't clean up if it's already open if (executionModalOpen === true) { + setExecutionsLoading(false); return } @@ -2468,8 +2476,8 @@ const AngularWorkflow = (defaultprops) => { } } } else { - var tmpView = new URLSearchParams(cursearch).get("execution_id"); - if (tmpView === undefined || tmpView === null || tmpView.length === 0) { + var tmpView = new URLSearchParams(window.location.search).get("execution_id"); + if (tmpView !== undefined && tmpView !== null && tmpView.length > 0) { const execution_id = tmpView; setExecutionModalView(1); setExecutionRequest({ @@ -2479,10 +2487,12 @@ const AngularWorkflow = (defaultprops) => { start() } } + setExecutionsLoading(false); }) .catch((error) => { //toast(error.toString()); console.log("Get execution error: ", error.toString()); + setExecutionsLoading(false); }); }; @@ -10265,7 +10275,15 @@ const AngularWorkflow = (defaultprops) => { } }else if(!action.isStartNode) { // This is to round the corners of the image - const originalBase64 = action.large_image !== undefined && action.large_image !== null && action.large_image !== "" ? action.large_image : theme.palette.defaultImage + // If action has no large_image (e.g. imported/synced workflow where it was stripped), + // inject it from the available apps in the sidebar + let imageSource = (action.large_image !== undefined && action.large_image !== null && action.large_image !== "") ? action.large_image : "" + if (!imageSource) { + const foundApp = apps.find((a) => a.id === action.app_id) || + apps.find((a) => a.name === action.app_name) + imageSource = (foundApp && foundApp.large_image) ? foundApp.large_image : "" + } + const originalBase64 = imageSource !== "" ? imageSource : theme.palette.defaultImage const roundedImage = await roundBase64Image(originalBase64, 16); action = {...action, large_image: roundedImage} @@ -21318,6 +21336,21 @@ const AngularWorkflow = (defaultprops) => { } if (inputworkflow !== undefined && inputworkflow !== null && inputworkflow.id !== undefined && inputworkflow.id !== null) { + const isOrgChange = currentWorkflow.org_id !== undefined && currentWorkflow.org_id !== null && currentWorkflow.org_id.length > 0 && currentWorkflow.org_id !== inputworkflow.org_id; + + if (isOrgChange) { + // Switching to a different suborg: clear stale execution state and URL param + const currentExecutionId = new URLSearchParams(window.location.search).get("execution_id"); + if (currentExecutionId) { + const newSearch = removeParam("execution_id", window.location.search); + navigate(curpath + newSearch); + } + setExecutionModalView(0); + setExecutionData({}); + setExecutionRunning(false); + stop(); + } + getRevisionHistory(inputworkflow.id, 50, 0, inputworkflow.org_id) getWorkflowExecution(inputworkflow.id, "", executionFilter, inputworkflow.org_id) loadTriggers(inputworkflow.org_id) @@ -23634,7 +23667,7 @@ const AngularWorkflow = (defaultprops) => { )} ) : ( -