diff --git a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/activity/application-review-dialog/new-applications-dialog.component.html b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/activity/application-review-dialog/new-applications-dialog.component.html index 04db5f6d521..2742dfdd8cb 100644 --- a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/activity/application-review-dialog/new-applications-dialog.component.html +++ b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/activity/application-review-dialog/new-applications-dialog.component.html @@ -28,7 +28,7 @@ >(new Set()); + protected readonly applicationIcons = signal>( + new Map(), + ); + protected readonly applicationsWithIcons = computed(() => { + return this.dialogParams.newApplications.map((app) => { + const iconCipher = this.applicationIcons().get(app.applicationName); + return { ...app, iconCipher } as ApplicationHealthReportDetail & { iconCipher: CipherIcon }; + }); + }); + // Used to determine if there are unassigned at-risk cipher IDs private readonly _tasks!: Signal; @@ -150,6 +161,7 @@ export class NewApplicationsDialogComponent { private securityTasksService: AccessIntelligenceSecurityTasksService, private toastService: ToastService, ) { + this.setApplicationIconMap(this.dialogParams.newApplications); // Setup the _tasks signal by manually passing in the injector this._tasks = toSignal(this.securityTasksService.tasks$, { initialValue: [], @@ -172,10 +184,6 @@ export class NewApplicationsDialogComponent { ); } - getApplications() { - return this.dialogParams.newApplications; - } - /** * Returns true if the organization has no existing critical applications. * Used to conditionally show different titles and descriptions. @@ -184,6 +192,22 @@ export class NewApplicationsDialogComponent { return !this.dialogParams.hasExistingCriticalApplications; } + /** + * Maps applications to a corresponding iconCipher + * + * @param applications + */ + setApplicationIconMap(applications: ApplicationHealthReportDetail[]) { + // Map the report data to include the iconCipher for each application + const iconCiphers = new Map(); + applications.forEach((app) => { + const iconCipher = + app.cipherIds.length > 0 ? this.dataService.getCipherIcon(app.cipherIds[0]) : undefined; + iconCiphers.set(app.applicationName, iconCipher); + }); + this.applicationIcons.set(iconCiphers); + } + /** * Toggles the selection state of an application. * @param applicationName The application to toggle diff --git a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/activity/application-review-dialog/review-applications-view.component.html b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/activity/application-review-dialog/review-applications-view.component.html index 244cf2c5931..99053cbf94d 100644 --- a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/activity/application-review-dialog/review-applications-view.component.html +++ b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/activity/application-review-dialog/review-applications-view.component.html @@ -62,7 +62,11 @@
- + @if (app.iconCipher) { + + } @else { + + } {{ app.applicationName }}
diff --git a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/activity/application-review-dialog/review-applications-view.component.ts b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/activity/application-review-dialog/review-applications-view.component.ts index 7a269d3aa15..172a4e01579 100644 --- a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/activity/application-review-dialog/review-applications-view.component.ts +++ b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/activity/application-review-dialog/review-applications-view.component.ts @@ -5,6 +5,9 @@ import { FormsModule } from "@angular/forms"; import { ApplicationHealthReportDetail } from "@bitwarden/bit-common/dirt/reports/risk-insights"; import { ButtonModule, DialogModule, SearchModule, TypographyModule } from "@bitwarden/components"; import { I18nPipe } from "@bitwarden/ui-common"; +import { SharedModule } from "@bitwarden/web-vault/app/shared"; + +import { CipherIcon } from "../../shared/app-table-row-scrollable.component"; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, @@ -18,10 +21,12 @@ import { I18nPipe } from "@bitwarden/ui-common"; SearchModule, TypographyModule, I18nPipe, + SharedModule, ], }) export class ReviewApplicationsViewComponent { - readonly applications = input.required(); + readonly applications = + input.required>(); readonly selectedApplications = input.required>(); protected readonly searchText = signal(""); diff --git a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/shared/app-table-row-scrollable.component.html b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/shared/app-table-row-scrollable.component.html index edd90eaf97d..76a03e0c525 100644 --- a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/shared/app-table-row-scrollable.component.html +++ b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/shared/app-table-row-scrollable.component.html @@ -45,7 +45,6 @@ tabindex="0" [attr.aria-label]="'viewItem' | i18n" > -