mirror of
https://github.com/bitwarden/browser
synced 2025-12-22 19:23:52 +00:00
* Add a banner notification to the provider portal * Feature flag the banner * Move banner copy to messages.json * Allow for dismissing the banner
103 lines
3.5 KiB
TypeScript
103 lines
3.5 KiB
TypeScript
import { CommonModule } from "@angular/common";
|
|
import { Component, OnDestroy, OnInit } from "@angular/core";
|
|
import { ActivatedRoute, RouterModule } from "@angular/router";
|
|
import { switchMap, Observable, Subject, combineLatest, map } from "rxjs";
|
|
import { takeUntil } from "rxjs/operators";
|
|
|
|
import { JslibModule } from "@bitwarden/angular/jslib.module";
|
|
import { ProviderService } from "@bitwarden/common/admin-console/abstractions/provider.service";
|
|
import { Provider } from "@bitwarden/common/admin-console/models/domain/provider";
|
|
import { hasConsolidatedBilling } from "@bitwarden/common/billing/abstractions/provider-billing.service.abstraction";
|
|
import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
|
|
import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
|
|
import {
|
|
BannerModule,
|
|
IconModule,
|
|
LayoutComponent,
|
|
LinkModule,
|
|
NavigationModule,
|
|
} from "@bitwarden/components";
|
|
import { ProviderPortalLogo } from "@bitwarden/web-vault/app/admin-console/icons/provider-portal-logo";
|
|
import { PaymentMethodWarningsModule } from "@bitwarden/web-vault/app/billing/shared";
|
|
import { ProductSwitcherModule } from "@bitwarden/web-vault/app/layouts/product-switcher/product-switcher.module";
|
|
import { ToggleWidthComponent } from "@bitwarden/web-vault/app/layouts/toggle-width.component";
|
|
|
|
import { ProviderClientVaultPrivacyBannerService } from "./services/provider-client-vault-privacy-banner.service";
|
|
|
|
@Component({
|
|
selector: "providers-layout",
|
|
templateUrl: "providers-layout.component.html",
|
|
standalone: true,
|
|
imports: [
|
|
CommonModule,
|
|
RouterModule,
|
|
JslibModule,
|
|
LayoutComponent,
|
|
IconModule,
|
|
NavigationModule,
|
|
PaymentMethodWarningsModule,
|
|
ToggleWidthComponent,
|
|
ProductSwitcherModule,
|
|
BannerModule,
|
|
LinkModule,
|
|
],
|
|
})
|
|
export class ProvidersLayoutComponent implements OnInit, OnDestroy {
|
|
protected readonly logo = ProviderPortalLogo;
|
|
|
|
private destroy$ = new Subject<void>();
|
|
protected provider$: Observable<Provider>;
|
|
|
|
protected hasConsolidatedBilling$: Observable<boolean>;
|
|
protected canAccessBilling$: Observable<boolean>;
|
|
|
|
protected showPaymentMethodWarningBanners$ = this.configService.getFeatureFlag$(
|
|
FeatureFlag.ShowPaymentMethodWarningBanners,
|
|
);
|
|
|
|
protected showProviderClientVaultPrivacyWarningBanner$ = this.configService.getFeatureFlag$(
|
|
FeatureFlag.ProviderClientVaultPrivacyBanner,
|
|
);
|
|
|
|
constructor(
|
|
private route: ActivatedRoute,
|
|
private providerService: ProviderService,
|
|
private configService: ConfigService,
|
|
protected providerClientVaultPrivacyBannerService: ProviderClientVaultPrivacyBannerService,
|
|
) {}
|
|
|
|
ngOnInit() {
|
|
document.body.classList.remove("layout_frontend");
|
|
|
|
this.provider$ = this.route.params.pipe(
|
|
switchMap((params) => this.providerService.get$(params.providerId)),
|
|
takeUntil(this.destroy$),
|
|
);
|
|
|
|
this.hasConsolidatedBilling$ = this.provider$.pipe(
|
|
hasConsolidatedBilling(this.configService),
|
|
takeUntil(this.destroy$),
|
|
);
|
|
|
|
this.canAccessBilling$ = combineLatest([this.hasConsolidatedBilling$, this.provider$]).pipe(
|
|
map(
|
|
([hasConsolidatedBilling, provider]) => hasConsolidatedBilling && provider.isProviderAdmin,
|
|
),
|
|
takeUntil(this.destroy$),
|
|
);
|
|
}
|
|
|
|
ngOnDestroy() {
|
|
this.destroy$.next();
|
|
this.destroy$.complete();
|
|
}
|
|
|
|
showManageTab(provider: Provider) {
|
|
return provider.canManageUsers || provider.canAccessEventLogs;
|
|
}
|
|
|
|
showSettingsTab(provider: Provider) {
|
|
return provider.isProviderAdmin;
|
|
}
|
|
}
|