import { Observable, combineLatest, of } from "rxjs"; import { LogService } from "@bitwarden/logging"; import { CombinedState, SingleUserState, StateEventRegistrarService, UserKeyDefinition, } from "@bitwarden/state"; import { AbstractStorageService, ObservableStorageService } from "@bitwarden/storage-core"; import { UserId } from "@bitwarden/user-core"; import { StateBase } from "./state-base"; export class DefaultSingleUserState extends StateBase> implements SingleUserState { readonly combinedState$: Observable>; constructor( readonly userId: UserId, keyDefinition: UserKeyDefinition, chosenLocation: AbstractStorageService & ObservableStorageService, private stateEventRegistrarService: StateEventRegistrarService, logService: LogService, ) { super(keyDefinition.buildKey(userId), chosenLocation, keyDefinition, logService); this.combinedState$ = combineLatest([of(userId), this.state$]); } protected override async doStorageSave(newState: T, oldState: T): Promise { await super.doStorageSave(newState, oldState); if (newState != null && oldState == null) { await this.stateEventRegistrarService.registerEvents(this.keyDefinition); } } }