1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-15 15:53:27 +00:00
Files
browser/apps/web/src/app/secrets-manager/secrets-manager-landing/request-sm-access.component.ts
Oscar Hinton fc03ed662e Remove standalone true from sm (#15043)
Remove standalone: true from every instance since it's the default as of Angular 19.
2025-06-10 14:05:17 -04:00

82 lines
3.2 KiB
TypeScript

// FIXME: Update this file to be type safe and remove this and next line
// @ts-strict-ignore
import { Component, OnInit } from "@angular/core";
import { FormControl, FormGroup, Validators } from "@angular/forms";
import { Router } from "@angular/router";
import { firstValueFrom } from "rxjs";
import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
import { getUserId } from "@bitwarden/common/auth/services/account.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { Guid } from "@bitwarden/common/types/guid";
import { NoItemsModule, SearchModule, ToastService } from "@bitwarden/components";
import { HeaderModule } from "../../layouts/header/header.module";
import { OssModule } from "../../oss.module";
import { SharedModule } from "../../shared/shared.module";
import { RequestSMAccessRequest } from "../models/requests/request-sm-access.request";
import { SmLandingApiService } from "./sm-landing-api.service";
@Component({
selector: "app-request-sm-access",
templateUrl: "request-sm-access.component.html",
imports: [SharedModule, SearchModule, NoItemsModule, HeaderModule, OssModule],
})
export class RequestSMAccessComponent implements OnInit {
requestAccessForm = new FormGroup({
requestAccessEmailContents: new FormControl(
this.i18nService.t("requestAccessSMDefaultEmailContent"),
[Validators.required],
),
selectedOrganization: new FormControl<Organization>(null, [Validators.required]),
});
organizations: Organization[] = [];
constructor(
private router: Router,
private i18nService: I18nService,
private organizationService: OrganizationService,
private smLandingApiService: SmLandingApiService,
private toastService: ToastService,
private accountService: AccountService,
) {}
async ngOnInit() {
const userId = await firstValueFrom(getUserId(this.accountService.activeAccount$));
this.organizations = (await firstValueFrom(this.organizationService.organizations$(userId)))
.filter((e) => e.enabled)
.sort((a, b) => a.name.localeCompare(b.name));
if (this.organizations === null || this.organizations.length < 1) {
await this.navigateToCreateOrganizationPage();
}
}
submit = async () => {
this.requestAccessForm.markAllAsTouched();
if (this.requestAccessForm.invalid) {
return;
}
const formValue = this.requestAccessForm.value;
const request = new RequestSMAccessRequest();
request.OrganizationId = formValue.selectedOrganization.id as Guid;
request.EmailContent = formValue.requestAccessEmailContents;
await this.smLandingApiService.requestSMAccessFromAdmins(request);
this.toastService.showToast({
variant: "success",
title: null,
message: this.i18nService.t("smAccessRequestEmailSent"),
});
await this.router.navigate(["/"]);
};
async navigateToCreateOrganizationPage() {
await this.router.navigate(["/create-organization"]);
}
}