88 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
| import { ey as assert, eP as doesNodeHaveCredentialsToFill, V as VIEWS, dw as tryToParseNumber, eQ as getNewWorkflow, eR as replaceAllTemplateNodeCredentials, dB as getNodesWithNormalizedPosition } from "./index--OJ5nhDf.js";
 | |
| async function createWorkflowFromTemplate(opts) {
 | |
|   const { credentialOverrides, nodeTypeProvider, rootStore, template, workflowsStore } = opts;
 | |
|   const workflowData = await getNewWorkflow(rootStore.restApiContext, { name: template.name });
 | |
|   const nodesWithCreds = replaceAllTemplateNodeCredentials(
 | |
|     nodeTypeProvider,
 | |
|     template.workflow.nodes,
 | |
|     credentialOverrides
 | |
|   );
 | |
|   const nodes = getNodesWithNormalizedPosition(nodesWithCreds);
 | |
|   const connections = template.workflow.connections;
 | |
|   const workflowToCreate = {
 | |
|     name: workflowData.name,
 | |
|     nodes,
 | |
|     connections,
 | |
|     active: false,
 | |
|     meta: {
 | |
|       templateId: template.id.toString()
 | |
|     }
 | |
|     // Ignored: pinData, settings, tags, versionId
 | |
|   };
 | |
|   const createdWorkflow = await workflowsStore.createNewWorkflow(workflowToCreate);
 | |
|   return createdWorkflow;
 | |
| }
 | |
| async function openTemplateCredentialSetup(opts) {
 | |
|   const { router, templateId, inNewBrowserTab = false, telemetry, source } = opts;
 | |
|   telemetry.track("User opened cred setup", { source });
 | |
|   const routeLocation = {
 | |
|     name: VIEWS.TEMPLATE_SETUP,
 | |
|     params: { id: templateId }
 | |
|   };
 | |
|   if (inNewBrowserTab) {
 | |
|     const route = router.resolve(routeLocation);
 | |
|     window.open(route.href, "_blank");
 | |
|   } else {
 | |
|     await router.push(routeLocation);
 | |
|   }
 | |
| }
 | |
| async function openTemplateWorkflowOnNodeView(opts) {
 | |
|   const { externalHooks, templateId, templatesStore, inNewBrowserTab, router } = opts;
 | |
|   const routeLocation = {
 | |
|     name: VIEWS.TEMPLATE_IMPORT,
 | |
|     params: { id: templateId }
 | |
|   };
 | |
|   const telemetryPayload = {
 | |
|     source: "workflow",
 | |
|     template_id: tryToParseNumber(templateId),
 | |
|     wf_template_repo_session_id: templatesStore.currentSessionId
 | |
|   };
 | |
|   await externalHooks.run("templatesWorkflowView.openWorkflow", telemetryPayload);
 | |
|   if (inNewBrowserTab) {
 | |
|     const route = router.resolve(routeLocation);
 | |
|     window.open(route.href, "_blank");
 | |
|   } else {
 | |
|     await router.push(routeLocation);
 | |
|   }
 | |
| }
 | |
| function hasTemplateCredentials(nodeTypeProvider, template) {
 | |
|   return template.workflow.nodes.some(
 | |
|     (node) => doesNodeHaveCredentialsToFill(nodeTypeProvider, node)
 | |
|   );
 | |
| }
 | |
| async function getFullTemplate(templatesStore, templateId) {
 | |
|   const template = templatesStore.getFullTemplateById(templateId);
 | |
|   if (template) {
 | |
|     return template;
 | |
|   }
 | |
|   await templatesStore.fetchTemplateById(templateId);
 | |
|   return templatesStore.getFullTemplateById(templateId);
 | |
| }
 | |
| async function useTemplateWorkflow(opts) {
 | |
|   const { nodeTypesStore, templateId, templatesStore } = opts;
 | |
|   const [template] = await Promise.all([
 | |
|     getFullTemplate(templatesStore, templateId),
 | |
|     nodeTypesStore.loadNodeTypesIfNotLoaded()
 | |
|   ]);
 | |
|   assert(template);
 | |
|   if (hasTemplateCredentials(nodeTypesStore, template)) {
 | |
|     await openTemplateCredentialSetup(opts);
 | |
|   } else {
 | |
|     await openTemplateWorkflowOnNodeView(opts);
 | |
|   }
 | |
| }
 | |
| export {
 | |
|   createWorkflowFromTemplate as c,
 | |
|   useTemplateWorkflow as u
 | |
| };
 |