diff --git a/libs/angular/src/services/jslib-services.module.ts b/libs/angular/src/services/jslib-services.module.ts index 12fb55f08a..ddf3333c7d 100644 --- a/libs/angular/src/services/jslib-services.module.ts +++ b/libs/angular/src/services/jslib-services.module.ts @@ -349,13 +349,12 @@ import { ModalService } from "./modal.service"; provide: CipherServiceAbstraction, useFactory: ( cryptoService: CryptoServiceAbstraction, - settingsService: SettingsServiceAbstraction, + domainSettingsService: DomainSettingsService, apiService: ApiServiceAbstraction, i18nService: I18nServiceAbstraction, searchService: SearchServiceAbstraction, stateService: StateServiceAbstraction, autofillSettingsService: AutofillSettingsServiceAbstraction, - domainSettingsService: DomainSettingsService, encryptService: EncryptService, fileUploadService: CipherFileUploadServiceAbstraction, configService: ConfigServiceAbstraction, @@ -376,7 +375,7 @@ import { ModalService } from "./modal.service"; ), deps: [ CryptoServiceAbstraction, - SettingsServiceAbstraction, + DomainSettingsService, ApiServiceAbstraction, I18nServiceAbstraction, SearchServiceAbstraction, diff --git a/libs/common/spec/fake-state-provider.ts b/libs/common/spec/fake-state-provider.ts index 5b0be6ccf9..1f40a76d3c 100644 --- a/libs/common/spec/fake-state-provider.ts +++ b/libs/common/spec/fake-state-provider.ts @@ -25,6 +25,7 @@ import { FakeGlobalState, FakeSingleUserState, } from "./fake-state"; +import { isUserKeyDefinition } from "../src/platform/state/user-key-definition"; export class FakeGlobalStateProvider implements GlobalStateProvider { mock = mock(); @@ -95,7 +96,10 @@ export class FakeSingleUserStateProvider implements SingleUserStateProvider { return result as SingleUserState; } - getFake(userId: UserId, keyDefinition: KeyDefinition): FakeSingleUserState { + getFake( + userId: UserId, + keyDefinition: KeyDefinition | UserKeyDefinition, + ): FakeSingleUserState { return this.get(userId, keyDefinition) as FakeSingleUserState; } @@ -137,7 +141,7 @@ export class FakeActiveUserStateProvider implements ActiveUserStateProvider { return result as ActiveUserState; } - getFake(keyDefinition: KeyDefinition): FakeActiveUserState { + getFake(keyDefinition: KeyDefinition | UserKeyDefinition): FakeActiveUserState { return this.get(keyDefinition) as FakeActiveUserState; } @@ -154,8 +158,15 @@ export class FakeActiveUserStateProvider implements ActiveUserStateProvider { export class FakeStateProvider implements StateProvider { mock = mock(); - getUserState$(keyDefinition: KeyDefinition, userId?: UserId): Observable { - this.mock.getUserState$(keyDefinition, userId); + getUserState$( + keyDefinition: KeyDefinition | UserKeyDefinition, + userId?: UserId, + ): Observable { + if (isUserKeyDefinition(keyDefinition)) { + this.mock.getUserState$(keyDefinition, userId); + } else { + this.mock.getUserState$(keyDefinition, userId); + } if (userId) { return this.getUser(userId, keyDefinition).state$; } diff --git a/libs/common/src/platform/state/state.provider.ts b/libs/common/src/platform/state/state.provider.ts index 784deee415..f2b008eb99 100644 --- a/libs/common/src/platform/state/state.provider.ts +++ b/libs/common/src/platform/state/state.provider.ts @@ -18,8 +18,22 @@ import { ActiveUserStateProvider, SingleUserStateProvider } from "./user-state.p * and {@link GlobalStateProvider}. */ export abstract class StateProvider { - /** @see{@link ActiveUserState.activeUserId$} */ + /** @see{@link ActiveUserStateProvider.activeUserId$} */ activeUserId$: Observable; + + /** + * Gets a state observable for a given key and userId. + * + * @remarks If userId is falsy the observable returned will point to the currently active user _and not update if the active user changes_. + * This is different to how `getActive` works and more similar to `getUser` for whatever user happens to be active at the time of the call. + * + * @note consider converting your {@link KeyDefinition} to a {@link UserKeyDefinition} for additional features. + * + * @param keyDefinition - The key definition for the state you want to get. + * @param userId - The userId for which you want the state for. If not provided, the state for the currently active user will be returned. + */ + abstract getUserState$(keyDefinition: KeyDefinition, userId?: UserId): Observable; + /** * Gets a state observable for a given key and userId. * @@ -29,7 +43,7 @@ export abstract class StateProvider { * @param keyDefinition - The key definition for the state you want to get. * @param userId - The userId for which you want the state for. If not provided, the state for the currently active user will be returned. */ - getUserState$: (keyDefinition: KeyDefinition, userId?: UserId) => Observable; + abstract getUserState$(keyDefinition: UserKeyDefinition, userId?: UserId): Observable; /** * Sets the state for a given key and userId.