diff --git a/packages/ui-services/src/Abstract/AbstractUIService.ts b/packages/ui-services/src/Abstract/AbstractUIService.ts index 4818bc8e7..3c8e56d95 100644 --- a/packages/ui-services/src/Abstract/AbstractUIService.ts +++ b/packages/ui-services/src/Abstract/AbstractUIService.ts @@ -2,11 +2,12 @@ import { AbstractService, InternalEventBusInterface, ApplicationEvent } from '@s import { AbstractUIServiceInterface } from './AbstractUIServiceInterface' import { WebApplicationInterface } from '../WebApplication/WebApplicationInterface' -export class AbstractUIServicee +export class AbstractUIService extends AbstractService implements AbstractUIServiceInterface { private unsubApp!: () => void + private observers = new Set<() => void>() constructor( protected application: WebApplicationInterface, @@ -43,8 +44,13 @@ export class AbstractUIServicee }) } + addObserver(observer: () => void): void { + this.observers.add(observer) + } + override deinit() { ;(this.application as unknown) = undefined + this.observers.forEach((unsubObserver) => unsubObserver()) this.unsubApp() ;(this.unsubApp as unknown) = undefined super.deinit() diff --git a/packages/ui-services/src/Theme/ThemeManager.ts b/packages/ui-services/src/Theme/ThemeManager.ts index 5cd7dcf26..ac8462d1f 100644 --- a/packages/ui-services/src/Theme/ThemeManager.ts +++ b/packages/ui-services/src/Theme/ThemeManager.ts @@ -18,7 +18,7 @@ import { } from '@standardnotes/services' import { NativeFeatureIdentifier, FindNativeTheme, ThemeFeatureDescription } from '@standardnotes/features' import { WebApplicationInterface } from '../WebApplication/WebApplicationInterface' -import { AbstractUIServicee } from '../Abstract/AbstractUIService' +import { AbstractUIService } from '../Abstract/AbstractUIService' import { GetAllThemesUseCase } from './GetAllThemesUseCase' import { Uuid } from '@standardnotes/domain-core' import { ActiveThemeList } from './ActiveThemeList' @@ -28,7 +28,7 @@ const CachedThemesKey = 'cachedThemes' const TimeBeforeApplyingColorScheme = 5 const DefaultThemeIdentifier = 'Default' -export class ThemeManager extends AbstractUIServicee { +export class ThemeManager extends AbstractUIService { private themesActiveInTheUI: ActiveThemeList private lastUseDeviceThemeSettings = false diff --git a/packages/ui-services/src/Vaults/VaultDisplayService.ts b/packages/ui-services/src/Vaults/VaultDisplayService.ts index cc8dfa354..3d98d8b3e 100644 --- a/packages/ui-services/src/Vaults/VaultDisplayService.ts +++ b/packages/ui-services/src/Vaults/VaultDisplayService.ts @@ -15,13 +15,14 @@ import { } from '@standardnotes/services' import { VaultDisplayOptions, VaultDisplayOptionsPersistable, VaultListingInterface } from '@standardnotes/models' import { VaultDisplayServiceEvent } from './VaultDisplayServiceEvent' -import { AbstractUIServicee } from '../Abstract/AbstractUIService' +import { AbstractUIService } from '../Abstract/AbstractUIService' import { WebApplicationInterface } from '../WebApplication/WebApplicationInterface' import { VaultDisplayServiceInterface } from './VaultDisplayServiceInterface' import { action, makeObservable, observable } from 'mobx' +import { ContentType } from '@standardnotes/domain-core' export class VaultDisplayService - extends AbstractUIServicee + extends AbstractUIService implements VaultDisplayServiceInterface, InternalEventHandlerInterface { options: VaultDisplayOptions @@ -48,6 +49,14 @@ export class VaultDisplayService internalEventBus.addEventHandler(this, VaultLockServiceEvent.VaultLocked) internalEventBus.addEventHandler(this, VaultLockServiceEvent.VaultUnlocked) internalEventBus.addEventHandler(this, ApplicationEvent.ApplicationStageChanged) + + this.addObserver( + application.items.streamItems(ContentType.TYPES.VaultListing, ({ removed }) => { + if (removed.some((vault) => vault.uuid === this.exclusivelyShownVault?.uuid)) { + this.changeToMultipleVaultDisplayMode() + } + }), + ) } async handleEvent(event: InternalEventInterface): Promise {