fix(core): Banner dismissal should also work for users migrating to v1 (no-changelog) (#6700)

This commit is contained in:
कारतोफ्फेलस्क्रिप्ट™ 2023-07-19 15:59:49 +02:00 committed by GitHub
parent cc29c4da74
commit 8bb7243c2d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1,5 +1,6 @@
import { Service } from 'typedi'; import { Service } from 'typedi';
import { DataSource, Repository } from 'typeorm'; import { DataSource, Repository } from 'typeorm';
import { ErrorReporterProxy as ErrorReporter } from 'n8n-workflow';
import { Settings } from '../entities/Settings'; import { Settings } from '../entities/Settings';
import config from '@/config'; import config from '@/config';
@ -10,32 +11,24 @@ export class SettingsRepository extends Repository<Settings> {
} }
async dismissBanner({ bannerName }: { bannerName: string }): Promise<{ success: boolean }> { async dismissBanner({ bannerName }: { bannerName: string }): Promise<{ success: boolean }> {
const dismissedBannersSetting = await this.findOneBy({ key: 'ui.banners.dismissed' }); const key = 'ui.banners.dismissed';
const dismissedBannersSetting = await this.findOneBy({ key });
if (dismissedBannersSetting) { try {
try { let value: string;
if (dismissedBannersSetting) {
const dismissedBanners = JSON.parse(dismissedBannersSetting.value) as string[]; const dismissedBanners = JSON.parse(dismissedBannersSetting.value) as string[];
await this.saveSetting( const updatedValue = [...new Set([...dismissedBanners, bannerName].sort())];
'ui.banners.dismissed', value = JSON.stringify(updatedValue);
JSON.stringify([...dismissedBanners, bannerName]), await this.update({ key }, { value, loadOnStartup: true });
); } else {
return { success: true }; value = JSON.stringify([bannerName]);
} catch (error) { await this.save({ key, value, loadOnStartup: true });
return { success: false };
} }
config.set(key, value);
return { success: true };
} catch (error) {
ErrorReporter.error(error);
} }
return { success: false }; 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);
}
} }