mirror of
https://github.com/bitwarden/browser
synced 2026-01-14 06:23:24 +00:00
* refactor: introduce @bitwarden/serialization * refactor: introduce @bitwarden/guid * refactor: introduce @bitwaren/client-type * refactor: introduce @bitwarden/core-test-utils * refactor: introduce @bitwarden/state and @bitwarden/state-test-utils Creates initial project structure for centralized application state management. Part of modularization effort to extract state code from common. * Added state provider documentation to README. * Changed callouts to Github format. * Fixed linting on file name. * Forced git to accept rename --------- Co-authored-by: Todd Martin <tmartin@bitwarden.com>
37 lines
1.3 KiB
TypeScript
37 lines
1.3 KiB
TypeScript
import { Observable, combineLatest, of } from "rxjs";
|
|
|
|
import { LogService } from "@bitwarden/logging";
|
|
import { AbstractStorageService, ObservableStorageService } from "@bitwarden/storage-core";
|
|
import { UserId } from "@bitwarden/user-core";
|
|
|
|
import { StateEventRegistrarService } from "../state-event-registrar.service";
|
|
import { UserKeyDefinition } from "../user-key-definition";
|
|
import { CombinedState, SingleUserState } from "../user-state";
|
|
|
|
import { StateBase } from "./state-base";
|
|
|
|
export class DefaultSingleUserState<T>
|
|
extends StateBase<T, UserKeyDefinition<T>>
|
|
implements SingleUserState<T>
|
|
{
|
|
readonly combinedState$: Observable<CombinedState<T | null>>;
|
|
|
|
constructor(
|
|
readonly userId: UserId,
|
|
keyDefinition: UserKeyDefinition<T>,
|
|
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<void> {
|
|
await super.doStorageSave(newState, oldState);
|
|
if (newState != null && oldState == null) {
|
|
await this.stateEventRegistrarService.registerEvents(this.keyDefinition);
|
|
}
|
|
}
|
|
}
|