From aae55fe7ac77594444c3405161555a517902c68b Mon Sep 17 00:00:00 2001 From: Ricardo Espinoza Date: Wed, 19 Feb 2025 19:34:29 -0500 Subject: [PATCH] feat: Add temporary env variable `N8N_FOLDERS_ENABLED` (no-changelog) (#13374) --- packages/@n8n/api-types/src/frontend-settings.ts | 3 +++ packages/cli/src/config/schema.ts | 9 +++++++++ packages/cli/src/services/frontend.service.ts | 5 +++++ packages/editor-ui/src/__tests__/defaults.ts | 3 +++ packages/editor-ui/src/stores/settings.store.ts | 6 ++++++ 5 files changed, 26 insertions(+) diff --git a/packages/@n8n/api-types/src/frontend-settings.ts b/packages/@n8n/api-types/src/frontend-settings.ts index f3f67f6eb1..e4a5acd7f3 100644 --- a/packages/@n8n/api-types/src/frontend-settings.ts +++ b/packages/@n8n/api-types/src/frontend-settings.ts @@ -156,6 +156,9 @@ export interface FrontendSettings { mfa: { enabled: boolean; }; + folders: { + enabled: boolean; + }; banners: { dismissed: string[]; }; diff --git a/packages/cli/src/config/schema.ts b/packages/cli/src/config/schema.ts index 6041549ec5..0b2b3ee822 100644 --- a/packages/cli/src/config/schema.ts +++ b/packages/cli/src/config/schema.ts @@ -370,4 +370,13 @@ export const schema = { env: 'N8N_PROXY_HOPS', doc: 'Number of reverse-proxies n8n is running behind', }, + + folders: { + enabled: { + format: Boolean, + default: false, + env: 'N8N_FOLDERS_ENABLED', + doc: 'Temporary env variable to enable folders feature', + }, + }, }; diff --git a/packages/cli/src/services/frontend.service.ts b/packages/cli/src/services/frontend.service.ts index 06da1382cf..1b13ad847f 100644 --- a/packages/cli/src/services/frontend.service.ts +++ b/packages/cli/src/services/frontend.service.ts @@ -233,6 +233,9 @@ export class FrontendService { }, easyAIWorkflowOnboarded: false, partialExecution: this.globalConfig.partialExecutions, + folders: { + enabled: false, + }, }; } @@ -360,6 +363,8 @@ export class FrontendService { this.settings.enterprise.projects.team.limit = this.license.getTeamProjectLimit(); + this.settings.folders.enabled = config.get('folders.enabled'); + return this.settings; } diff --git a/packages/editor-ui/src/__tests__/defaults.ts b/packages/editor-ui/src/__tests__/defaults.ts index a058b33f88..818aaab3a8 100644 --- a/packages/editor-ui/src/__tests__/defaults.ts +++ b/packages/editor-ui/src/__tests__/defaults.ts @@ -140,4 +140,7 @@ export const defaultSettings: FrontendSettings = { version: 1, enforce: false, }, + folders: { + enabled: false, + }, }; diff --git a/packages/editor-ui/src/stores/settings.store.ts b/packages/editor-ui/src/stores/settings.store.ts index 9d03ec8d38..b64a3d32fa 100644 --- a/packages/editor-ui/src/stores/settings.store.ts +++ b/packages/editor-ui/src/stores/settings.store.ts @@ -43,6 +43,8 @@ export const useSettingsStore = defineStore(STORES.SETTINGS, () => { const ldap = ref({ loginLabel: '', loginEnabled: false }); const saml = ref({ loginLabel: '', loginEnabled: false }); const mfa = ref({ enabled: false }); + const folders = ref({ enabled: false }); + const saveDataErrorExecution = ref('all'); const saveDataSuccessExecution = ref('all'); const saveManualExecutions = ref(false); @@ -141,6 +143,8 @@ export const useSettingsStore = defineStore(STORES.SETTINGS, () => { const isMfaFeatureEnabled = computed(() => mfa.value.enabled); + const isFoldersFeatureEnabled = computed(() => folders.value.enabled); + const areTagsEnabled = computed(() => settings.value.workflowTagsDisabled !== undefined ? !settings.value.workflowTagsDisabled : true, ); @@ -203,6 +207,7 @@ export const useSettingsStore = defineStore(STORES.SETTINGS, () => { } mfa.value.enabled = settings.value.mfa?.enabled; + folders.value.enabled = settings.value.folders?.enabled; if (settings.value.enterprise?.showNonProdBanner) { useUIStore().pushBannerToStack('NON_PRODUCTION_LICENSE'); @@ -411,6 +416,7 @@ export const useSettingsStore = defineStore(STORES.SETTINGS, () => { logLevel, isTelemetryEnabled, isMfaFeatureEnabled, + isFoldersFeatureEnabled, isAiAssistantEnabled, areTagsEnabled, isHiringBannerEnabled,