mirror of
https://github.com/bitwarden/browser
synced 2026-02-08 12:40:26 +00:00
* rename bit-icon to bit-svg; create new bit-icon for font icons Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * find and replace current usage Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * add custom eslint warning Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * fix incorrect usage * fix tests * fix tests * Update libs/components/src/svg/index.ts Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com> * Update libs/eslint/components/no-bwi-class-usage.spec.mjs Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com> * update component api * update class name * use icon type in iconButton component * update type Icon --> BitSvg * fix bad renames * fix more renames * fix bad input * revert iconButton type * fix lint * fix more inputs * misc fixes Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * fix test * add eslint ignore * fix lint * add comparison story --------- Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com> Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
79 lines
3.2 KiB
TypeScript
79 lines
3.2 KiB
TypeScript
// FIXME: Update this file to be type safe and remove this and next line
|
|
// @ts-strict-ignore
|
|
import { CommonModule } from "@angular/common";
|
|
import { Component, OnInit, Signal } from "@angular/core";
|
|
import { toSignal } from "@angular/core/rxjs-interop";
|
|
import { RouterModule } from "@angular/router";
|
|
import { Observable, switchMap } from "rxjs";
|
|
|
|
import { JslibModule } from "@bitwarden/angular/jslib.module";
|
|
import { PasswordManagerLogo } from "@bitwarden/assets/svg";
|
|
import { canAccessEmergencyAccess } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
|
|
import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction";
|
|
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
|
|
import { getUserId } from "@bitwarden/common/auth/services/account.service";
|
|
import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service";
|
|
import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
|
|
import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
|
|
import { SyncService } from "@bitwarden/common/platform/sync";
|
|
import { SvgModule } from "@bitwarden/components";
|
|
|
|
import { BillingFreeFamiliesNavItemComponent } from "../billing/shared/billing-free-families-nav-item.component";
|
|
|
|
import { WebLayoutModule } from "./web-layout.module";
|
|
|
|
// FIXME(https://bitwarden.atlassian.net/browse/CL-764): Migrate to OnPush
|
|
// eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection
|
|
@Component({
|
|
selector: "app-user-layout",
|
|
templateUrl: "user-layout.component.html",
|
|
imports: [
|
|
CommonModule,
|
|
RouterModule,
|
|
JslibModule,
|
|
WebLayoutModule,
|
|
SvgModule,
|
|
BillingFreeFamiliesNavItemComponent,
|
|
],
|
|
})
|
|
export class UserLayoutComponent implements OnInit {
|
|
protected readonly logo = PasswordManagerLogo;
|
|
protected readonly showEmergencyAccess: Signal<boolean>;
|
|
protected hasFamilySponsorshipAvailable$: Observable<boolean>;
|
|
protected showSponsoredFamilies$: Observable<boolean>;
|
|
protected showSubscription$: Observable<boolean>;
|
|
protected consolidatedSessionTimeoutComponent$: Observable<boolean>;
|
|
|
|
constructor(
|
|
private syncService: SyncService,
|
|
private billingAccountProfileStateService: BillingAccountProfileStateService,
|
|
private accountService: AccountService,
|
|
private policyService: PolicyService,
|
|
private configService: ConfigService,
|
|
) {
|
|
this.showSubscription$ = this.accountService.activeAccount$.pipe(
|
|
switchMap((account) =>
|
|
this.billingAccountProfileStateService.canViewSubscription$(account.id),
|
|
),
|
|
);
|
|
|
|
this.showEmergencyAccess = toSignal(
|
|
this.accountService.activeAccount$.pipe(
|
|
getUserId,
|
|
switchMap((userId) =>
|
|
canAccessEmergencyAccess(userId, this.configService, this.policyService),
|
|
),
|
|
),
|
|
);
|
|
|
|
this.consolidatedSessionTimeoutComponent$ = this.configService.getFeatureFlag$(
|
|
FeatureFlag.ConsolidatedSessionTimeoutComponent,
|
|
);
|
|
}
|
|
|
|
async ngOnInit() {
|
|
document.body.classList.remove("layout_frontend");
|
|
await this.syncService.fullSync(false);
|
|
}
|
|
}
|