n8n-editor-ui
Version:
Workflow Editor UI for n8n
66 lines (65 loc) • 3.03 kB
JavaScript
import { C as getNodesWithNormalizedPosition, Io as getNewWorkflow, Ti as tryToParseNumber } from "./useTelemetry-C797TaYa.js";
import { Io as VIEWS } from "./constants-CX1ozgFz.js";
import { g as assert } from "./_baseOrderBy-DL6Sy5xK.js";
import { n as doesNodeHaveCredentialsToFill } from "./nodeTransforms-0T6NES_R.js";
import { r as replaceAllTemplateNodeCredentials } from "./templateTransforms-CmHAnc2d.js";
async function createWorkflowFromTemplate(opts) {
const { credentialOverrides, nodeTypeProvider, rootStore, template, workflowsStore } = opts;
const workflowData = await getNewWorkflow(rootStore.restApiContext, { name: template.name });
const nodes = getNodesWithNormalizedPosition(replaceAllTemplateNodeCredentials(nodeTypeProvider, template.workflow.nodes, credentialOverrides));
const connections = template.workflow.connections;
const workflowToCreate = {
name: workflowData.name,
nodes,
connections,
active: false,
meta: { templateId: template.id.toString() }
};
return await workflowsStore.createNewWorkflow(workflowToCreate);
}
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 { useTemplateWorkflow as n, createWorkflowFromTemplate as t };