132 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
| import { b as useRouter, a as useToast, a1 as useWorkflowsStore, v as useSettingsStore, Q as useUIStore, aA as usePageRedirectionHelper, x as computed, aE as EnterpriseEditionFeature, c as useI18n, dR as DEBUG_PAYWALL_MODAL_KEY, aW as h, dS as sanitizeHtml, am as useMessage, an as MODAL_CONFIRM, V as VIEWS, al as useTelemetry, at as useRootStore, dT as isFullExecutionResponse } from "./index--OJ5nhDf.js";
 | |
| const useExecutionDebugging = () => {
 | |
|   const telemetry = useTelemetry();
 | |
|   const router = useRouter();
 | |
|   const i18n = useI18n();
 | |
|   const message = useMessage();
 | |
|   const toast = useToast();
 | |
|   const workflowsStore = useWorkflowsStore();
 | |
|   const settingsStore = useSettingsStore();
 | |
|   const uiStore = useUIStore();
 | |
|   const pageRedirectionHelper = usePageRedirectionHelper();
 | |
|   const isDebugEnabled = computed(
 | |
|     () => settingsStore.isEnterpriseFeatureEnabled[EnterpriseEditionFeature.DebugInEditor]
 | |
|   );
 | |
|   const applyExecutionData = async (executionId) => {
 | |
|     const execution = await workflowsStore.getExecution(executionId);
 | |
|     const workflowObject = workflowsStore.workflowObject;
 | |
|     const workflowNodes = workflowsStore.getNodes();
 | |
|     if (!execution?.data?.resultData) {
 | |
|       return;
 | |
|     }
 | |
|     const { runData } = execution.data.resultData;
 | |
|     const executionNodeNames = Object.keys(runData);
 | |
|     const missingNodeNames = executionNodeNames.filter(
 | |
|       (name) => !workflowNodes.some((node) => node.name === name)
 | |
|     );
 | |
|     const workflowPinnedNodeNames = Object.keys(workflowsStore.workflow.pinData ?? {});
 | |
|     const matchingPinnedNodeNames = executionNodeNames.filter(
 | |
|       (name) => workflowPinnedNodeNames.includes(name)
 | |
|     );
 | |
|     if (matchingPinnedNodeNames.length > 0) {
 | |
|       const confirmMessage = h("p", [
 | |
|         i18n.baseText("nodeView.confirmMessage.debug.message"),
 | |
|         h(
 | |
|           "ul",
 | |
|           { class: "mt-l ml-l" },
 | |
|           matchingPinnedNodeNames.map((name) => h("li", sanitizeHtml(name)))
 | |
|         )
 | |
|       ]);
 | |
|       const overWritePinnedDataConfirm = await message.confirm(
 | |
|         confirmMessage,
 | |
|         i18n.baseText("nodeView.confirmMessage.debug.headline"),
 | |
|         {
 | |
|           type: "warning",
 | |
|           confirmButtonText: i18n.baseText("nodeView.confirmMessage.debug.confirmButtonText"),
 | |
|           cancelButtonText: i18n.baseText("nodeView.confirmMessage.debug.cancelButtonText"),
 | |
|           customClass: "matching-pinned-nodes-confirmation"
 | |
|         }
 | |
|       );
 | |
|       if (overWritePinnedDataConfirm === MODAL_CONFIRM) {
 | |
|         matchingPinnedNodeNames.forEach((name) => {
 | |
|           const node = workflowsStore.getNodeByName(name);
 | |
|           if (node) {
 | |
|             workflowsStore.unpinData({ node });
 | |
|           }
 | |
|         });
 | |
|       } else {
 | |
|         await router.push({
 | |
|           name: VIEWS.EXECUTION_PREVIEW,
 | |
|           params: { name: workflowObject.id, executionId }
 | |
|         });
 | |
|         return;
 | |
|       }
 | |
|     }
 | |
|     workflowsStore.resetAllNodesIssues();
 | |
|     workflowsStore.setWorkflowExecutionData(execution);
 | |
|     const pinnableNodes = workflowNodes.filter(
 | |
|       (node) => !workflowObject.getParentNodes(node.name).length
 | |
|     );
 | |
|     let pinnings = 0;
 | |
|     pinnableNodes.forEach((node) => {
 | |
|       const taskData = runData[node.name]?.[0];
 | |
|       if (taskData?.data?.main) {
 | |
|         const nodeData = taskData.data.main.find((output) => output && output.length > 0);
 | |
|         if (nodeData) {
 | |
|           pinnings++;
 | |
|           workflowsStore.pinData({
 | |
|             node,
 | |
|             data: nodeData,
 | |
|             isRestoration: true
 | |
|           });
 | |
|         }
 | |
|       }
 | |
|     });
 | |
|     toast.showToast({
 | |
|       title: i18n.baseText("nodeView.showMessage.debug.title"),
 | |
|       message: i18n.baseText("nodeView.showMessage.debug.content"),
 | |
|       type: "info"
 | |
|     });
 | |
|     if (missingNodeNames.length) {
 | |
|       toast.showToast({
 | |
|         title: i18n.baseText("nodeView.showMessage.debug.missingNodes.title"),
 | |
|         message: i18n.baseText("nodeView.showMessage.debug.missingNodes.content", {
 | |
|           interpolate: { nodeNames: missingNodeNames.join(", ") }
 | |
|         }),
 | |
|         type: "warning"
 | |
|       });
 | |
|     }
 | |
|     telemetry.track("User clicked debug execution button", {
 | |
|       instance_id: useRootStore().instanceId,
 | |
|       exec_status: isFullExecutionResponse(execution) ? execution.status : "",
 | |
|       override_pinned_data: pinnableNodes.length === pinnings,
 | |
|       all_exec_data_imported: missingNodeNames.length === 0
 | |
|     });
 | |
|   };
 | |
|   const handleDebugLinkClick = (event) => {
 | |
|     if (!isDebugEnabled.value) {
 | |
|       uiStore.openModalWithData({
 | |
|         name: DEBUG_PAYWALL_MODAL_KEY,
 | |
|         data: {
 | |
|           title: i18n.baseText("executionsList.debug.paywall.title"),
 | |
|           footerButtonAction: () => {
 | |
|             uiStore.closeModal(DEBUG_PAYWALL_MODAL_KEY);
 | |
|             void pageRedirectionHelper.goToUpgrade("debug", "upgrade-debug");
 | |
|           }
 | |
|         }
 | |
|       });
 | |
|       event.preventDefault();
 | |
|       event.stopPropagation();
 | |
|       return;
 | |
|     }
 | |
|     workflowsStore.isInDebugMode = false;
 | |
|   };
 | |
|   return {
 | |
|     applyExecutionData,
 | |
|     handleDebugLinkClick
 | |
|   };
 | |
| };
 | |
| export {
 | |
|   useExecutionDebugging as u
 | |
| };
 |