diff --git a/apps/web/src/app/modules/loose-components.module.ts b/apps/web/src/app/modules/loose-components.module.ts index 898b146e42..d20484ae5a 100644 --- a/apps/web/src/app/modules/loose-components.module.ts +++ b/apps/web/src/app/modules/loose-components.module.ts @@ -27,6 +27,10 @@ import { FooterComponent } from "../layouts/footer.component"; import { FrontendLayoutComponent } from "../layouts/frontend-layout.component"; import { NavbarComponent } from "../layouts/navbar.component"; import { UserLayoutComponent } from "../layouts/user-layout.component"; +import { BillingSyncApiKeyComponent } from "../organizations/billing/billing-sync-api-key.component"; +import { OrganizationBillingTabComponent } from "../organizations/billing/organization-billing-tab.component"; +import { OrganizationBillingComponent } from "../organizations/billing/organization-billing.component"; +import { OrganizationSubscriptionComponent } from "../organizations/billing/organization-subscription.component"; import { GroupAddEditComponent as OrgGroupAddEditComponent } from "../organizations/groups/group-add-edit.component"; import { GroupsComponent as OrgGroupsComponent } from "../organizations/groups/groups.component"; import { OrganizationLayoutComponent } from "../organizations/layouts/organization-layout.component"; @@ -59,13 +63,10 @@ import { ReportListComponent as OrgReportListComponent } from "../organizations/ import { ReportingComponent as OrgReportingComponent } from "../organizations/reporting/reporting.component"; import { AccountComponent as OrgAccountComponent } from "../organizations/settings/account.component"; import { AdjustSubscription } from "../organizations/settings/adjust-subscription.component"; -import { BillingSyncApiKeyComponent } from "../organizations/settings/billing-sync-api-key.component"; import { ChangePlanComponent } from "../organizations/settings/change-plan.component"; import { DeleteOrganizationComponent } from "../organizations/settings/delete-organization.component"; import { DownloadLicenseComponent } from "../organizations/settings/download-license.component"; import { ImageSubscriptionHiddenComponent as OrgSubscriptionHiddenComponent } from "../organizations/settings/image-subscription-hidden.component"; -import { OrganizationBillingComponent } from "../organizations/settings/organization-billing.component"; -import { OrganizationSubscriptionComponent } from "../organizations/settings/organization-subscription.component"; import { SettingsComponent as OrgSettingComponent } from "../organizations/settings/settings.component"; import { TwoFactorSetupComponent as OrgTwoFactorSetupComponent } from "../organizations/settings/two-factor-setup.component"; import { AcceptFamilySponsorshipComponent } from "../organizations/sponsorships/accept-family-sponsorship.component"; @@ -235,6 +236,7 @@ import { OrganizationBadgeModule } from "./vault/modules/organization-badge/orga OrganizationSwitcherComponent, OrgAccountComponent, OrgAddEditComponent, + OrganizationBillingTabComponent, OrganizationBillingComponent, OrganizationLayoutComponent, OrganizationPlansComponent, diff --git a/apps/web/src/app/organizations/settings/billing-sync-api-key.component.html b/apps/web/src/app/organizations/billing/billing-sync-api-key.component.html similarity index 100% rename from apps/web/src/app/organizations/settings/billing-sync-api-key.component.html rename to apps/web/src/app/organizations/billing/billing-sync-api-key.component.html diff --git a/apps/web/src/app/organizations/settings/billing-sync-api-key.component.ts b/apps/web/src/app/organizations/billing/billing-sync-api-key.component.ts similarity index 100% rename from apps/web/src/app/organizations/settings/billing-sync-api-key.component.ts rename to apps/web/src/app/organizations/billing/billing-sync-api-key.component.ts diff --git a/apps/web/src/app/organizations/billing/organization-billing-tab.component.html b/apps/web/src/app/organizations/billing/organization-billing-tab.component.html new file mode 100644 index 0000000000..b01c0eea7f --- /dev/null +++ b/apps/web/src/app/organizations/billing/organization-billing-tab.component.html @@ -0,0 +1,23 @@ +
+
+ +
+ +
+
+
diff --git a/apps/web/src/app/organizations/billing/organization-billing-tab.component.ts b/apps/web/src/app/organizations/billing/organization-billing-tab.component.ts new file mode 100644 index 0000000000..14dcac3259 --- /dev/null +++ b/apps/web/src/app/organizations/billing/organization-billing-tab.component.ts @@ -0,0 +1,21 @@ +import { Component, OnInit } from "@angular/core"; +import { ActivatedRoute } from "@angular/router"; + +import { OrganizationService } from "@bitwarden/common/abstractions/organization.service"; +import { Organization } from "@bitwarden/common/models/domain/organization"; + +@Component({ + selector: "app-org-billing-tab", + templateUrl: "organization-billing-tab.component.html", +}) +export class OrganizationBillingTabComponent implements OnInit { + organization: Organization; + + constructor(private route: ActivatedRoute, private organizationService: OrganizationService) {} + + ngOnInit() { + this.route.parent.params.subscribe(async (params) => { + this.organization = await this.organizationService.get(params.organizationId); + }); + } +} diff --git a/apps/web/src/app/organizations/settings/organization-billing.component.html b/apps/web/src/app/organizations/billing/organization-billing.component.html similarity index 100% rename from apps/web/src/app/organizations/settings/organization-billing.component.html rename to apps/web/src/app/organizations/billing/organization-billing.component.html diff --git a/apps/web/src/app/organizations/settings/organization-billing.component.ts b/apps/web/src/app/organizations/billing/organization-billing.component.ts similarity index 100% rename from apps/web/src/app/organizations/settings/organization-billing.component.ts rename to apps/web/src/app/organizations/billing/organization-billing.component.ts diff --git a/apps/web/src/app/organizations/settings/organization-subscription.component.html b/apps/web/src/app/organizations/billing/organization-subscription.component.html similarity index 100% rename from apps/web/src/app/organizations/settings/organization-subscription.component.html rename to apps/web/src/app/organizations/billing/organization-subscription.component.html diff --git a/apps/web/src/app/organizations/settings/organization-subscription.component.ts b/apps/web/src/app/organizations/billing/organization-subscription.component.ts similarity index 100% rename from apps/web/src/app/organizations/settings/organization-subscription.component.ts rename to apps/web/src/app/organizations/billing/organization-subscription.component.ts diff --git a/apps/web/src/app/organizations/organization-routing.module.ts b/apps/web/src/app/organizations/organization-routing.module.ts index 8c6264806d..7e5d09aa0f 100644 --- a/apps/web/src/app/organizations/organization-routing.module.ts +++ b/apps/web/src/app/organizations/organization-routing.module.ts @@ -6,6 +6,9 @@ import { Permissions } from "@bitwarden/common/enums/permissions"; import { OrganizationVaultModule } from "../modules/vault/modules/organization-vault/organization-vault.module"; +import { OrganizationBillingTabComponent } from "./billing/organization-billing-tab.component"; +import { OrganizationBillingComponent } from "./billing/organization-billing.component"; +import { OrganizationSubscriptionComponent } from "./billing/organization-subscription.component"; import { GroupsComponent } from "./groups/groups.component"; import { PermissionsGuard } from "./guards/permissions.guard"; import { OrganizationLayoutComponent } from "./layouts/organization-layout.component"; @@ -18,8 +21,6 @@ import { ReportListComponent } from "./reporting/report-list.component"; import { ReportingComponent } from "./reporting/reporting.component"; import { NavigationPermissionsService } from "./services/navigation-permissions.service"; import { AccountComponent } from "./settings/account.component"; -import { OrganizationBillingComponent } from "./settings/organization-billing.component"; -import { OrganizationSubscriptionComponent } from "./settings/organization-subscription.component"; import { SettingsComponent } from "./settings/settings.component"; import { TwoFactorSetupComponent } from "./settings/two-factor-setup.component"; import { ExposedPasswordsReportComponent } from "./tools/exposed-passwords-report.component"; @@ -276,6 +277,34 @@ const routes: Routes = [ }, ], }, + { + path: "billing", + component: OrganizationBillingTabComponent, + canActivate: [PermissionsGuard], + data: { + permissions: [Permissions.ManageBilling], + }, + children: [ + { path: "", pathMatch: "full", redirectTo: "subscription" }, + { + path: "subscription", + component: OrganizationSubscriptionComponent, + data: { titleId: "subscription" }, + }, + { + path: "payment-method", + component: OrganizationBillingComponent, + canActivate: [PermissionsGuard], + data: { titleId: "paymentMethod", permissions: [Permissions.ManageBilling] }, + }, + { + path: "history", + component: OrganizationBillingComponent, + canActivate: [PermissionsGuard], + data: { titleId: "billingHistory", permissions: [Permissions.ManageBilling] }, + }, + ], + }, ], }, ]; diff --git a/apps/web/src/app/organizations/settings/settings.component.html b/apps/web/src/app/organizations/settings/settings.component.html index ad9824ef73..1dd364d6b2 100644 --- a/apps/web/src/app/organizations/settings/settings.component.html +++ b/apps/web/src/app/organizations/settings/settings.component.html @@ -7,17 +7,6 @@ {{ "myOrganization" | i18n }} - - {{ "subscription" | i18n }} - - - {{ "billing" | i18n }} -