UNPKG

n8n-editor-ui

Version:

Workflow Editor UI for n8n

272 lines (270 loc) 11.9 kB
; (function () { System.register(["./vue.runtime.esm-bundler-legacy--Sn1h8On.js", "./_MapCache-legacy-DlYNX_X1.js", "./useTelemetry-legacy-B3pzzkAE.js", "./_baseOrderBy-legacy-CB2Dh5d_.js"], function (_export, _context) { "use strict"; var ref, useI18n, getWorkflowsAndFolders, moveFolderToProject, STORES, defineStore, getFullApiResponse, useRootStore, makeRestApiRequest, BREADCRUMBS_MIN_LOADING_TIME, useFoldersStore; //#region src/features/core/folders/folders.api.ts async function createFolder(context, projectId, name, parentFolderId) { return await makeRestApiRequest(context, "POST", `/projects/${projectId}/folders`, { name, parentFolderId }); } async function getFolderPath(context, projectId, folderId) { return await makeRestApiRequest(context, "GET", `/projects/${projectId}/folders/${folderId}/tree`); } async function deleteFolder(context, projectId, folderId, transferToFolderId) { return await makeRestApiRequest(context, "DELETE", `/projects/${projectId}/folders/${folderId}`, { transferToFolderId }); } async function renameFolder(context, projectId, folderId, name) { return await makeRestApiRequest(context, "PATCH", `/projects/${projectId}/folders/${folderId}`, { name }); } async function getProjectFolders(context, projectId, options, filter, select) { const res = await getFullApiResponse(context, "GET", `/projects/${projectId}/folders`, { ...(filter ? { filter } : {}), ...(options ? options : {}), ...(select ? { select: JSON.stringify(select) } : {}) }); return { data: res.data, count: res.count }; } async function getFolderUsedCredentials(context, projectId, folderId) { return (await getFullApiResponse(context, "GET", `/projects/${projectId}/folders/${folderId}/credentials`)).data; } async function moveFolder(context, projectId, folderId, parentFolderId) { return await makeRestApiRequest(context, "PATCH", `/projects/${projectId}/folders/${folderId}`, { parentFolderId }); } async function getFolderContent(context, projectId, folderId) { return (await getFullApiResponse(context, "GET", `/projects/${projectId}/folders/${folderId}/content`)).data; } //#endregion //#region src/features/core/folders/folders.store.ts return { setters: [function (_vueRuntimeEsmBundlerLegacy003Js) { ref = _vueRuntimeEsmBundlerLegacy003Js.It; }, function (_MapCacheLegacy005Js) { useI18n = _MapCacheLegacy005Js.gt; }, function (_useTelemetryLegacy00HJs) { getWorkflowsAndFolders = _useTelemetryLegacy00HJs.Lo; moveFolderToProject = _useTelemetryLegacy00HJs.kn; STORES = _useTelemetryLegacy00HJs.oc; }, function (_baseOrderByLegacy00ZJs) { defineStore = _baseOrderByLegacy00ZJs.k; getFullApiResponse = _baseOrderByLegacy00ZJs.l; useRootStore = _baseOrderByLegacy00ZJs.r; makeRestApiRequest = _baseOrderByLegacy00ZJs.u; }], execute: function () { BREADCRUMBS_MIN_LOADING_TIME = 300; _export("t", useFoldersStore = defineStore(STORES.FOLDERS, () => { const rootStore = useRootStore(); const i18n = useI18n(); const workflowsCountLoaded = ref(false); const totalWorkflowCount = ref(0); const draggedElement = ref(null); const activeDropTarget = ref(null); /** * Cache visited folders so we can build breadcrumbs paths without fetching them from the server */ const breadcrumbsCache = ref({}); const cacheFolders = folders => { folders.forEach(folder => { if (!breadcrumbsCache.value[folder.id]) breadcrumbsCache.value[folder.id] = { id: folder.id, name: folder.name, parentFolder: folder.parentFolder }; }); }; const getCachedFolder = folderId => { return breadcrumbsCache.value[folderId]; }; async function createFolder$1(name, projectId, parentFolderId) { return await createFolder(rootStore.restApiContext, projectId, name, parentFolderId); } async function getFolderPath$1(projectId, folderId) { const tree = await getFolderPath(rootStore.restApiContext, projectId, folderId); cacheFolders(extractFoldersForCache(tree)); return tree; } function extractFoldersForCache(items, parentFolderId) { let result = []; items.forEach(item => { result.push({ id: item.id, name: item.name, parentFolder: parentFolderId }); if (item.children && item.children.length > 0) { const childFolders = extractFoldersForCache(item.children, item.id); result = [...result, ...childFolders]; } }); return result; } async function fetchTotalWorkflowsAndFoldersCount(projectId, parentFolderId) { workflowsCountLoaded.value = false; const { count } = await getWorkflowsAndFolders(rootStore.restApiContext, { projectId, parentFolderId }, { skip: 0, take: 1 }, true); totalWorkflowCount.value = count; workflowsCountLoaded.value = true; return count; } const deleteFoldersFromCache = folderIds => { folderIds.forEach(folderId => { delete breadcrumbsCache.value[folderId]; }); }; async function deleteFolder$1(projectId, folderId, newParentId) { await deleteFolder(rootStore.restApiContext, projectId, folderId, newParentId); } async function renameFolder$1(projectId, folderId, name) { await renameFolder(rootStore.restApiContext, projectId, folderId, name); } async function fetchProjectFolders(projectId) { return await getProjectFolders(rootStore.restApiContext, projectId); } async function fetchFoldersAvailableForMove(projectId, folderId, filter) { const PAGE_SIZE = 100; let skip = 0; let totalAvailable = 0; let allFolders = []; do { const { data: folders, count } = await getProjectFolders(rootStore.restApiContext, projectId, { skip, take: PAGE_SIZE, sortBy: "updatedAt:desc" }, { excludeFolderIdAndDescendants: folderId, name: filter?.name }, ["id", "name", "createdAt", "updatedAt", "project", "tags", "parentFolder", "workflowCount", "subFolderCount", "path"]); allFolders = allFolders.concat(folders.map(folder => ({ ...folder, resource: "folder" }))); totalAvailable = count; skip += folders.length; } while (allFolders.length < totalAvailable && skip < totalAvailable); cacheFolders(allFolders.map(folder => ({ id: folder.id, name: folder.name, parentFolder: folder.parentFolder?.id }))); allFolders.sort((a, b) => { if (a.path.length !== b.path.length) return a.path.length - b.path.length; for (let i = 0; i < a.path.length; i++) { const cmp = a.path[i].localeCompare(b.path[i]); if (cmp !== 0) return cmp; } return 0; }); return allFolders; } async function fetchFolderUsedCredentials(projectId, folderId) { return await getFolderUsedCredentials(rootStore.restApiContext, projectId, folderId); } async function moveFolder$1(projectId, folderId, parentFolderId) { await moveFolder(rootStore.restApiContext, projectId, folderId, parentFolderId); delete breadcrumbsCache.value[folderId]; } async function moveFolderToProject$1(projectId, folderId, destinationProjectId, destinationParentFolderId, shareCredentials) { await moveFolderToProject(rootStore.restApiContext, projectId, folderId, destinationProjectId, destinationParentFolderId, shareCredentials); delete breadcrumbsCache.value[folderId]; } async function fetchFolderContent(projectId, folderId) { return await getFolderContent(rootStore.restApiContext, projectId, folderId); } /** * Fetches the breadcrumbs items for a given folder, excluding the specified folderId. * @param projectId project in which the folder is located * @param folderId folder to get the breadcrumbs for * @returns */ async function getHiddenBreadcrumbsItems(project, folderId, options) { const startTime = Date.now(); const path = await getFolderPath$1(project.id, folderId); const processFolderWithChildren = folder => { const result$1 = [{ id: folder.id, label: folder.name, href: options?.addLinks ? `/projects/${project.id}/folders/${folder.id}/workflows` : void 0 }]; if (folder.children?.length) { const childItems = folder.children.flatMap(child => { const childResult = [{ id: child.id, label: child.name, href: options?.addLinks ? `/projects/${project.id}/folders/${child.id}/workflows` : void 0 }]; if (child.children?.length) childResult.push.apply(childResult, processFolderWithChildren(child).slice(1)); return childResult; }); result$1.push.apply(result$1, childItems); } return result$1; }; let result; if (path.length === 0) result = [{ id: project.id, label: project.name }, { id: "-1", label: i18n.baseText("folders.breadcrumbs.noTruncated.message") }];else result = [{ id: project.id, label: project.name }, ...path.flatMap(processFolderWithChildren)]; const elapsedTime = Date.now() - startTime; const remainingTime = Math.max(0, BREADCRUMBS_MIN_LOADING_TIME - elapsedTime); if (remainingTime > 0) await new Promise(resolve => setTimeout(resolve, remainingTime)); return result; } return { fetchTotalWorkflowsAndFoldersCount, breadcrumbsCache, cacheFolders, getCachedFolder, createFolder: createFolder$1, getFolderPath: getFolderPath$1, totalWorkflowCount, workflowsCountLoaded, deleteFolder: deleteFolder$1, deleteFoldersFromCache, renameFolder: renameFolder$1, fetchProjectFolders, fetchFoldersAvailableForMove, moveFolder: moveFolder$1, moveFolderToProject: moveFolderToProject$1, fetchFolderContent, getHiddenBreadcrumbsItems, draggedElement, activeDropTarget, fetchFolderUsedCredentials }; })); //#endregion } }; }); })();