From 8bb7243c2de65a68ead0f4e8cf459973f45f1505 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E0=A4=95=E0=A4=BE=E0=A4=B0=E0=A4=A4=E0=A5=8B=E0=A4=AB?= =?UTF-8?q?=E0=A5=8D=E0=A4=AB=E0=A5=87=E0=A4=B2=E0=A4=B8=E0=A5=8D=E0=A4=95?= =?UTF-8?q?=E0=A5=8D=E0=A4=B0=E0=A4=BF=E0=A4=AA=E0=A5=8D=E0=A4=9F=E2=84=A2?= Date: Wed, 19 Jul 2023 15:59:49 +0200 Subject: [PATCH] fix(core): Banner dismissal should also work for users migrating to v1 (no-changelog) (#6700) --- .../repositories/settings.repository.ts | 39 ++++++++----------- 1 file changed, 16 insertions(+), 23 deletions(-) diff --git a/packages/cli/src/databases/repositories/settings.repository.ts b/packages/cli/src/databases/repositories/settings.repository.ts index b7a802c2f..82630bffd 100644 --- a/packages/cli/src/databases/repositories/settings.repository.ts +++ b/packages/cli/src/databases/repositories/settings.repository.ts @@ -1,5 +1,6 @@ import { Service } from 'typedi'; import { DataSource, Repository } from 'typeorm'; +import { ErrorReporterProxy as ErrorReporter } from 'n8n-workflow'; import { Settings } from '../entities/Settings'; import config from '@/config'; @@ -10,32 +11,24 @@ export class SettingsRepository extends Repository { } async dismissBanner({ bannerName }: { bannerName: string }): Promise<{ success: boolean }> { - const dismissedBannersSetting = await this.findOneBy({ key: 'ui.banners.dismissed' }); - - if (dismissedBannersSetting) { - try { + const key = 'ui.banners.dismissed'; + const dismissedBannersSetting = await this.findOneBy({ key }); + try { + let value: string; + if (dismissedBannersSetting) { const dismissedBanners = JSON.parse(dismissedBannersSetting.value) as string[]; - await this.saveSetting( - 'ui.banners.dismissed', - JSON.stringify([...dismissedBanners, bannerName]), - ); - return { success: true }; - } catch (error) { - return { success: false }; + const updatedValue = [...new Set([...dismissedBanners, bannerName].sort())]; + value = JSON.stringify(updatedValue); + await this.update({ key }, { value, loadOnStartup: true }); + } else { + value = JSON.stringify([bannerName]); + await this.save({ key, value, loadOnStartup: true }); } + config.set(key, value); + return { success: true }; + } catch (error) { + ErrorReporter.error(error); } return { success: false }; } - - async saveSetting(key: string, value: string, loadOnStartup = true) { - const setting = await this.findOneBy({ key }); - - if (setting) { - await this.update({ key }, { value, loadOnStartup }); - } else { - await this.save({ key, value, loadOnStartup }); - } - - if (loadOnStartup) config.set('ui.banners.dismissed', value); - } }