1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-16 08:13:42 +00:00

Wire up key definitions for OrganizationService (#7781)

* Wire up key definitions for OrganizationService

[`AC-2009`: Transition OrganizationService to use StateProvider](
https://bitwarden.atlassian.net/browse/AC-2009)

In order to support the new `StateProvider` APIs for managing
application state this commit modifies `OrganizationService` in the following
ways:

1. Adding a `KeyDefinition` object to `OrganizationService` to store the
   `organization` record in `StateProvider`.
1. Injecting `StateProvider` and wiring up `OrganizationService` to read
   from the `organizations` key definition for the active user account.
1. Expanding the capabilities of `OrganizationData` to be able to read
   itself from a JSON string. Previously this was handled directly by
   `StateService`.
1. Updating tests to include requirements for testing against
   `StateProvider`.
1. Marking the existing `StateService`-backed `organizations`
   `Observable` and `BehaviorSubject` as deprecated.

This is largely unimplemented code with no intended visible effects to
the system. Implementing getting & updating the `organizations` value
from `StateProvider` will the next step in this work.

* Rework null check on OrganizationData

* Remove deprecation signals for the time being

* Move key definition inline with its service

* Create date objects when deserialzing json from state
This commit is contained in:
Addison Beck
2024-02-06 18:48:34 -06:00
committed by GitHub
parent fb17cb7b99
commit b3135403e8
8 changed files with 152 additions and 14 deletions

View File

@@ -1,3 +1,5 @@
import { Jsonify } from "type-fest";
import { ProductType } from "../../../enums";
import { OrganizationUserStatusType, OrganizationUserType, ProviderType } from "../../enums";
import { PermissionsApi } from "../api/permissions.api";
@@ -54,12 +56,16 @@ export class OrganizationData {
flexibleCollections: boolean;
constructor(
response: ProfileOrganizationResponse,
options: {
response?: ProfileOrganizationResponse,
options?: {
isMember: boolean;
isProviderUser: boolean;
},
) {
if (response == null) {
return;
}
this.id = response.id;
this.name = response.name;
this.status = response.status;
@@ -110,4 +116,17 @@ export class OrganizationData {
this.isMember = options.isMember;
this.isProviderUser = options.isProviderUser;
}
static fromJSON(obj: Jsonify<OrganizationData>) {
return Object.assign(new OrganizationData(), obj, {
familySponsorshipLastSyncDate:
obj.familySponsorshipLastSyncDate != null
? new Date(obj.familySponsorshipLastSyncDate)
: obj.familySponsorshipLastSyncDate,
familySponsorshipValidUntil:
obj.familySponsorshipValidUntil != null
? new Date(obj.familySponsorshipValidUntil)
: obj.familySponsorshipValidUntil,
});
}
}