import { Component, OnDestroy, OnInit } from "@angular/core"; import { ActivatedRoute } from "@angular/router"; import { map, mergeMap, Observable, Subject, takeUntil } from "rxjs"; import { canAccessBillingTab, canAccessGroupsTab, canAccessMembersTab, canAccessReportingTab, canAccessSettingsTab, canAccessVaultTab, getOrganizationById, OrganizationService, } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; @Component({ selector: "app-organization-layout", templateUrl: "organization-layout.component.html", }) export class OrganizationLayoutComponent implements OnInit, OnDestroy { organization$: Observable; private _destroy = new Subject(); constructor( private route: ActivatedRoute, private organizationService: OrganizationService, ) {} ngOnInit() { document.body.classList.remove("layout_frontend"); this.organization$ = this.route.params .pipe(takeUntil(this._destroy)) .pipe(map((p) => p.organizationId)) .pipe( mergeMap((id) => { return this.organizationService.organizations$ .pipe(takeUntil(this._destroy)) .pipe(getOrganizationById(id)); }), ); } ngOnDestroy() { this._destroy.next(); this._destroy.complete(); } canShowVaultTab(organization: Organization): boolean { return canAccessVaultTab(organization); } canShowSettingsTab(organization: Organization): boolean { return canAccessSettingsTab(organization); } canShowMembersTab(organization: Organization): boolean { return canAccessMembersTab(organization); } canShowGroupsTab(organization: Organization): boolean { return canAccessGroupsTab(organization); } canShowReportsTab(organization: Organization): boolean { return canAccessReportingTab(organization); } canShowBillingTab(organization: Organization): boolean { return canAccessBillingTab(organization); } getReportTabLabel(organization: Organization): string { return organization.useEvents ? "reporting" : "reports"; } }