n8n-editor-ui 1.81.3 → 1.82.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/biome.jsonc +2 -2
- package/dist/assets/{AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-BW998oiU.js → AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-CVAPh1f-.js} +1 -1
- package/dist/assets/{AuthView-D06Y8WaW.js → AuthView-f4oecjPB.js} +2 -2
- package/dist/assets/{CanvasChat-oFfeuF_m.css → CanvasChat-CSLR5tKe.css} +67 -67
- package/dist/assets/{CanvasChat-B1XqDPdJ.js → CanvasChat-DRLqKEil.js} +7 -7
- package/dist/assets/{ChangePasswordView-DlhvSj3v.js → ChangePasswordView-qEIbFcTO.js} +3 -3
- package/dist/assets/CollectionParameter-l-cUQi-f.js +4 -0
- package/dist/assets/{ConcurrentExecutionsHeader-DpmCHvh5.js → ConcurrentExecutionsHeader-Ddh95eQk.js} +2 -2
- package/dist/assets/{CredentialsView-gqJJjZnH.js → CredentialsView-BsOy9bMK.js} +6 -6
- package/dist/assets/{ErrorView-CWdS6JZF.js → ErrorView--froAN-1.js} +1 -1
- package/dist/assets/{ExecutionsView-D5yJwk_n.js → ExecutionsView-odqi6gmC.js} +6 -6
- package/dist/assets/{FileSaver.min-JqqCDClh.js → FileSaver.min-pwLVwMq4.js} +1 -1
- package/dist/assets/{FixedCollectionParameter-BReT5syB.css → FixedCollectionParameter-BATXrzXI.css} +18 -18
- package/dist/assets/{FixedCollectionParameter-B3QletY6.js → FixedCollectionParameter-DWdgl2BK.js} +2 -2
- package/dist/assets/{ForgotMyPasswordView-Ch9OesTT.js → ForgotMyPasswordView-DM8k7659.js} +3 -3
- package/dist/assets/{Logo-DNtRgn1M.js → Logo-86l8l_Uc.js} +1 -1
- package/dist/assets/{MainHeader-ByRLGpW_.css → MainHeader-CX-ZfeKE.css} +34 -40
- package/dist/assets/{MainHeader-W9wyL7aF.js → MainHeader-Ddeqm9X3.js} +112 -97
- package/dist/assets/{MainSidebar-iL8E6f86.js → MainSidebar-CBjO7dQF.js} +3 -3
- package/dist/assets/{MainSidebar-BQVC8zBU.css → MainSidebar-DULRx8tG.css} +2 -2
- package/dist/assets/{NodeCreation-LU_Jd7ZN.js → NodeCreation-D4zlvQth.js} +4 -4
- package/dist/assets/{NodeCreator-CbVtwR4D.js → NodeCreator-CRV2RNCc.js} +4 -4
- package/dist/assets/{NodeDetailsView-C5qgc2nE.js → NodeDetailsView-CGPkwklD.js} +43 -26
- package/dist/assets/{NodeDetailsView-C2CtoATD.css → NodeDetailsView-mr-1IzdH.css} +22 -22
- package/dist/assets/{NodeView-cgb1K0sK.js → NodeView-BO6hcUEI.js} +28 -18
- package/dist/assets/{ProjectCardBadge-DY9PI-lv.js → ProjectCardBadge-CukEqaMt.js} +1 -1
- package/dist/assets/{ProjectCreateResource-icMXxLmn.js → ProjectCreateResource-CtheSWks.js} +1 -1
- package/dist/assets/{ProjectHeader-B1QbGLAy.js → ProjectHeader-DyqSSbiB.js} +31 -12
- package/dist/assets/{ProjectSettings-Sjv7MdiW.js → ProjectSettings-A-Jx5EuH.js} +3 -3
- package/dist/assets/{PushConnectionTracker.vue_vue_type_script_setup_true_lang-BkeJK_o6.js → PushConnectionTracker.vue_vue_type_script_setup_true_lang-DCOYMajh.js} +2 -2
- package/dist/assets/{ResourcesListLayout-DgwDLCvq.js → ResourcesListLayout--Bt5VWxW.js} +31 -27
- package/dist/assets/{ResourcesListLayout-GXGxZsS7.css → ResourcesListLayout-CrglsyJJ.css} +28 -25
- package/dist/assets/{RunDataAi-CVZUcHKh.js → RunDataAi-3mvlRRpH.js} +95 -81
- package/dist/assets/{RunDataJson-v1xs8mOh.js → RunDataJson-zJPQ05WS.js} +12 -12
- package/dist/assets/{RunDataJsonActions-BF_w46-j.js → RunDataJsonActions-B7Oc2vSo.js} +2 -2
- package/dist/assets/{RunDataSearch-C9vTRbpZ.js → RunDataSearch-unoOqlxw.js} +1 -1
- package/dist/assets/{RunDataTable-Cyt-R5Ne.js → RunDataTable-D4ImpIT0.js} +2 -2
- package/dist/assets/{SamlOnboarding-B0GtxhUj.js → SamlOnboarding-79GZgVmm.js} +3 -3
- package/dist/assets/{SettingsApiView-BB3Lm3bi.css → SettingsApiView-BF29ifnH.css} +17 -7
- package/dist/assets/{SettingsApiView-BquBHARi.js → SettingsApiView-Bfu9Eq70.js} +96 -12
- package/dist/assets/{SettingsCommunityNodesView-MlgZs1pJ.js → SettingsCommunityNodesView-D0ljXB1M.js} +5 -5
- package/dist/assets/{SettingsExternalSecrets-B1tujBx-.js → SettingsExternalSecrets-B26gYiBu.js} +1 -1
- package/dist/assets/{SettingsLdapView-Bu2QmZFA.js → SettingsLdapView-vYxwcftp.js} +1 -1
- package/dist/assets/{SettingsLogStreamingView-4o7kKzWx.js → SettingsLogStreamingView-BdbopaRu.js} +1 -1
- package/dist/assets/{SettingsPersonalView-BT1ea9Z0.js → SettingsPersonalView-b-MqOeug.js} +1 -1
- package/dist/assets/{SettingsSourceControl-BgyzWk3N.js → SettingsSourceControl-uQItePJJ.js} +1 -1
- package/dist/assets/{SettingsSso-Bj2HtCgL.js → SettingsSso-Dax1Fk3N.js} +1 -1
- package/dist/assets/{SettingsUsageAndPlan-B5DEUrT3.css → SettingsUsageAndPlan-Cul4YcIk.css} +3 -3
- package/dist/assets/{SettingsUsageAndPlan-DjPctQ_D.js → SettingsUsageAndPlan-DmRaRr9Y.js} +2 -2
- package/dist/assets/{SettingsUsersView-CJO9WyW-.js → SettingsUsersView-Dq_Xawhz.js} +1 -1
- package/dist/assets/{SettingsView-D_eMci-B.js → SettingsView-CwE_fjon.js} +1 -1
- package/dist/assets/{SetupView-wadckBuD.js → SetupView-CBN-MPm-.js} +3 -3
- package/dist/assets/{SetupWorkflowCredentialsButton-BtI5-vnz.js → SetupWorkflowCredentialsButton-DMEKgnto.js} +1 -1
- package/dist/assets/{SetupWorkflowFromTemplateView-BXi0z9da.js → SetupWorkflowFromTemplateView-C-xX73HU.js} +3 -3
- package/dist/assets/{SigninView-CF48sXfq.js → SigninView-Y47sX3sc.js} +3 -3
- package/dist/assets/{SignoutView-Ce-O1UMs.js → SignoutView-L91VLZRK.js} +1 -1
- package/dist/assets/{SignupView-H4rvet3k.js → SignupView-BSHwg6_v.js} +3 -3
- package/dist/assets/{TemplateDetails-Bord-EUO.js → TemplateDetails-C6QQKqXn.js} +1 -1
- package/dist/assets/{TemplateList-D2yeNaWY.js → TemplateList-BzVBnzbc.js} +1 -1
- package/dist/assets/{TemplatesCollectionView-Cis6Moe6.js → TemplatesCollectionView-DKaMozRB.js} +5 -5
- package/dist/assets/{TemplatesSearchView-cQp7aQ8O.js → TemplatesSearchView-Avn4D7q4.js} +3 -3
- package/dist/assets/{TemplatesView-Bzt-Y5nc.js → TemplatesView-DktpANMP.js} +1 -1
- package/dist/assets/{TemplatesWorkflowView-g_-2p5ff.js → TemplatesWorkflowView-B-XJLYyE.js} +5 -5
- package/dist/assets/{TestDefinitionEditView-BLTcYPQo.js → TestDefinitionEditView-BA1sXEbp.js} +316 -446
- package/dist/assets/{TestDefinitionEditView-B-ShDvcb.css → TestDefinitionEditView-JONL00pA.css} +54 -239
- package/dist/assets/{TestDefinitionListView-DUy0g6ec.js → TestDefinitionListView-CFrLcIk_.js} +29 -35
- package/dist/assets/{TestDefinitionListView-DQQJ8Oqf.css → TestDefinitionListView-Di-Edppe.css} +5 -5
- package/dist/assets/{TestDefinitionNewView-B4zhJ4fN.js → TestDefinitionNewView-B0ez8o4U.js} +2 -2
- package/dist/assets/{TestDefinitionRootView-Bxlk4Tgo.js → TestDefinitionRootView-BIq9LbNz.js} +1 -1
- package/dist/assets/{VariablesView-BbD_NAsg.js → VariablesView-CJO6im3Q.js} +6 -6
- package/dist/assets/{VariablesView-0Eu4NnUq.css → VariablesView-CbTLdNwU.css} +10 -10
- package/dist/assets/{WorkerView-Bv8QDUJT.js → WorkerView-BZFdCgX1.js} +7 -7
- package/dist/assets/{WorkflowActivator-Zsg0lNt1.js → WorkflowActivator-Dio1FWuT.js} +2 -2
- package/dist/assets/{WorkflowExecutionsInfoAccordion-CSN7f5M7.js → WorkflowExecutionsInfoAccordion-DNiIxxXO.js} +1 -1
- package/dist/assets/{WorkflowExecutionsLandingPage-B50N9dpW.js → WorkflowExecutionsLandingPage-UiQavDut.js} +2 -2
- package/dist/assets/{WorkflowExecutionsPreview-DMeq-RS5.js → WorkflowExecutionsPreview-wbxiFm6F.js} +6 -6
- package/dist/assets/{WorkflowExecutionsView-FR2n2eBe.js → WorkflowExecutionsView-BXjP0BOn.js} +7 -7
- package/dist/assets/{WorkflowHistory-CEqY5Y6b.js → WorkflowHistory-lacb8AOz.js} +3 -3
- package/dist/assets/{WorkflowOnboardingView-Bi5Hxeov.js → WorkflowOnboardingView-BdS71XgS.js} +1 -1
- package/dist/assets/{WorkflowPreview-DKlt4Yv2.js → WorkflowPreview-DDD47V5y.js} +1 -1
- package/dist/assets/{WorkflowsView-B8AX9T7c.js → WorkflowsView-A_2DIum0.js} +633 -272
- package/dist/assets/{WorkflowsView-Dc4DNgGT.css → WorkflowsView-JN0Hvhvt.css} +323 -26
- package/dist/assets/{easyAiWorkflowUtils-BeiAbGC2.js → easyAiWorkflowUtils-qtdB9CeQ.js} +1 -1
- package/dist/assets/{global-link-actions-DeB7eHyR.js → global-link-actions-D2_SnpTc.js} +1 -1
- package/dist/assets/{import-curl-C7cTqHyb.js → import-curl-Bm8BI4Ms.js} +1 -1
- package/dist/assets/{index-CkwX7P7C.js → index-CnJ6KvXD.js} +1 -1
- package/dist/assets/{index-DSYFXmvJ.js → index-DkwrpQEB.js} +3391 -3352
- package/dist/assets/{index-CKK_xS1q.css → index-DvUG3hgI.css} +355 -148
- package/dist/assets/{pickBy-BHWEuElj.js → pickBy-4c9jgxg1.js} +1 -1
- package/dist/assets/{pushConnection.store-BZc1Uu8B.js → pushConnection.store-DAf-xv0B.js} +1 -1
- package/dist/assets/{templateActions-CzrfZkNs.js → templateActions-DhuUlB_y.js} +1 -1
- package/dist/assets/{useBeforeUnload-7dWWMCaC.js → useBeforeUnload-B-rNKRVu.js} +1 -1
- package/dist/assets/{useCanvasMapping-CM-3KDoy.js → useCanvasMapping-BE9PMjep.js} +4252 -279
- package/dist/assets/{useCanvasMapping-Bb0rYy8s.css → useCanvasMapping-CkNBF2SE.css} +184 -45
- package/dist/assets/{useCanvasOperations-C8HcBhlE.js → useCanvasOperations-BYt9MoCZ.js} +219 -21
- package/dist/assets/{useExecutionDebugging-CO_W_RS3.js → useExecutionDebugging-eHQMFoAz.js} +1 -1
- package/dist/assets/{useExecutionHelpers-DKm2JOsm.js → useExecutionHelpers-DTlfzIbO.js} +1 -1
- package/dist/assets/{useImportCurlCommand-CA75qM-Y.js → useImportCurlCommand-CWfidUYH.js} +2 -2
- package/dist/assets/{usePinnedData-CX8CCdD1.js → usePinnedData-cAEPUGIg.js} +1 -1
- package/dist/assets/{usePushConnection-CArtQ7pf.js → usePushConnection-De7r5t9d.js} +4 -4
- package/dist/assets/{useRunWorkflow-BsB1hrcR.js → useRunWorkflow-Cr62-QBr.js} +193 -18
- package/dist/assets/{useTestDefinitionForm-DgumxLYU.js → useTestDefinitionForm-wWVotwCR.js} +1 -1
- package/dist/assets/{useWorkflowActivate-C_9fNHFS.js → useWorkflowActivate-COcGS4jx.js} +1 -1
- package/dist/index.html +2 -2
- package/package.json +1 -1
- package/tsconfig.json +8 -12
- package/vite.config.mts +17 -16
- package/dist/assets/CollectionParameter-C8EYd2H8.js +0 -4
- /package/dist/{public/tree-sitter-bash.wasm → tree-sitter-bash.wasm} +0 -0
- /package/dist/{public/tree-sitter.wasm → tree-sitter.wasm} +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { d as defineComponent, W as useRoute, b as useRouter, q as computed,
|
|
2
|
-
import { R as ResourcesListLayout } from "./ResourcesListLayout
|
|
3
|
-
import { W as WorkflowActivator } from "./WorkflowActivator-
|
|
4
|
-
import { P as ProjectCardBadge } from "./ProjectCardBadge-
|
|
5
|
-
import { P as ProjectHeader } from "./ProjectHeader-
|
|
6
|
-
import { g as getEasyAiWorkflowJson } from "./easyAiWorkflowUtils-
|
|
7
|
-
import "./useWorkflowActivate-
|
|
8
|
-
import "./ProjectCreateResource-
|
|
1
|
+
import { d as defineComponent, W as useRoute, b as useRouter, q as computed, g9 as ProjectTypes, V as VIEWS, m as resolveComponent, c as openBlock, h as createElementBlock, i as createVNode, w as withCtx, n as normalizeClass, k as createTextVNode, t as toDisplayString, j as createBaseVNode, l as unref, J as withModifiers, aT as createSlots, e as createBlock, f as createCommentVNode, g as useI18n, cB as _sfc_main$4, ga as __unplugin_components_0$1, _ as _export_sfc, a2 as useProjectsStore, a as useToast, p as useSettingsStore, L as useUIStore, u as useUsersStore, U as useWorkflowsStore, am as getResourcePermissions, dS as dateFormat, gb as ResourceType, ax as withDirectives, ay as vShow, ac as WORKFLOW_SHARE_MODAL_KEY, aj as DUPLICATE_MODAL_KEY, af as MODAL_CONFIRM, gc as PROJECT_MOVE_RESOURCE_MODAL, al as useMessage, ak as useTelemetry, S as defineStore, T as STORES, $ as useRootStore, r as ref, gd as createFolder, ge as getFolderPath, gf as getWorkflowsAndFolders, a1 as useSourceControlStore, au as usePostHog, E as useTagsStore, a4 as useDocumentTitle, K as useDebounce, gg as DEFAULT_WORKFLOW_PAGE_SIZE, a9 as EnterpriseEditionFeature, gh as EASY_AI_WORKFLOW_EXPERIMENT, I as watch, o as onMounted, y as onBeforeUnmount, A as debounce, fZ as N8nIcon, cG as N8nHeading, fY as N8nText, gi as N8nCard, cV as N8nInputLabel, a8 as _sfc_main$5, gj as N8nSelect, F as Fragment, B as renderList, gk as _sfc_main$6, D as createEventBus, bI as AI_CREDITS_EXPERIMENT } from "./index-DkwrpQEB.js";
|
|
2
|
+
import { R as ResourcesListLayout } from "./ResourcesListLayout--Bt5VWxW.js";
|
|
3
|
+
import { W as WorkflowActivator } from "./WorkflowActivator-Dio1FWuT.js";
|
|
4
|
+
import { P as ProjectCardBadge } from "./ProjectCardBadge-CukEqaMt.js";
|
|
5
|
+
import { P as ProjectHeader } from "./ProjectHeader-DyqSSbiB.js";
|
|
6
|
+
import { g as getEasyAiWorkflowJson } from "./easyAiWorkflowUtils-qtdB9CeQ.js";
|
|
7
|
+
import "./useWorkflowActivate-COcGS4jx.js";
|
|
8
|
+
import "./ProjectCreateResource-CtheSWks.js";
|
|
9
9
|
const FOLDER_LIST_ITEM_ACTIONS = {
|
|
10
10
|
OPEN: "open",
|
|
11
11
|
CREATE: "create",
|
|
@@ -16,11 +16,12 @@ const FOLDER_LIST_ITEM_ACTIONS = {
|
|
|
16
16
|
TAGS: "manage_tags",
|
|
17
17
|
DELETE: "delete"
|
|
18
18
|
};
|
|
19
|
-
const _sfc_main$
|
|
19
|
+
const _sfc_main$3 = /* @__PURE__ */ defineComponent({
|
|
20
20
|
__name: "FolderCard",
|
|
21
21
|
props: {
|
|
22
22
|
data: {},
|
|
23
|
-
actions: { default: () => [] }
|
|
23
|
+
actions: { default: () => [] },
|
|
24
|
+
breadcrumbs: {}
|
|
24
25
|
},
|
|
25
26
|
emits: ["action", "folderOpened"],
|
|
26
27
|
setup(__props, { emit: __emit }) {
|
|
@@ -29,17 +30,6 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
|
29
30
|
const route = useRoute();
|
|
30
31
|
const router = useRouter();
|
|
31
32
|
const emit = __emit;
|
|
32
|
-
const breadCrumbsItems = computed(() => {
|
|
33
|
-
if (props.data.parentFolder) {
|
|
34
|
-
return [
|
|
35
|
-
{
|
|
36
|
-
id: props.data.parentFolder.id,
|
|
37
|
-
label: props.data.parentFolder.name
|
|
38
|
-
}
|
|
39
|
-
];
|
|
40
|
-
}
|
|
41
|
-
return [];
|
|
42
|
-
});
|
|
43
33
|
const projectIcon = computed(() => {
|
|
44
34
|
const defaultIcon = { type: "icon", value: "layer-group" };
|
|
45
35
|
if (props.data.homeProject?.type === ProjectTypes.Personal) {
|
|
@@ -85,7 +75,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
|
85
75
|
const _component_n8n_icon = resolveComponent("n8n-icon");
|
|
86
76
|
const _component_n8n_heading = resolveComponent("n8n-heading");
|
|
87
77
|
const _component_n8n_text = resolveComponent("n8n-text");
|
|
88
|
-
const _component_TimeAgo = _sfc_main$
|
|
78
|
+
const _component_TimeAgo = _sfc_main$4;
|
|
89
79
|
const _component_ProjectIcon = __unplugin_components_0$1;
|
|
90
80
|
const _component_n8n_link = resolveComponent("n8n-link");
|
|
91
81
|
const _component_n8n_breadcrumbs = resolveComponent("n8n-breadcrumbs");
|
|
@@ -129,7 +119,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
|
129
119
|
createVNode(_component_n8n_text, {
|
|
130
120
|
size: "small",
|
|
131
121
|
color: "text-light",
|
|
132
|
-
class: normalizeClass(_ctx.$style["info-cell"]),
|
|
122
|
+
class: normalizeClass([_ctx.$style["info-cell"], _ctx.$style["info-cell--workflow-count"]]),
|
|
133
123
|
"data-test-id": "folder-card-workflow-count"
|
|
134
124
|
}, {
|
|
135
125
|
default: withCtx(() => [
|
|
@@ -140,7 +130,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
|
140
130
|
createVNode(_component_n8n_text, {
|
|
141
131
|
size: "small",
|
|
142
132
|
color: "text-light",
|
|
143
|
-
class: normalizeClass(_ctx.$style["info-cell"]),
|
|
133
|
+
class: normalizeClass([_ctx.$style["info-cell"], _ctx.$style["info-cell--updated"]]),
|
|
144
134
|
"data-test-id": "folder-card-last-updated"
|
|
145
135
|
}, {
|
|
146
136
|
default: withCtx(() => [
|
|
@@ -154,7 +144,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
|
154
144
|
createVNode(_component_n8n_text, {
|
|
155
145
|
size: "small",
|
|
156
146
|
color: "text-light",
|
|
157
|
-
class: normalizeClass(_ctx.$style["info-cell"]),
|
|
147
|
+
class: normalizeClass([_ctx.$style["info-cell"], _ctx.$style["info-cell--created"]]),
|
|
158
148
|
"data-test-id": "folder-card-created"
|
|
159
149
|
}, {
|
|
160
150
|
default: withCtx(() => [
|
|
@@ -173,49 +163,54 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
|
173
163
|
onClick: _cache[0] || (_cache[0] = withModifiers(() => {
|
|
174
164
|
}, ["prevent"]))
|
|
175
165
|
}, [
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
166
|
+
createBaseVNode("div", {
|
|
167
|
+
class: normalizeClass(_ctx.$style.breadcrumbs)
|
|
168
|
+
}, [
|
|
169
|
+
createVNode(_component_n8n_breadcrumbs, {
|
|
170
|
+
items: _ctx.breadcrumbs.visibleItems,
|
|
171
|
+
"hidden-items": _ctx.breadcrumbs.hiddenItems,
|
|
172
|
+
"path-truncated": _ctx.breadcrumbs.visibleItems[0]?.parentFolder,
|
|
173
|
+
"show-border": true,
|
|
174
|
+
"highlight-last-item": false,
|
|
175
|
+
theme: "small",
|
|
176
|
+
"data-test-id": "folder-card-breadcrumbs",
|
|
177
|
+
onItemSelected: onBreadcrumbsItemClick
|
|
178
|
+
}, createSlots({ _: 2 }, [
|
|
179
|
+
_ctx.data.homeProject ? {
|
|
180
|
+
name: "prepend",
|
|
181
|
+
fn: withCtx(() => [
|
|
182
|
+
createBaseVNode("div", {
|
|
183
|
+
class: normalizeClass(_ctx.$style["home-project"])
|
|
184
|
+
}, [
|
|
185
|
+
createVNode(_component_n8n_link, {
|
|
186
|
+
to: `/projects/${_ctx.data.homeProject.id}`
|
|
187
|
+
}, {
|
|
188
|
+
default: withCtx(() => [
|
|
189
|
+
createVNode(_component_ProjectIcon, {
|
|
190
|
+
icon: projectIcon.value,
|
|
191
|
+
"border-less": true,
|
|
192
|
+
size: "mini"
|
|
193
|
+
}, null, 8, ["icon"]),
|
|
194
|
+
createVNode(_component_n8n_text, {
|
|
195
|
+
size: "small",
|
|
196
|
+
compact: true,
|
|
197
|
+
bold: true,
|
|
198
|
+
color: "text-base"
|
|
199
|
+
}, {
|
|
200
|
+
default: withCtx(() => [
|
|
201
|
+
createTextVNode(toDisplayString(projectName.value), 1)
|
|
202
|
+
]),
|
|
203
|
+
_: 1
|
|
204
|
+
})
|
|
205
|
+
]),
|
|
206
|
+
_: 1
|
|
207
|
+
}, 8, ["to"])
|
|
208
|
+
], 2)
|
|
209
|
+
]),
|
|
210
|
+
key: "0"
|
|
211
|
+
} : void 0
|
|
212
|
+
]), 1032, ["items", "hidden-items", "path-truncated"])
|
|
213
|
+
], 2),
|
|
219
214
|
_ctx.actions.length ? (openBlock(), createBlock(_component_n8n_action_toggle, {
|
|
220
215
|
key: 0,
|
|
221
216
|
actions: _ctx.actions,
|
|
@@ -234,14 +229,103 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
|
234
229
|
};
|
|
235
230
|
}
|
|
236
231
|
});
|
|
237
|
-
const card = "
|
|
238
|
-
const style0$
|
|
232
|
+
const card = "_card_v01dx_123";
|
|
233
|
+
const style0$3 = {
|
|
239
234
|
card,
|
|
240
|
-
"folder-icon": "_folder-
|
|
241
|
-
"card-footer": "_card-
|
|
242
|
-
"info-cell": "_info-
|
|
243
|
-
"card-actions": "_card-
|
|
244
|
-
"home-project": "_home-
|
|
235
|
+
"folder-icon": "_folder-icon_v01dx_131",
|
|
236
|
+
"card-footer": "_card-footer_v01dx_142",
|
|
237
|
+
"info-cell": "_info-cell_v01dx_146",
|
|
238
|
+
"card-actions": "_card-actions_v01dx_151",
|
|
239
|
+
"home-project": "_home-project_v01dx_156",
|
|
240
|
+
"info-cell--created": "_info-cell--created_v01dx_176"
|
|
241
|
+
};
|
|
242
|
+
const cssModules$3 = {
|
|
243
|
+
"$style": style0$3
|
|
244
|
+
};
|
|
245
|
+
const __unplugin_components_1 = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__cssModules", cssModules$3]]);
|
|
246
|
+
const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
247
|
+
__name: "FolderBreadcrumbs",
|
|
248
|
+
props: {
|
|
249
|
+
actions: {},
|
|
250
|
+
breadcrumbs: {}
|
|
251
|
+
},
|
|
252
|
+
emits: ["itemSelected", "action"],
|
|
253
|
+
setup(__props, { emit: __emit }) {
|
|
254
|
+
const emit = __emit;
|
|
255
|
+
const i18n = useI18n();
|
|
256
|
+
const projectsStore = useProjectsStore();
|
|
257
|
+
const currentProject = computed(() => projectsStore.currentProject);
|
|
258
|
+
const projectName = computed(() => {
|
|
259
|
+
if (currentProject.value?.type === ProjectTypes.Personal) {
|
|
260
|
+
return i18n.baseText("projects.menu.personal");
|
|
261
|
+
}
|
|
262
|
+
return currentProject.value?.name;
|
|
263
|
+
});
|
|
264
|
+
const onItemSelect = (item) => {
|
|
265
|
+
emit("itemSelected", item);
|
|
266
|
+
};
|
|
267
|
+
const onAction = (action) => {
|
|
268
|
+
emit("action", action);
|
|
269
|
+
};
|
|
270
|
+
return (_ctx, _cache) => {
|
|
271
|
+
const _component_N8nText = resolveComponent("N8nText");
|
|
272
|
+
const _component_n8n_link = resolveComponent("n8n-link");
|
|
273
|
+
const _component_n8n_breadcrumbs = resolveComponent("n8n-breadcrumbs");
|
|
274
|
+
const _component_n8n_action_toggle = resolveComponent("n8n-action-toggle");
|
|
275
|
+
return openBlock(), createElementBlock("div", {
|
|
276
|
+
class: normalizeClass(_ctx.$style.container)
|
|
277
|
+
}, [
|
|
278
|
+
_ctx.breadcrumbs.visibleItems ? (openBlock(), createBlock(_component_n8n_breadcrumbs, {
|
|
279
|
+
key: 0,
|
|
280
|
+
items: _ctx.breadcrumbs.visibleItems,
|
|
281
|
+
"highlight-last-item": false,
|
|
282
|
+
"path-truncated": _ctx.breadcrumbs.visibleItems[0].parentFolder,
|
|
283
|
+
"hidden-items": _ctx.breadcrumbs.hiddenItems,
|
|
284
|
+
"data-test-id": "folder-card-breadcrumbs",
|
|
285
|
+
onItemSelected: onItemSelect
|
|
286
|
+
}, createSlots({ _: 2 }, [
|
|
287
|
+
currentProject.value ? {
|
|
288
|
+
name: "prepend",
|
|
289
|
+
fn: withCtx(() => [
|
|
290
|
+
createBaseVNode("div", {
|
|
291
|
+
class: normalizeClass(_ctx.$style["home-project"])
|
|
292
|
+
}, [
|
|
293
|
+
createVNode(_component_n8n_link, {
|
|
294
|
+
to: `/projects/${currentProject.value.id}`
|
|
295
|
+
}, {
|
|
296
|
+
default: withCtx(() => [
|
|
297
|
+
createVNode(_component_N8nText, {
|
|
298
|
+
size: "large",
|
|
299
|
+
color: "text-base"
|
|
300
|
+
}, {
|
|
301
|
+
default: withCtx(() => [
|
|
302
|
+
createTextVNode(toDisplayString(projectName.value), 1)
|
|
303
|
+
]),
|
|
304
|
+
_: 1
|
|
305
|
+
})
|
|
306
|
+
]),
|
|
307
|
+
_: 1
|
|
308
|
+
}, 8, ["to"])
|
|
309
|
+
], 2)
|
|
310
|
+
]),
|
|
311
|
+
key: "0"
|
|
312
|
+
} : void 0
|
|
313
|
+
]), 1032, ["items", "path-truncated", "hidden-items"])) : createCommentVNode("", true),
|
|
314
|
+
_ctx.breadcrumbs.visibleItems ? (openBlock(), createBlock(_component_n8n_action_toggle, {
|
|
315
|
+
key: 1,
|
|
316
|
+
actions: _ctx.actions,
|
|
317
|
+
theme: "dark",
|
|
318
|
+
"data-test-id": "folder-breadcrumbs-actions",
|
|
319
|
+
onAction
|
|
320
|
+
}, null, 8, ["actions"])) : createCommentVNode("", true)
|
|
321
|
+
], 2);
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
});
|
|
325
|
+
const container = "_container_1e41k_123";
|
|
326
|
+
const style0$2 = {
|
|
327
|
+
container,
|
|
328
|
+
"home-project": "_home-project_1e41k_128"
|
|
245
329
|
};
|
|
246
330
|
const cssModules$2 = {
|
|
247
331
|
"$style": style0$2
|
|
@@ -252,6 +336,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
|
252
336
|
__name: "WorkflowCard",
|
|
253
337
|
props: {
|
|
254
338
|
data: {},
|
|
339
|
+
breadcrumbs: {},
|
|
255
340
|
readOnly: { type: Boolean, default: false },
|
|
256
341
|
workflowListEventBus: { default: void 0 }
|
|
257
342
|
},
|
|
@@ -318,17 +403,6 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
|
318
403
|
`d mmmm${String(props.data.createdAt).startsWith(currentYear) ? "" : ", yyyy"}`
|
|
319
404
|
);
|
|
320
405
|
});
|
|
321
|
-
const breadCrumbsItems = computed(() => {
|
|
322
|
-
if (props.data.parentFolder) {
|
|
323
|
-
return [
|
|
324
|
-
{
|
|
325
|
-
id: props.data.parentFolder.id,
|
|
326
|
-
label: props.data.parentFolder.name
|
|
327
|
-
}
|
|
328
|
-
];
|
|
329
|
-
}
|
|
330
|
-
return [];
|
|
331
|
-
});
|
|
332
406
|
const projectIcon = computed(() => {
|
|
333
407
|
const defaultIcon = { type: "icon", value: "layer-group" };
|
|
334
408
|
if (props.data.homeProject?.type === ProjectTypes.Personal) {
|
|
@@ -499,49 +573,54 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
|
499
573
|
"resource-type": unref(ResourceType).Workflow,
|
|
500
574
|
"resource-type-label": resourceTypeLabel.value,
|
|
501
575
|
"personal-project": unref(projectsStore).personalProject
|
|
502
|
-
}, null, 8, ["class", "resource", "resource-type", "resource-type-label", "personal-project"])) : (openBlock(),
|
|
576
|
+
}, null, 8, ["class", "resource", "resource-type", "resource-type-label", "personal-project"])) : (openBlock(), createElementBlock("div", {
|
|
503
577
|
key: 1,
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
578
|
+
class: normalizeClass(_ctx.$style.breadcrumbs)
|
|
579
|
+
}, [
|
|
580
|
+
createVNode(_component_n8n_breadcrumbs, {
|
|
581
|
+
items: _ctx.breadcrumbs.visibleItems,
|
|
582
|
+
"hidden-items": _ctx.breadcrumbs.hiddenItems,
|
|
583
|
+
"path-truncated": _ctx.breadcrumbs.visibleItems[0]?.parentFolder,
|
|
584
|
+
"show-border": true,
|
|
585
|
+
"highlight-last-item": false,
|
|
586
|
+
theme: "small",
|
|
587
|
+
"data-test-id": "folder-card-breadcrumbs"
|
|
588
|
+
}, createSlots({ _: 2 }, [
|
|
589
|
+
_ctx.data.homeProject ? {
|
|
590
|
+
name: "prepend",
|
|
591
|
+
fn: withCtx(() => [
|
|
592
|
+
createBaseVNode("div", {
|
|
593
|
+
class: normalizeClass(_ctx.$style["home-project"])
|
|
594
|
+
}, [
|
|
595
|
+
createVNode(_component_n8n_link, {
|
|
596
|
+
to: `/projects/${_ctx.data.homeProject.id}`
|
|
597
|
+
}, {
|
|
598
|
+
default: withCtx(() => [
|
|
599
|
+
createVNode(_component_ProjectIcon, {
|
|
600
|
+
icon: projectIcon.value,
|
|
601
|
+
"border-less": true,
|
|
602
|
+
size: "mini"
|
|
603
|
+
}, null, 8, ["icon"]),
|
|
604
|
+
createVNode(_component_n8n_text, {
|
|
605
|
+
size: "small",
|
|
606
|
+
compact: true,
|
|
607
|
+
bold: true,
|
|
608
|
+
color: "text-base"
|
|
609
|
+
}, {
|
|
610
|
+
default: withCtx(() => [
|
|
611
|
+
createTextVNode(toDisplayString(projectName.value), 1)
|
|
612
|
+
]),
|
|
613
|
+
_: 1
|
|
614
|
+
})
|
|
615
|
+
]),
|
|
616
|
+
_: 1
|
|
617
|
+
}, 8, ["to"])
|
|
618
|
+
], 2)
|
|
619
|
+
]),
|
|
620
|
+
key: "0"
|
|
621
|
+
} : void 0
|
|
622
|
+
]), 1032, ["items", "hidden-items", "path-truncated"])
|
|
623
|
+
], 2)),
|
|
545
624
|
createVNode(WorkflowActivator, {
|
|
546
625
|
class: "mr-s",
|
|
547
626
|
"workflow-active": _ctx.data.active,
|
|
@@ -569,7 +648,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
|
569
648
|
default: withCtx(() => [
|
|
570
649
|
withDirectives(createBaseVNode("span", null, [
|
|
571
650
|
createTextVNode(toDisplayString(unref(locale).baseText("workflows.item.updated")) + " ", 1),
|
|
572
|
-
createVNode(_sfc_main$
|
|
651
|
+
createVNode(_sfc_main$4, {
|
|
573
652
|
date: String(_ctx.data.updatedAt)
|
|
574
653
|
}, null, 8, ["date"]),
|
|
575
654
|
_cache[1] || (_cache[1] = createTextVNode(" | "))
|
|
@@ -601,23 +680,92 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
|
601
680
|
};
|
|
602
681
|
}
|
|
603
682
|
});
|
|
604
|
-
const cardLink = "
|
|
605
|
-
const cardHeading = "
|
|
606
|
-
const cardDescription = "
|
|
607
|
-
const cardActions = "
|
|
608
|
-
const cardBadge = "
|
|
683
|
+
const cardLink = "_cardLink_dsqjo_123";
|
|
684
|
+
const cardHeading = "_cardHeading_dsqjo_133";
|
|
685
|
+
const cardDescription = "_cardDescription_dsqjo_142";
|
|
686
|
+
const cardActions = "_cardActions_dsqjo_149";
|
|
687
|
+
const cardBadge = "_cardBadge_dsqjo_176";
|
|
688
|
+
const breadcrumbs = "_breadcrumbs_dsqjo_177";
|
|
609
689
|
const style0$1 = {
|
|
610
690
|
cardLink,
|
|
611
691
|
cardHeading,
|
|
612
692
|
cardDescription,
|
|
613
693
|
cardActions,
|
|
614
|
-
"home-project": "_home-
|
|
615
|
-
cardBadge
|
|
694
|
+
"home-project": "_home-project_dsqjo_159",
|
|
695
|
+
cardBadge,
|
|
696
|
+
breadcrumbs
|
|
616
697
|
};
|
|
617
698
|
const cssModules$1 = {
|
|
618
699
|
"$style": style0$1
|
|
619
700
|
};
|
|
620
701
|
const WorkflowCard = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__cssModules", cssModules$1]]);
|
|
702
|
+
const useFoldersStore = defineStore(STORES.FOLDERS, () => {
|
|
703
|
+
const rootStore = useRootStore();
|
|
704
|
+
const totalWorkflowCount = ref(0);
|
|
705
|
+
const breadcrumbsCache = ref({});
|
|
706
|
+
const cacheFolders = (folders) => {
|
|
707
|
+
folders.forEach((folder) => {
|
|
708
|
+
if (!breadcrumbsCache.value[folder.id]) {
|
|
709
|
+
breadcrumbsCache.value[folder.id] = {
|
|
710
|
+
id: folder.id,
|
|
711
|
+
name: folder.name,
|
|
712
|
+
parentFolder: folder.parentFolder
|
|
713
|
+
};
|
|
714
|
+
}
|
|
715
|
+
});
|
|
716
|
+
};
|
|
717
|
+
const getCachedFolder = (folderId) => {
|
|
718
|
+
return breadcrumbsCache.value[folderId];
|
|
719
|
+
};
|
|
720
|
+
async function createFolder$1(name, projectId, parentFolderId) {
|
|
721
|
+
return await createFolder(
|
|
722
|
+
rootStore.restApiContext,
|
|
723
|
+
projectId,
|
|
724
|
+
name,
|
|
725
|
+
parentFolderId
|
|
726
|
+
);
|
|
727
|
+
}
|
|
728
|
+
async function getFolderPath$1(projectId, folderId) {
|
|
729
|
+
const tree = await getFolderPath(rootStore.restApiContext, projectId, folderId);
|
|
730
|
+
const forCache = extractFoldersForCache(tree);
|
|
731
|
+
cacheFolders(forCache);
|
|
732
|
+
return tree;
|
|
733
|
+
}
|
|
734
|
+
function extractFoldersForCache(items, parentFolderId) {
|
|
735
|
+
let result = [];
|
|
736
|
+
items.forEach((item) => {
|
|
737
|
+
result.push({
|
|
738
|
+
id: item.id,
|
|
739
|
+
name: item.name,
|
|
740
|
+
parentFolder: parentFolderId
|
|
741
|
+
});
|
|
742
|
+
if (item.children && item.children.length > 0) {
|
|
743
|
+
const childFolders = extractFoldersForCache(item.children, item.id);
|
|
744
|
+
result = [...result, ...childFolders];
|
|
745
|
+
}
|
|
746
|
+
});
|
|
747
|
+
return result;
|
|
748
|
+
}
|
|
749
|
+
async function fetchTotalWorkflowsAndFoldersCount(projectId) {
|
|
750
|
+
const { count } = await getWorkflowsAndFolders(
|
|
751
|
+
rootStore.restApiContext,
|
|
752
|
+
{ projectId },
|
|
753
|
+
{ skip: 0, take: 1 },
|
|
754
|
+
true
|
|
755
|
+
);
|
|
756
|
+
totalWorkflowCount.value = count;
|
|
757
|
+
return count;
|
|
758
|
+
}
|
|
759
|
+
return {
|
|
760
|
+
fetchTotalWorkflowsAndFoldersCount,
|
|
761
|
+
breadcrumbsCache,
|
|
762
|
+
cacheFolders,
|
|
763
|
+
getCachedFolder,
|
|
764
|
+
createFolder: createFolder$1,
|
|
765
|
+
getFolderPath: getFolderPath$1,
|
|
766
|
+
totalWorkflowCount
|
|
767
|
+
};
|
|
768
|
+
});
|
|
621
769
|
const _hoisted_1 = { class: "text-center mt-s" };
|
|
622
770
|
const _hoisted_2 = {
|
|
623
771
|
key: 0,
|
|
@@ -628,8 +776,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
628
776
|
__name: "WorkflowsView",
|
|
629
777
|
setup(__props) {
|
|
630
778
|
const StatusFilter = {
|
|
631
|
-
ACTIVE:
|
|
632
|
-
DEACTIVATED:
|
|
779
|
+
ACTIVE: "active",
|
|
780
|
+
DEACTIVATED: "deactivated",
|
|
633
781
|
ALL: ""
|
|
634
782
|
};
|
|
635
783
|
const WORKFLOWS_SORT_MAP = {
|
|
@@ -641,6 +789,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
641
789
|
const i18n = useI18n();
|
|
642
790
|
const route = useRoute();
|
|
643
791
|
const router = useRouter();
|
|
792
|
+
const message = useMessage();
|
|
793
|
+
const toast = useToast();
|
|
644
794
|
const sourceControlStore = useSourceControlStore();
|
|
645
795
|
const usersStore = useUsersStore();
|
|
646
796
|
const workflowsStore = useWorkflowsStore();
|
|
@@ -650,9 +800,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
650
800
|
const telemetry = useTelemetry();
|
|
651
801
|
const uiStore = useUIStore();
|
|
652
802
|
const tagsStore = useTagsStore();
|
|
803
|
+
const foldersStore = useFoldersStore();
|
|
653
804
|
const documentTitle = useDocumentTitle();
|
|
654
805
|
const { callDebounced } = useDebounce();
|
|
655
806
|
const loading = ref(false);
|
|
807
|
+
const breadcrumbsLoading = ref(false);
|
|
656
808
|
const filters = ref({
|
|
657
809
|
search: "",
|
|
658
810
|
homeProject: "",
|
|
@@ -662,25 +814,26 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
662
814
|
const workflowListEventBus = createEventBus();
|
|
663
815
|
const workflowsAndFolders = ref([]);
|
|
664
816
|
const easyAICalloutVisible = ref(true);
|
|
665
|
-
const currentFolder = ref(void 0);
|
|
666
817
|
const currentPage = ref(1);
|
|
667
818
|
const pageSize = ref(DEFAULT_WORKFLOW_PAGE_SIZE);
|
|
668
819
|
const currentSort = ref("updatedAt:desc");
|
|
669
|
-
const
|
|
820
|
+
const currentFolderId = ref(null);
|
|
821
|
+
const folderActions = ref([
|
|
670
822
|
{
|
|
671
823
|
label: "Open",
|
|
672
824
|
value: FOLDER_LIST_ITEM_ACTIONS.OPEN,
|
|
673
|
-
disabled: false
|
|
825
|
+
disabled: false,
|
|
826
|
+
onlyAvailableOn: "card"
|
|
674
827
|
},
|
|
675
828
|
{
|
|
676
829
|
label: "Create Folder",
|
|
677
830
|
value: FOLDER_LIST_ITEM_ACTIONS.CREATE,
|
|
678
|
-
disabled:
|
|
831
|
+
disabled: false
|
|
679
832
|
},
|
|
680
833
|
{
|
|
681
834
|
label: "Create Workflow",
|
|
682
835
|
value: FOLDER_LIST_ITEM_ACTIONS.CREATE_WORKFLOW,
|
|
683
|
-
disabled:
|
|
836
|
+
disabled: false
|
|
684
837
|
},
|
|
685
838
|
{
|
|
686
839
|
label: "Rename",
|
|
@@ -708,6 +861,16 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
708
861
|
disabled: true
|
|
709
862
|
}
|
|
710
863
|
]);
|
|
864
|
+
const folderCardActions = computed(
|
|
865
|
+
() => folderActions.value.filter(
|
|
866
|
+
(action) => !action.onlyAvailableOn || action.onlyAvailableOn === "card"
|
|
867
|
+
)
|
|
868
|
+
);
|
|
869
|
+
const mainBreadcrumbsActions = computed(
|
|
870
|
+
() => folderActions.value.filter(
|
|
871
|
+
(action) => !action.onlyAvailableOn || action.onlyAvailableOn === "mainBreadcrumbs"
|
|
872
|
+
)
|
|
873
|
+
);
|
|
711
874
|
const readOnlyEnv = computed(() => sourceControlStore.preferences.branchReadOnly);
|
|
712
875
|
const foldersEnabled = computed(() => settingsStore.settings.folders.enabled);
|
|
713
876
|
const isOverviewPage = computed(() => route.name === VIEWS.WORKFLOWS);
|
|
@@ -716,14 +879,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
716
879
|
() => settingsStore.isEnterpriseFeatureEnabled[EnterpriseEditionFeature.Sharing]
|
|
717
880
|
);
|
|
718
881
|
const showFolders = computed(() => foldersEnabled.value && !isOverviewPage.value);
|
|
719
|
-
const
|
|
720
|
-
|
|
721
|
-
const items = [];
|
|
722
|
-
items.push({
|
|
723
|
-
id: currentFolder.value.id,
|
|
724
|
-
label: currentFolder.value.name
|
|
725
|
-
});
|
|
726
|
-
return items;
|
|
882
|
+
const currentFolder = computed(() => {
|
|
883
|
+
return currentFolderId.value ? foldersStore.breadcrumbsCache[currentFolderId.value] : null;
|
|
727
884
|
});
|
|
728
885
|
const currentProject = computed(() => projectsStore.currentProject);
|
|
729
886
|
const projectName = computed(() => {
|
|
@@ -732,6 +889,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
732
889
|
}
|
|
733
890
|
return currentProject.value?.name;
|
|
734
891
|
});
|
|
892
|
+
const currentParentName = computed(() => {
|
|
893
|
+
if (currentFolder.value) {
|
|
894
|
+
return currentFolder.value.name;
|
|
895
|
+
}
|
|
896
|
+
return projectName.value;
|
|
897
|
+
});
|
|
735
898
|
const workflowListResources = computed(() => {
|
|
736
899
|
const resources = (workflowsAndFolders.value || []).map((resource) => {
|
|
737
900
|
if (resource.resource === "folder") {
|
|
@@ -807,12 +970,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
807
970
|
watch(
|
|
808
971
|
() => route.params?.folderId,
|
|
809
972
|
async (newVal) => {
|
|
810
|
-
|
|
811
|
-
currentFolder.value = void 0;
|
|
812
|
-
}
|
|
973
|
+
currentFolderId.value = newVal;
|
|
813
974
|
await fetchWorkflows();
|
|
814
975
|
}
|
|
815
976
|
);
|
|
977
|
+
sourceControlStore.$onAction(({ name, after }) => {
|
|
978
|
+
if (name !== "pullWorkfolder") return;
|
|
979
|
+
after(async () => await initialize());
|
|
980
|
+
});
|
|
816
981
|
onMounted(async () => {
|
|
817
982
|
documentTitle.set(i18n.baseText("workflows.heading"));
|
|
818
983
|
void usersStore.showPersonalizationSurvey();
|
|
@@ -823,63 +988,28 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
823
988
|
workflowListEventBus.off("resource-moved", fetchWorkflows);
|
|
824
989
|
workflowListEventBus.off("workflow-duplicated", fetchWorkflows);
|
|
825
990
|
});
|
|
826
|
-
const onFiltersUpdated = async () => {
|
|
827
|
-
currentPage.value = 1;
|
|
828
|
-
saveFiltersOnQueryString();
|
|
829
|
-
await fetchWorkflows();
|
|
830
|
-
};
|
|
831
|
-
const onSearchUpdated = async (search) => {
|
|
832
|
-
currentPage.value = 1;
|
|
833
|
-
saveFiltersOnQueryString();
|
|
834
|
-
if (search) {
|
|
835
|
-
await callDebounced(fetchWorkflows, { debounceTime: 500, trailing: true });
|
|
836
|
-
} else {
|
|
837
|
-
await fetchWorkflows();
|
|
838
|
-
}
|
|
839
|
-
};
|
|
840
|
-
const addWorkflow = () => {
|
|
841
|
-
uiStore.nodeViewInitialized = false;
|
|
842
|
-
void router.push({
|
|
843
|
-
name: VIEWS.NEW_WORKFLOW,
|
|
844
|
-
query: { projectId: route.params?.projectId }
|
|
845
|
-
});
|
|
846
|
-
telemetry.track("User clicked add workflow button", {
|
|
847
|
-
source: "Workflows list"
|
|
848
|
-
});
|
|
849
|
-
trackEmptyCardClick("blank");
|
|
850
|
-
};
|
|
851
|
-
const trackEmptyCardClick = (option) => {
|
|
852
|
-
telemetry.track("User clicked empty page option", {
|
|
853
|
-
option
|
|
854
|
-
});
|
|
855
|
-
};
|
|
856
991
|
const initialize = async () => {
|
|
857
992
|
loading.value = true;
|
|
858
|
-
currentFolder.value = void 0;
|
|
859
993
|
await setFiltersFromQueryString();
|
|
994
|
+
if (!route.params.folderId) {
|
|
995
|
+
currentFolderId.value = null;
|
|
996
|
+
}
|
|
860
997
|
const [, resourcesPage] = await Promise.all([
|
|
861
998
|
usersStore.fetchUsers(),
|
|
862
999
|
fetchWorkflows(),
|
|
863
1000
|
workflowsStore.fetchActiveWorkflows()
|
|
864
1001
|
]);
|
|
1002
|
+
breadcrumbsLoading.value = false;
|
|
865
1003
|
workflowsAndFolders.value = resourcesPage;
|
|
866
1004
|
loading.value = false;
|
|
867
1005
|
};
|
|
868
|
-
const setCurrentPage = async (page) => {
|
|
869
|
-
currentPage.value = page;
|
|
870
|
-
await fetchWorkflows();
|
|
871
|
-
};
|
|
872
|
-
const setPageSize = async (size) => {
|
|
873
|
-
pageSize.value = size;
|
|
874
|
-
await fetchWorkflows();
|
|
875
|
-
};
|
|
876
1006
|
const fetchWorkflows = async () => {
|
|
877
1007
|
const delayedLoading = debounce(() => {
|
|
878
1008
|
loading.value = true;
|
|
879
1009
|
}, 300);
|
|
880
1010
|
const routeProjectId = route.params?.projectId;
|
|
881
1011
|
const homeProjectFilter = filters.value.homeProject || void 0;
|
|
882
|
-
const parentFolder = route.params?.folderId ||
|
|
1012
|
+
const parentFolder = route.params?.folderId || void 0;
|
|
883
1013
|
const fetchedResources = await workflowsStore.fetchWorkflowsPage(
|
|
884
1014
|
routeProjectId ?? homeProjectFilter,
|
|
885
1015
|
currentPage.value,
|
|
@@ -887,18 +1017,61 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
887
1017
|
currentSort.value,
|
|
888
1018
|
{
|
|
889
1019
|
name: filters.value.search || void 0,
|
|
890
|
-
active: filters.value.status ?
|
|
1020
|
+
active: filters.value.status === StatusFilter.ALL ? void 0 : filters.value.status === StatusFilter.ACTIVE,
|
|
891
1021
|
tags: filters.value.tags.map((tagId) => tagsStore.tagsById[tagId]?.name),
|
|
892
|
-
parentFolderId: parentFolder
|
|
1022
|
+
parentFolderId: parentFolder ?? "0"
|
|
1023
|
+
// 0 is the root folder in the API
|
|
893
1024
|
},
|
|
894
1025
|
showFolders.value
|
|
895
1026
|
);
|
|
896
|
-
|
|
1027
|
+
foldersStore.cacheFolders(
|
|
1028
|
+
fetchedResources.filter((resource) => resource.resource === "folder").map((r) => ({ id: r.id, name: r.name, parentFolder: r.parentFolder?.id }))
|
|
1029
|
+
);
|
|
1030
|
+
const isCurrentFolderCached = foldersStore.breadcrumbsCache[parentFolder ?? ""] !== void 0;
|
|
1031
|
+
const needToFetchFolderPath = parentFolder && !isCurrentFolderCached && routeProjectId;
|
|
1032
|
+
if (needToFetchFolderPath) {
|
|
1033
|
+
breadcrumbsLoading.value = true;
|
|
1034
|
+
await foldersStore.getFolderPath(routeProjectId, parentFolder);
|
|
1035
|
+
currentFolderId.value = parentFolder;
|
|
1036
|
+
breadcrumbsLoading.value = false;
|
|
1037
|
+
}
|
|
1038
|
+
await foldersStore.fetchTotalWorkflowsAndFoldersCount(routeProjectId);
|
|
897
1039
|
delayedLoading.cancel();
|
|
898
1040
|
workflowsAndFolders.value = fetchedResources;
|
|
899
1041
|
loading.value = false;
|
|
900
1042
|
return fetchedResources;
|
|
901
1043
|
};
|
|
1044
|
+
const onSortUpdated = async (sort) => {
|
|
1045
|
+
currentSort.value = WORKFLOWS_SORT_MAP[sort] ?? "updatedAt:desc";
|
|
1046
|
+
if (currentSort.value !== "updatedAt:desc") {
|
|
1047
|
+
void router.replace({ query: { ...route.query, sort } });
|
|
1048
|
+
} else {
|
|
1049
|
+
void router.replace({ query: { ...route.query, sort: void 0 } });
|
|
1050
|
+
}
|
|
1051
|
+
await fetchWorkflows();
|
|
1052
|
+
};
|
|
1053
|
+
const onFiltersUpdated = async () => {
|
|
1054
|
+
currentPage.value = 1;
|
|
1055
|
+
saveFiltersOnQueryString();
|
|
1056
|
+
await fetchWorkflows();
|
|
1057
|
+
};
|
|
1058
|
+
const onSearchUpdated = async (search) => {
|
|
1059
|
+
currentPage.value = 1;
|
|
1060
|
+
saveFiltersOnQueryString();
|
|
1061
|
+
if (search) {
|
|
1062
|
+
await callDebounced(fetchWorkflows, { debounceTime: 500, trailing: true });
|
|
1063
|
+
} else {
|
|
1064
|
+
await fetchWorkflows();
|
|
1065
|
+
}
|
|
1066
|
+
};
|
|
1067
|
+
const setCurrentPage = async (page) => {
|
|
1068
|
+
currentPage.value = page;
|
|
1069
|
+
await fetchWorkflows();
|
|
1070
|
+
};
|
|
1071
|
+
const setPageSize = async (size) => {
|
|
1072
|
+
pageSize.value = size;
|
|
1073
|
+
await fetchWorkflows();
|
|
1074
|
+
};
|
|
902
1075
|
const onClickTag = async (tagId) => {
|
|
903
1076
|
if (!filters.value.tags.includes(tagId)) {
|
|
904
1077
|
filters.value.tags.push(tagId);
|
|
@@ -914,8 +1087,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
914
1087
|
} else {
|
|
915
1088
|
delete currentQuery.search;
|
|
916
1089
|
}
|
|
917
|
-
if (
|
|
918
|
-
currentQuery.status = filters.value.status.toString();
|
|
1090
|
+
if (filters.value.status !== StatusFilter.ALL) {
|
|
1091
|
+
currentQuery.status = (filters.value.status === StatusFilter.ACTIVE).toString();
|
|
919
1092
|
} else {
|
|
920
1093
|
delete currentQuery.status;
|
|
921
1094
|
}
|
|
@@ -933,9 +1106,6 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
933
1106
|
query: Object.keys(currentQuery).length ? currentQuery : void 0
|
|
934
1107
|
});
|
|
935
1108
|
};
|
|
936
|
-
function isValidProjectId(projectId) {
|
|
937
|
-
return projectsStore.availableProjects.some((project) => project.id === projectId);
|
|
938
|
-
}
|
|
939
1109
|
const setFiltersFromQueryString = async () => {
|
|
940
1110
|
const newQuery = { ...route.query };
|
|
941
1111
|
const { tags, status, search, homeProject, sort } = route.query ?? {};
|
|
@@ -969,10 +1139,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
969
1139
|
} else {
|
|
970
1140
|
delete newQuery.tags;
|
|
971
1141
|
}
|
|
972
|
-
const validStatusValues = [
|
|
1142
|
+
const validStatusValues = ["true", "false"];
|
|
973
1143
|
if (isValidString(status) && validStatusValues.includes(status)) {
|
|
974
1144
|
newQuery.status = status;
|
|
975
|
-
filters.value.status = status === "true";
|
|
1145
|
+
filters.value.status = status === "true" ? StatusFilter.ACTIVE : StatusFilter.DEACTIVATED;
|
|
976
1146
|
} else {
|
|
977
1147
|
delete newQuery.status;
|
|
978
1148
|
}
|
|
@@ -985,10 +1155,25 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
985
1155
|
}
|
|
986
1156
|
void router.replace({ query: newQuery });
|
|
987
1157
|
};
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
1158
|
+
const addWorkflow = () => {
|
|
1159
|
+
uiStore.nodeViewInitialized = false;
|
|
1160
|
+
void router.push({
|
|
1161
|
+
name: VIEWS.NEW_WORKFLOW,
|
|
1162
|
+
query: { projectId: route.params?.projectId, parentFolderId: route.params?.folderId }
|
|
1163
|
+
});
|
|
1164
|
+
telemetry.track("User clicked add workflow button", {
|
|
1165
|
+
source: "Workflows list"
|
|
1166
|
+
});
|
|
1167
|
+
trackEmptyCardClick("blank");
|
|
1168
|
+
};
|
|
1169
|
+
const trackEmptyCardClick = (option) => {
|
|
1170
|
+
telemetry.track("User clicked empty page option", {
|
|
1171
|
+
option
|
|
1172
|
+
});
|
|
1173
|
+
};
|
|
1174
|
+
function isValidProjectId(projectId) {
|
|
1175
|
+
return projectsStore.availableProjects.some((project) => project.id === projectId);
|
|
1176
|
+
}
|
|
992
1177
|
const openAIWorkflow = async (source) => {
|
|
993
1178
|
dismissEasyAICallout();
|
|
994
1179
|
telemetry.track(
|
|
@@ -1006,21 +1191,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
1006
1191
|
await router.push({
|
|
1007
1192
|
name: VIEWS.TEMPLATE_IMPORT,
|
|
1008
1193
|
params: { id: easyAiWorkflowJson.meta.templateId },
|
|
1009
|
-
query: { fromJson: "true" }
|
|
1194
|
+
query: { fromJson: "true", parentFolderId: route.params.folderId }
|
|
1010
1195
|
});
|
|
1011
1196
|
};
|
|
1012
1197
|
const dismissEasyAICallout = () => {
|
|
1013
1198
|
easyAICalloutVisible.value = false;
|
|
1014
1199
|
};
|
|
1015
|
-
const onSortUpdated = async (sort) => {
|
|
1016
|
-
currentSort.value = WORKFLOWS_SORT_MAP[sort] ?? "updatedAt:desc";
|
|
1017
|
-
if (currentSort.value !== "updatedAt:desc") {
|
|
1018
|
-
void router.replace({ query: { ...route.query, sort } });
|
|
1019
|
-
} else {
|
|
1020
|
-
void router.replace({ query: { ...route.query, sort: void 0 } });
|
|
1021
|
-
}
|
|
1022
|
-
await fetchWorkflows();
|
|
1023
|
-
};
|
|
1024
1200
|
const onWorkflowActiveToggle = (data) => {
|
|
1025
1201
|
const workflow = workflowsAndFolders.value.find(
|
|
1026
1202
|
(w) => w.id === data.id
|
|
@@ -1028,15 +1204,185 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
1028
1204
|
if (!workflow) return;
|
|
1029
1205
|
workflow.active = data.active;
|
|
1030
1206
|
};
|
|
1031
|
-
const
|
|
1032
|
-
currentFolder.value
|
|
1207
|
+
const visibleBreadcrumbsItems = computed(() => {
|
|
1208
|
+
if (!currentFolder.value) return [];
|
|
1209
|
+
const items = [];
|
|
1210
|
+
const parent = foldersStore.getCachedFolder(currentFolder.value.parentFolder ?? "");
|
|
1211
|
+
if (parent) {
|
|
1212
|
+
items.push({
|
|
1213
|
+
id: parent.id,
|
|
1214
|
+
label: parent.name,
|
|
1215
|
+
href: `/projects/${route.params.projectId}/folders/${parent.id}/workflows`,
|
|
1216
|
+
parentFolder: parent.parentFolder
|
|
1217
|
+
});
|
|
1218
|
+
}
|
|
1219
|
+
items.push({
|
|
1220
|
+
id: currentFolder.value.id,
|
|
1221
|
+
label: currentFolder.value.name,
|
|
1222
|
+
parentFolder: parent?.parentFolder
|
|
1223
|
+
});
|
|
1224
|
+
return items;
|
|
1225
|
+
});
|
|
1226
|
+
const hiddenBreadcrumbsItems = computed(() => {
|
|
1227
|
+
const lastVisibleParent = visibleBreadcrumbsItems.value[visibleBreadcrumbsItems.value.length - 1];
|
|
1228
|
+
if (!lastVisibleParent) return [];
|
|
1229
|
+
const items = [];
|
|
1230
|
+
let parentFolder = lastVisibleParent.parentFolder;
|
|
1231
|
+
while (parentFolder) {
|
|
1232
|
+
const parent = foldersStore.getCachedFolder(parentFolder);
|
|
1233
|
+
if (!parent) break;
|
|
1234
|
+
items.unshift({
|
|
1235
|
+
id: parent.id,
|
|
1236
|
+
label: parent.name,
|
|
1237
|
+
href: `/projects/${route.params.projectId}/folders/${parent.id}/workflows`,
|
|
1238
|
+
parentFolder: parent.parentFolder
|
|
1239
|
+
});
|
|
1240
|
+
parentFolder = parent.parentFolder;
|
|
1241
|
+
}
|
|
1242
|
+
return items;
|
|
1243
|
+
});
|
|
1244
|
+
const mainBreadcrumbs = computed(() => {
|
|
1245
|
+
return {
|
|
1246
|
+
visibleItems: visibleBreadcrumbsItems.value,
|
|
1247
|
+
hiddenItems: hiddenBreadcrumbsItems.value
|
|
1248
|
+
};
|
|
1249
|
+
});
|
|
1250
|
+
const cardBreadcrumbs = computed(() => {
|
|
1251
|
+
const visibleItems = visibleBreadcrumbsItems.value;
|
|
1252
|
+
const hiddenItems = hiddenBreadcrumbsItems.value;
|
|
1253
|
+
if (visibleItems.length > 1) {
|
|
1254
|
+
return {
|
|
1255
|
+
visibleItems: [visibleItems[visibleItems.length - 1]],
|
|
1256
|
+
hiddenItems: [...hiddenItems, ...visibleItems.slice(0, visibleItems.length - 1)]
|
|
1257
|
+
};
|
|
1258
|
+
}
|
|
1259
|
+
return {
|
|
1260
|
+
visibleItems,
|
|
1261
|
+
hiddenItems
|
|
1262
|
+
};
|
|
1263
|
+
});
|
|
1264
|
+
const onBreadcrumbItemClick = (item) => {
|
|
1265
|
+
if (item.href) {
|
|
1266
|
+
loading.value = true;
|
|
1267
|
+
void router.push(item.href).then(() => {
|
|
1268
|
+
currentFolderId.value = item.id;
|
|
1269
|
+
loading.value = false;
|
|
1270
|
+
}).catch((error) => {
|
|
1271
|
+
toast.showError(error, "Error navigating to folder");
|
|
1272
|
+
});
|
|
1273
|
+
}
|
|
1274
|
+
};
|
|
1275
|
+
const onBreadCrumbsAction = async (action) => {
|
|
1276
|
+
switch (action) {
|
|
1277
|
+
case FOLDER_LIST_ITEM_ACTIONS.CREATE:
|
|
1278
|
+
if (!route.params.projectId) return;
|
|
1279
|
+
const currentParent = currentFolder.value?.name || projectName.value;
|
|
1280
|
+
if (!currentParent) return;
|
|
1281
|
+
await createFolder2({
|
|
1282
|
+
id: route.params.folderId ?? "-1",
|
|
1283
|
+
name: currentParent,
|
|
1284
|
+
type: currentFolder.value ? "folder" : "project"
|
|
1285
|
+
});
|
|
1286
|
+
break;
|
|
1287
|
+
case FOLDER_LIST_ITEM_ACTIONS.CREATE_WORKFLOW:
|
|
1288
|
+
addWorkflow();
|
|
1289
|
+
break;
|
|
1290
|
+
}
|
|
1291
|
+
};
|
|
1292
|
+
const onFolderCardAction = async (payload) => {
|
|
1293
|
+
const clickedFolder = foldersStore.getCachedFolder(payload.folderId);
|
|
1294
|
+
if (!clickedFolder) return;
|
|
1295
|
+
switch (payload.action) {
|
|
1296
|
+
case FOLDER_LIST_ITEM_ACTIONS.CREATE:
|
|
1297
|
+
await createFolder2({
|
|
1298
|
+
id: clickedFolder.id,
|
|
1299
|
+
name: clickedFolder.name,
|
|
1300
|
+
type: "folder"
|
|
1301
|
+
});
|
|
1302
|
+
break;
|
|
1303
|
+
case FOLDER_LIST_ITEM_ACTIONS.CREATE_WORKFLOW:
|
|
1304
|
+
currentFolderId.value = clickedFolder.id;
|
|
1305
|
+
void router.push({
|
|
1306
|
+
name: VIEWS.NEW_WORKFLOW,
|
|
1307
|
+
query: { projectId: route.params?.projectId, parentFolderId: clickedFolder.id }
|
|
1308
|
+
});
|
|
1309
|
+
break;
|
|
1310
|
+
}
|
|
1311
|
+
};
|
|
1312
|
+
const createFolder2 = async (parent) => {
|
|
1313
|
+
const promptResponsePromise = message.prompt(
|
|
1314
|
+
i18n.baseText("folders.add.to.parent.message", { interpolate: { parent: parent.name } }),
|
|
1315
|
+
{
|
|
1316
|
+
confirmButtonText: i18n.baseText("generic.create"),
|
|
1317
|
+
cancelButtonText: i18n.baseText("generic.cancel"),
|
|
1318
|
+
inputErrorMessage: i18n.baseText("folders.add.invalidName.message"),
|
|
1319
|
+
inputValue: "",
|
|
1320
|
+
inputPattern: /^[a-zA-Z0-9-_ ]{1,100}$/,
|
|
1321
|
+
customClass: "add-folder-modal"
|
|
1322
|
+
}
|
|
1323
|
+
);
|
|
1324
|
+
const promptResponse = await promptResponsePromise;
|
|
1325
|
+
if (promptResponse.action === MODAL_CONFIRM) {
|
|
1326
|
+
const folderName = promptResponse.value;
|
|
1327
|
+
try {
|
|
1328
|
+
const newFolder = await foldersStore.createFolder(
|
|
1329
|
+
folderName,
|
|
1330
|
+
route.params.projectId,
|
|
1331
|
+
parent.type === "folder" ? parent.id : void 0
|
|
1332
|
+
);
|
|
1333
|
+
let newFolderURL = `/projects/${route.params.projectId}`;
|
|
1334
|
+
if (newFolder.parentFolder) {
|
|
1335
|
+
newFolderURL = `/projects/${route.params.projectId}/folders/${newFolder.id}/workflows`;
|
|
1336
|
+
}
|
|
1337
|
+
toast.showMessage({
|
|
1338
|
+
title: i18n.baseText("folders.add.success.title"),
|
|
1339
|
+
message: i18n.baseText("folders.add.success.message", {
|
|
1340
|
+
interpolate: {
|
|
1341
|
+
link: newFolderURL,
|
|
1342
|
+
name: newFolder.name
|
|
1343
|
+
}
|
|
1344
|
+
}),
|
|
1345
|
+
type: "success"
|
|
1346
|
+
});
|
|
1347
|
+
if (!workflowsAndFolders.value.length) {
|
|
1348
|
+
workflowsAndFolders.value = [
|
|
1349
|
+
{
|
|
1350
|
+
id: newFolder.id,
|
|
1351
|
+
name: newFolder.name,
|
|
1352
|
+
resource: "folder",
|
|
1353
|
+
createdAt: newFolder.createdAt,
|
|
1354
|
+
updatedAt: newFolder.updatedAt,
|
|
1355
|
+
homeProject: projectsStore.currentProject,
|
|
1356
|
+
sharedWithProjects: [],
|
|
1357
|
+
workflowCount: 0
|
|
1358
|
+
}
|
|
1359
|
+
];
|
|
1360
|
+
} else {
|
|
1361
|
+
await fetchWorkflows();
|
|
1362
|
+
}
|
|
1363
|
+
} catch (error) {
|
|
1364
|
+
toast.showError(error, "Error creating folder");
|
|
1365
|
+
}
|
|
1366
|
+
}
|
|
1367
|
+
};
|
|
1368
|
+
const createFolderInCurrent = async () => {
|
|
1369
|
+
if (!route.params.projectId) return;
|
|
1370
|
+
const currentParent = currentFolder.value?.name || projectName.value;
|
|
1371
|
+
if (!currentParent) return;
|
|
1372
|
+
await createFolder2({
|
|
1373
|
+
id: route.params.folderId ?? "-1",
|
|
1374
|
+
name: currentParent,
|
|
1375
|
+
type: currentFolder.value ? "folder" : "project"
|
|
1376
|
+
});
|
|
1033
1377
|
};
|
|
1034
1378
|
return (_ctx, _cache) => {
|
|
1379
|
+
const _component_N8nButton = resolveComponent("N8nButton");
|
|
1380
|
+
const _component_N8nTooltip = resolveComponent("N8nTooltip");
|
|
1035
1381
|
const _component_n8n_button = resolveComponent("n8n-button");
|
|
1036
1382
|
const _component_N8nCallout = resolveComponent("N8nCallout");
|
|
1037
|
-
const
|
|
1038
|
-
const
|
|
1039
|
-
const _component_FolderCard =
|
|
1383
|
+
const _component_n8n_loading = resolveComponent("n8n-loading");
|
|
1384
|
+
const _component_FolderBreadcrumbs = __unplugin_components_0;
|
|
1385
|
+
const _component_FolderCard = __unplugin_components_1;
|
|
1040
1386
|
return openBlock(), createBlock(ResourcesListLayout, {
|
|
1041
1387
|
filters: filters.value,
|
|
1042
1388
|
"onUpdate:filters": [
|
|
@@ -1052,7 +1398,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
1052
1398
|
disabled: readOnlyEnv.value || !projectPermissions.value.workflow.create,
|
|
1053
1399
|
loading: false,
|
|
1054
1400
|
"resources-refreshing": loading.value,
|
|
1055
|
-
"custom-page-size":
|
|
1401
|
+
"custom-page-size": unref(DEFAULT_WORKFLOW_PAGE_SIZE),
|
|
1056
1402
|
"total-items": unref(workflowsStore).totalWorkflowCount,
|
|
1057
1403
|
"dont-perform-sorting-and-filtering": true,
|
|
1058
1404
|
"onClick:add": addWorkflow,
|
|
@@ -1060,9 +1406,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
1060
1406
|
"onUpdate:currentPage": setCurrentPage,
|
|
1061
1407
|
"onUpdate:pageSize": setPageSize,
|
|
1062
1408
|
onSort: onSortUpdated
|
|
1063
|
-
}, {
|
|
1409
|
+
}, createSlots({
|
|
1064
1410
|
header: withCtx(() => [
|
|
1065
|
-
createVNode(ProjectHeader)
|
|
1411
|
+
createVNode(ProjectHeader, { onCreateFolder: createFolderInCurrent })
|
|
1066
1412
|
]),
|
|
1067
1413
|
callout: withCtx(() => [
|
|
1068
1414
|
showEasyAIWorkflowCallout.value && easyAICalloutVisible.value ? (openBlock(), createBlock(_component_N8nCallout, {
|
|
@@ -1102,53 +1448,41 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
1102
1448
|
}, 8, ["class"])) : createCommentVNode("", true)
|
|
1103
1449
|
]),
|
|
1104
1450
|
breadcrumbs: withCtx(() => [
|
|
1105
|
-
|
|
1451
|
+
breadcrumbsLoading.value ? (openBlock(), createElementBlock("div", {
|
|
1106
1452
|
key: 0,
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
}, {
|
|
1126
|
-
default: withCtx(() => [
|
|
1127
|
-
createTextVNode(toDisplayString(projectName.value), 1)
|
|
1128
|
-
]),
|
|
1129
|
-
_: 1
|
|
1130
|
-
})
|
|
1131
|
-
]),
|
|
1132
|
-
_: 1
|
|
1133
|
-
}, 8, ["to"])
|
|
1134
|
-
], 2)
|
|
1135
|
-
]),
|
|
1136
|
-
key: "0"
|
|
1137
|
-
} : void 0
|
|
1138
|
-
]), 1032, ["items", "path-truncated"])) : createCommentVNode("", true)
|
|
1453
|
+
class: normalizeClass(_ctx.$style["breadcrumbs-loading"])
|
|
1454
|
+
}, [
|
|
1455
|
+
createVNode(_component_n8n_loading, {
|
|
1456
|
+
loading: breadcrumbsLoading.value,
|
|
1457
|
+
rows: 1,
|
|
1458
|
+
variant: "p"
|
|
1459
|
+
}, null, 8, ["loading"])
|
|
1460
|
+
], 2)) : showFolders.value && currentFolder.value ? (openBlock(), createElementBlock("div", {
|
|
1461
|
+
key: 1,
|
|
1462
|
+
class: normalizeClass(_ctx.$style["breadcrumbs-container"])
|
|
1463
|
+
}, [
|
|
1464
|
+
createVNode(_component_FolderBreadcrumbs, {
|
|
1465
|
+
breadcrumbs: mainBreadcrumbs.value,
|
|
1466
|
+
actions: mainBreadcrumbsActions.value,
|
|
1467
|
+
onItemSelected: onBreadcrumbItemClick,
|
|
1468
|
+
onAction: onBreadCrumbsAction
|
|
1469
|
+
}, null, 8, ["breadcrumbs", "actions"])
|
|
1470
|
+
], 2)) : createCommentVNode("", true)
|
|
1139
1471
|
]),
|
|
1140
1472
|
item: withCtx(({ item: data }) => [
|
|
1141
1473
|
data.resourceType === "folder" ? (openBlock(), createBlock(_component_FolderCard, {
|
|
1142
1474
|
key: 0,
|
|
1143
1475
|
data,
|
|
1144
1476
|
actions: folderCardActions.value,
|
|
1477
|
+
breadcrumbs: cardBreadcrumbs.value,
|
|
1145
1478
|
class: "mb-2xs",
|
|
1146
|
-
|
|
1147
|
-
}, null, 8, ["data", "actions"])) : (openBlock(), createBlock(WorkflowCard, {
|
|
1479
|
+
onAction: onFolderCardAction
|
|
1480
|
+
}, null, 8, ["data", "actions", "breadcrumbs"])) : (openBlock(), createBlock(WorkflowCard, {
|
|
1148
1481
|
key: 1,
|
|
1149
1482
|
"data-test-id": "resources-list-item",
|
|
1150
1483
|
class: "mb-2xs",
|
|
1151
1484
|
data,
|
|
1485
|
+
breadcrumbs: cardBreadcrumbs.value,
|
|
1152
1486
|
"workflow-list-event-bus": unref(workflowListEventBus),
|
|
1153
1487
|
"read-only": readOnlyEnv.value,
|
|
1154
1488
|
"onClick:tag": onClickTag,
|
|
@@ -1156,7 +1490,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
1156
1490
|
"onWorkflow:moved": fetchWorkflows,
|
|
1157
1491
|
"onWorkflow:duplicated": fetchWorkflows,
|
|
1158
1492
|
"onWorkflow:activeToggle": onWorkflowActiveToggle
|
|
1159
|
-
}, null, 8, ["data", "workflow-list-event-bus", "read-only"]))
|
|
1493
|
+
}, null, 8, ["data", "breadcrumbs", "workflow-list-event-bus", "read-only"]))
|
|
1160
1494
|
]),
|
|
1161
1495
|
empty: withCtx(() => [
|
|
1162
1496
|
createBaseVNode("div", _hoisted_1, [
|
|
@@ -1246,7 +1580,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
1246
1580
|
color: "text-base",
|
|
1247
1581
|
class: "mb-3xs"
|
|
1248
1582
|
}, null, 8, ["label"]),
|
|
1249
|
-
createVNode(_sfc_main$
|
|
1583
|
+
createVNode(_sfc_main$5, {
|
|
1250
1584
|
placeholder: unref(i18n).baseText("workflowOpen.filterWorkflows"),
|
|
1251
1585
|
"model-value": filters.value.tags,
|
|
1252
1586
|
"create-enabled": false,
|
|
@@ -1268,7 +1602,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
1268
1602
|
}, {
|
|
1269
1603
|
default: withCtx(() => [
|
|
1270
1604
|
(openBlock(true), createElementBlock(Fragment, null, renderList(statusFilterOptions.value, (option) => {
|
|
1271
|
-
return openBlock(), createBlock(unref(_sfc_main$
|
|
1605
|
+
return openBlock(), createBlock(unref(_sfc_main$6), {
|
|
1272
1606
|
key: option.label,
|
|
1273
1607
|
label: option.label,
|
|
1274
1608
|
value: option.value,
|
|
@@ -1280,21 +1614,48 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
1280
1614
|
}, 1032, ["model-value", "onUpdate:modelValue"])
|
|
1281
1615
|
])
|
|
1282
1616
|
]),
|
|
1283
|
-
_:
|
|
1284
|
-
},
|
|
1617
|
+
_: 2
|
|
1618
|
+
}, [
|
|
1619
|
+
showFolders.value ? {
|
|
1620
|
+
name: "add-button",
|
|
1621
|
+
fn: withCtx(() => [
|
|
1622
|
+
createVNode(_component_N8nTooltip, { placement: "top" }, {
|
|
1623
|
+
content: withCtx(() => [
|
|
1624
|
+
createTextVNode(toDisplayString(currentParentName.value ? unref(i18n).baseText("folders.add.to.parent.message", {
|
|
1625
|
+
interpolate: { parent: currentParentName.value }
|
|
1626
|
+
}) : unref(i18n).baseText("folders.add.here.message")), 1)
|
|
1627
|
+
]),
|
|
1628
|
+
default: withCtx(() => [
|
|
1629
|
+
createVNode(_component_N8nButton, {
|
|
1630
|
+
size: "large",
|
|
1631
|
+
icon: "folder-plus",
|
|
1632
|
+
type: "tertiary",
|
|
1633
|
+
"data-test-id": "add-folder-button",
|
|
1634
|
+
class: normalizeClass(_ctx.$style["add-folder-button"]),
|
|
1635
|
+
onClick: createFolderInCurrent
|
|
1636
|
+
}, null, 8, ["class"])
|
|
1637
|
+
]),
|
|
1638
|
+
_: 1
|
|
1639
|
+
})
|
|
1640
|
+
]),
|
|
1641
|
+
key: "0"
|
|
1642
|
+
} : void 0
|
|
1643
|
+
]), 1032, ["filters", "resources", "shareable", "disabled", "resources-refreshing", "custom-page-size", "total-items"]);
|
|
1285
1644
|
};
|
|
1286
1645
|
}
|
|
1287
1646
|
});
|
|
1288
|
-
const actionsContainer = "
|
|
1289
|
-
const emptyStateCard = "
|
|
1290
|
-
const emptyStateCardIcon = "
|
|
1647
|
+
const actionsContainer = "_actionsContainer_j58pl_123";
|
|
1648
|
+
const emptyStateCard = "_emptyStateCard_j58pl_139";
|
|
1649
|
+
const emptyStateCardIcon = "_emptyStateCardIcon_j58pl_152";
|
|
1291
1650
|
const style0 = {
|
|
1292
1651
|
actionsContainer,
|
|
1293
|
-
"easy-ai-workflow-callout": "_easy-ai-workflow-
|
|
1294
|
-
"callout-trailing-content": "_callout-trailing-
|
|
1652
|
+
"easy-ai-workflow-callout": "_easy-ai-workflow-callout_j58pl_128",
|
|
1653
|
+
"callout-trailing-content": "_callout-trailing-content_j58pl_133",
|
|
1295
1654
|
emptyStateCard,
|
|
1296
1655
|
emptyStateCardIcon,
|
|
1297
|
-
"
|
|
1656
|
+
"add-folder-button": "_add-folder-button_j58pl_161",
|
|
1657
|
+
"breadcrumbs-container": "_breadcrumbs-container_j58pl_165",
|
|
1658
|
+
"breadcrumbs-loading": "_breadcrumbs-loading_j58pl_170"
|
|
1298
1659
|
};
|
|
1299
1660
|
const cssModules = {
|
|
1300
1661
|
"$style": style0
|