diff --git a/apps/web/src/app/admin-console/organizations/members/components/bulk/bulk-delete-dialog.component.html b/apps/web/src/app/admin-console/organizations/members/components/bulk/bulk-delete-dialog.component.html new file mode 100644 index 00000000000..9a4ce89671e --- /dev/null +++ b/apps/web/src/app/admin-console/organizations/members/components/bulk/bulk-delete-dialog.component.html @@ -0,0 +1,85 @@ + + + + {{ "noSelectedMembersApplicable" | i18n }} + + + {{ error }} + + + 0 && !error"> + {{ "deleteOrganizationUserWarning" | i18n }} + + + + + {{ "member" | i18n }} + + + + + + + + + + {{ user.email }} + + {{ "invited" | i18n }} + + + {{ user.name }} + + + + + + + + + + {{ "member" | i18n }} + {{ "status" | i18n }} + + + + + + + + + {{ user.email }} + {{ user.name }} + + + {{ statuses.get(user.id) }} + + + {{ "bulkFilteredMessage" | i18n }} + + + + + + + + 0" + bitButton + type="submit" + buttonType="primary" + [disabled]="loading" + (click)="submit()" + > + {{ "deleteMembers" | i18n }} + + + {{ "close" | i18n }} + + + diff --git a/apps/web/src/app/admin-console/organizations/members/components/bulk/bulk-delete-dialog.component.ts b/apps/web/src/app/admin-console/organizations/members/components/bulk/bulk-delete-dialog.component.ts new file mode 100644 index 00000000000..1755b0b0b91 --- /dev/null +++ b/apps/web/src/app/admin-console/organizations/members/components/bulk/bulk-delete-dialog.component.ts @@ -0,0 +1,65 @@ +import { DIALOG_DATA, DialogConfig } from "@angular/cdk/dialog"; +import { Component, Inject } from "@angular/core"; + +import { OrganizationUserApiService } from "@bitwarden/admin-console/common"; +import { OrganizationUserStatusType } from "@bitwarden/common/admin-console/enums"; +import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; +import { DialogService } from "@bitwarden/components"; + +import { BulkUserDetails } from "./bulk-status.component"; + +type BulkDeleteDialogParams = { + organizationId: string; + users: BulkUserDetails[]; +}; + +@Component({ + templateUrl: "bulk-delete-dialog.component.html", +}) +export class BulkDeleteDialogComponent { + organizationId: string; + users: BulkUserDetails[]; + loading = false; + done = false; + error: string = null; + statuses = new Map(); + userStatusType = OrganizationUserStatusType; + + constructor( + @Inject(DIALOG_DATA) protected dialogParams: BulkDeleteDialogParams, + protected i18nService: I18nService, + private organizationUserApiService: OrganizationUserApiService, + ) { + this.organizationId = dialogParams.organizationId; + this.users = dialogParams.users; + } + + async submit() { + try { + this.loading = true; + this.error = null; + + const response = await this.organizationUserApiService.deleteManyOrganizationUsers( + this.organizationId, + this.users.map((user) => user.id), + ); + + response.data.forEach((entry) => { + this.statuses.set( + entry.id, + entry.error ? entry.error : this.i18nService.t("deletedSuccessfully"), + ); + }); + + this.done = true; + } catch (e) { + this.error = e.message; + } finally { + this.loading = false; + } + } + + static open(dialogService: DialogService, config: DialogConfig) { + return dialogService.open(BulkDeleteDialogComponent, config); + } +} diff --git a/apps/web/src/app/admin-console/organizations/members/members.module.ts b/apps/web/src/app/admin-console/organizations/members/members.module.ts index d7c5a9bf1df..81697f8c845 100644 --- a/apps/web/src/app/admin-console/organizations/members/members.module.ts +++ b/apps/web/src/app/admin-console/organizations/members/members.module.ts @@ -8,6 +8,7 @@ import { LooseComponentsModule } from "../../../shared"; import { SharedOrganizationModule } from "../shared"; import { BulkConfirmDialogComponent } from "./components/bulk/bulk-confirm-dialog.component"; +import { BulkDeleteDialogComponent } from "./components/bulk/bulk-delete-dialog.component"; import { BulkEnableSecretsManagerDialogComponent } from "./components/bulk/bulk-enable-sm-dialog.component"; import { BulkRemoveDialogComponent } from "./components/bulk/bulk-remove-dialog.component"; import { BulkRestoreRevokeComponent } from "./components/bulk/bulk-restore-revoke.component"; @@ -35,6 +36,7 @@ import { MembersComponent } from "./members.component"; BulkStatusComponent, MembersComponent, ResetPasswordComponent, + BulkDeleteDialogComponent, ], }) export class MembersModule {}
{{ "deleteOrganizationUserWarning" | i18n }}