From d40e9a36443f49bbd90389539ee3f190f53b56a4 Mon Sep 17 00:00:00 2001
From: Brad <44413459+lastbestdev@users.noreply.github.com>
Date: Wed, 28 Jan 2026 12:47:38 -0800
Subject: [PATCH] [PM-30918] Migrate DIRT components to new Angular control
flow syntax (#18416)
* dirt: migrate apps/web components to new control flow
* dirt: update control flow bitwarden licensed code
* consolidate @if statements, use @else where appropriate
* more cleanup
* consolidate conditionals
* remove unnecessary conditional
---
.../pages/breach-report.component.html | 91 +++----
.../exposed-passwords-report.component.html | 217 +++++++++--------
.../inactive-two-factor-report.component.html | 229 +++++++++---------
.../reused-passwords-report.component.html | 216 +++++++++--------
.../unsecured-websites-report.component.html | 204 ++++++++--------
.../weak-passwords-report.component.html | 228 ++++++++---------
.../report-list/report-list.component.html | 20 +-
.../activity/activity-card.component.ts | 3 +-
.../password-change-metric.component.ts | 3 +-
.../assign-tasks-view.component.ts | 2 -
.../new-applications-dialog.component.ts | 2 -
.../empty-state-card.component.html | 134 +++++-----
.../empty-state-card.component.ts | 3 +-
.../risk-insights.component.html | 17 +-
.../app-table-row-scrollable.component.html | 98 ++++----
.../shared/report-loading.component.ts | 3 +-
.../integration-grid.component.html | 35 +--
.../integrations.component.html | 48 ++--
.../member-access-report.component.html | 84 ++++---
19 files changed, 838 insertions(+), 799 deletions(-)
diff --git a/apps/web/src/app/dirt/reports/pages/breach-report.component.html b/apps/web/src/app/dirt/reports/pages/breach-report.component.html
index d645fa39d69..0915902143e 100644
--- a/apps/web/src/app/dirt/reports/pages/breach-report.component.html
+++ b/apps/web/src/app/dirt/reports/pages/breach-report.component.html
@@ -12,45 +12,54 @@
{{ "checkBreaches" | i18n }}
-
-
{{ "reportError" | i18n }}...
-
-
- {{ "breachUsernameNotFound" | i18n: checkedUsername }}
-
-
- {{ "breachUsernameFound" | i18n: checkedUsername : breachedAccounts.length }}
-
-
- -
-
-
![]()
-
-
-
{{ a.title }}
-
-
{{ "compromisedData" | i18n }}:
-
-
-
-
- - {{ "website" | i18n }}
- - {{ a.domain }}
- - {{ "affectedUsers" | i18n }}
- - {{ a.pwnCount | number }}
- - {{ "breachOccurred" | i18n }}
- - {{ a.breachDate | date: "mediumDate" }}
- - {{ "breachReported" | i18n }}
- - {{ a.addedDate | date: "mediumDate" }}
-
-
-
-
-
-
+ @if (!loading && checkedUsername) {
+
+ @if (error) {
+
{{ "reportError" | i18n }}...
+ } @else {
+ @if (!breachedAccounts.length) {
+
+ {{ "breachUsernameNotFound" | i18n: checkedUsername }}
+
+ } @else {
+
+ {{ "breachUsernameFound" | i18n: checkedUsername : breachedAccounts.length }}
+
+
+ @for (a of breachedAccounts; track a) {
+ -
+
+
![]()
+
+
+
{{ a.title }}
+
+
{{ "compromisedData" | i18n }}:
+
+ @for (d of a.dataClasses; track d) {
+ - {{ d }}
+ }
+
+
+
+
+ - {{ "website" | i18n }}
+ - {{ a.domain }}
+ - {{ "affectedUsers" | i18n }}
+ - {{ a.pwnCount | number }}
+ - {{ "breachOccurred" | i18n }}
+ - {{ a.breachDate | date: "mediumDate" }}
+ - {{ "breachReported" | i18n }}
+ - {{ a.addedDate | date: "mediumDate" }}
+
+
+
+ }
+
+ }
+ }
+
+ }
diff --git a/apps/web/src/app/dirt/reports/pages/exposed-passwords-report.component.html b/apps/web/src/app/dirt/reports/pages/exposed-passwords-report.component.html
index 55e6678bd58..ba118ea6663 100644
--- a/apps/web/src/app/dirt/reports/pages/exposed-passwords-report.component.html
+++ b/apps/web/src/app/dirt/reports/pages/exposed-passwords-report.component.html
@@ -5,108 +5,119 @@
-
-
- {{ "noExposedPasswords" | i18n }}
-
-
-
- {{ "exposedPasswordsFoundReportDesc" | i18n: (ciphers.length | number) : vaultMsg }}
-
-
- @if (showFilterToggle && !isAdminConsoleActive) {
- @if (canDisplayToggleGroup()) {
-
-
-
- {{ getName(status) }}
- {{ getCount(status) }}
-
-
-
- } @else {
-
- }
- }
-
-
-
- |
- {{ "name" | i18n }} |
-
- {{ "owner" | i18n }}
- |
-
- {{ "timesExposed" | i18n }}
- |
-
-
-
-
- |
-
-
-
- {{ row.name }}
-
-
-
- {{ row.name }}
-
-
-
- {{ "shared" | i18n }}
-
-
-
- {{ "attachments" | i18n }}
-
-
- {{ row.subTitle }}
- |
-
-
+ @if (!ciphers.length) {
+
+ {{ "noExposedPasswords" | i18n }}
+
+ } @else {
+
+ {{ "exposedPasswordsFoundReportDesc" | i18n: (ciphers.length | number) : vaultMsg }}
+
+ @if (showFilterToggle && !isAdminConsoleActive) {
+ @if (canDisplayToggleGroup()) {
+
-
- |
-
-
- {{ "exposedXTimes" | i18n: (row.exposedXTimes | number) }}
-
- |
-
-
-
-
+ @for (status of filterStatus; track status) {
+
+ {{ getName(status) }}
+ {{ getCount(status) }}
+
+ }
+
+ } @else {
+
+ }
+ }
+
+
+ |
+ {{ "name" | i18n }} |
+ @if (!isAdminConsoleActive) {
+
+ {{ "owner" | i18n }}
+ |
+ }
+
+ {{ "timesExposed" | i18n }}
+ |
+
+
+
+
+ |
+
+ @if (!organization || canManageCipher(row)) {
+
+ {{ row.name }}
+
+ } @else {
+ {{ row.name }}
+ }
+ @if (!organization && row.organizationId) {
+
+ {{ "shared" | i18n }}
+ }
+ @if (row.hasAttachments) {
+
+ {{ "attachments" | i18n }}
+ }
+
+ {{ row.subTitle }}
+ |
+ @if (!isAdminConsoleActive) {
+
+ @if (!organization) {
+
+
+ }
+ |
+ }
+
+
+ {{ "exposedXTimes" | i18n: (row.exposedXTimes | number) }}
+
+ |
+
+
+ }
+
+ }
diff --git a/apps/web/src/app/dirt/reports/pages/inactive-two-factor-report.component.html b/apps/web/src/app/dirt/reports/pages/inactive-two-factor-report.component.html
index a1d3f2a38be..4999d572969 100644
--- a/apps/web/src/app/dirt/reports/pages/inactive-two-factor-report.component.html
+++ b/apps/web/src/app/dirt/reports/pages/inactive-two-factor-report.component.html
@@ -2,117 +2,124 @@
{{ "inactive2faReportDesc" | i18n }}
-
-
- {{ "loading" | i18n }}
-
-
-
- {{ "noInactive2fa" | i18n }}
-
-
-
- {{ "inactive2faFoundReportDesc" | i18n: (ciphers.length | number) : vaultMsg }}
-
-
- @if (showFilterToggle && !isAdminConsoleActive) {
- @if (canDisplayToggleGroup()) {
-
-
-
- {{ getName(status) }}
- {{ getCount(status) }}
-
-
-
- } @else {
-
+ @if (!hasLoaded && loading) {
+
+
+ {{ "loading" | i18n }}
+
+ } @else {
+
+ @if (!ciphers.length) {
+
+ {{ "noInactive2fa" | i18n }}
+
+ } @else {
+
+ {{ "inactive2faFoundReportDesc" | i18n: (ciphers.length | number) : vaultMsg }}
+
+ @if (showFilterToggle && !isAdminConsoleActive) {
+ @if (canDisplayToggleGroup()) {
+
+ @for (status of filterStatus; track status) {
+
+ {{ getName(status) }}
+ {{ getCount(status) }}
+
+ }
+
+ } @else {
+
+ }
}
+
+ @if (!isAdminConsoleActive) {
+
+ |
+ {{ "name" | i18n }} |
+ {{ "owner" | i18n }} |
+ |
+
+ }
+
+
+
+ |
+
+ @if (!organization || canManageCipher(row)) {
+
+ {{ row.name }}
+
+ } @else {
+
+ {{ row.name }}
+
+ }
+ @if (!organization && row.organizationId) {
+
+
+ {{ "shared" | i18n }}
+
+ }
+ @if (row.hasAttachments) {
+
+
+ {{ "attachments" | i18n }}
+
+ }
+
+ {{ row.subTitle }}
+ |
+
+ @if (!organization) {
+
+ }
+ |
+
+ @if (cipherDocs.has(row.id)) {
+
+ {{ "instructions" | i18n }}
+ }
+ |
+
+
}
-
-
-
- |
- {{ "name" | i18n }} |
- {{ "owner" | i18n }} |
- |
-
-
-
-
- |
-
-
- {{ row.name }}
-
-
- {{ row.name }}
-
-
-
- {{ "shared" | i18n }}
-
-
-
- {{ "attachments" | i18n }}
-
-
- {{ row.subTitle }}
- |
-
-
-
- |
-
-
- {{ "instructions" | i18n }}
- |
-
-
-
-
+
+ }
diff --git a/apps/web/src/app/dirt/reports/pages/reused-passwords-report.component.html b/apps/web/src/app/dirt/reports/pages/reused-passwords-report.component.html
index 62496dfad00..f08af8bda01 100644
--- a/apps/web/src/app/dirt/reports/pages/reused-passwords-report.component.html
+++ b/apps/web/src/app/dirt/reports/pages/reused-passwords-report.component.html
@@ -2,111 +2,115 @@
{{ "reusedPasswordsReportDesc" | i18n }}
-
-
- {{ "loading" | i18n }}
-
-
-
- {{ "noReusedPasswords" | i18n }}
-
-
-
- {{ "reusedPasswordsFoundReportDesc" | i18n: (ciphers.length | number) : vaultMsg }}
-
-
- @if (showFilterToggle && !isAdminConsoleActive) {
- @if (canDisplayToggleGroup()) {
-
-
-
- {{ getName(status) }}
- {{ getCount(status) }}
-
-
-
- } @else {
-
- }
- }
-
-
-
- |
- {{ "name" | i18n }} |
- {{ "owner" | i18n }} |
- {{ "timesReused" | i18n }} |
-
-
-
-
- |
-
-
- {{ row.name }}
-
-
- {{ row.name }}
-
-
-
- {{ "shared" | i18n }}
-
-
-
- {{ "attachments" | i18n }}
-
-
- {{ row.subTitle }}
- |
-
-
+
+ {{ "loading" | i18n }}
+
+ } @else {
+
+ @if (!ciphers.length) {
+
+ {{ "noReusedPasswords" | i18n }}
+
+ } @else {
+
+ {{ "reusedPasswordsFoundReportDesc" | i18n: (ciphers.length | number) : vaultMsg }}
+
+ @if (showFilterToggle && !isAdminConsoleActive) {
+ @if (canDisplayToggleGroup()) {
+
-
- |
-
-
- {{ "reusedXTimes" | i18n: passwordUseMap.get(row.login.password) }}
-
- |
-
-
-
-
+ @for (status of filterStatus; track status) {
+
+ {{ getName(status) }}
+ {{ getCount(status) }}
+
+ }
+
+ } @else {
+
+ }
+ }
+
+ @if (!isAdminConsoleActive) {
+
+ |
+ {{ "name" | i18n }} |
+ {{ "owner" | i18n }} |
+ {{ "timesReused" | i18n }} |
+
+ }
+
+
+
+ |
+
+ @if (!organization || canManageCipher(row)) {
+ {{ row.name }}
+ } @else {
+ {{ row.name }}
+ }
+ @if (!organization && row.organizationId) {
+
+ {{ "shared" | i18n }}
+ }
+ @if (row.hasAttachments) {
+
+ {{ "attachments" | i18n }}
+ }
+
+ {{ row.subTitle }}
+ |
+
+ @if (!organization) {
+
+
+ }
+ |
+
+
+ {{ "reusedXTimes" | i18n: passwordUseMap.get(row.login.password) }}
+
+ |
+
+
+ }
+
+ }
diff --git a/apps/web/src/app/dirt/reports/pages/unsecured-websites-report.component.html b/apps/web/src/app/dirt/reports/pages/unsecured-websites-report.component.html
index 276508b3801..810c1e384b0 100644
--- a/apps/web/src/app/dirt/reports/pages/unsecured-websites-report.component.html
+++ b/apps/web/src/app/dirt/reports/pages/unsecured-websites-report.component.html
@@ -2,105 +2,109 @@
{{ "unsecuredWebsitesReportDesc" | i18n }}
-
-
- {{ "loading" | i18n }}
-
-
-
- {{ "noUnsecuredWebsites" | i18n }}
-
-
-
- {{ "unsecuredWebsitesFoundReportDesc" | i18n: (ciphers.length | number) : vaultMsg }}
-
-
- @if (showFilterToggle && !isAdminConsoleActive) {
- @if (canDisplayToggleGroup()) {
-
-
-
- {{ getName(status) }}
- {{ getCount(status) }}
-
-
-
- } @else {
-
- }
- }
-
-
-
- |
- {{ "name" | i18n }} |
- {{ "owner" | i18n }} |
-
-
-
-
- |
-
-
- {{ row.name }}
-
-
- {{ row.name }}
-
-
-
- {{ "shared" | i18n }}
-
-
-
- {{ "attachments" | i18n }}
-
-
- {{ row.subTitle }}
- |
-
-
+
+ {{ "loading" | i18n }}
+
+ } @else {
+
+ @if (!ciphers.length) {
+
+ {{ "noUnsecuredWebsites" | i18n }}
+
+ } @else {
+
+ {{ "unsecuredWebsitesFoundReportDesc" | i18n: (ciphers.length | number) : vaultMsg }}
+
+ @if (showFilterToggle && !isAdminConsoleActive) {
+ @if (canDisplayToggleGroup()) {
+
-
- |
-
-
-
-
+ @for (status of filterStatus; track status) {
+
+ {{ getName(status) }}
+ {{ getCount(status) }}
+
+ }
+
+ } @else {
+
+ }
+ }
+
+ @if (!isAdminConsoleActive) {
+
+ |
+ {{ "name" | i18n }} |
+ {{ "owner" | i18n }} |
+
+ }
+
+
+
+ |
+
+ @if (!organization || canManageCipher(row)) {
+ {{ row.name }}
+ } @else {
+ {{ row.name }}
+ }
+ @if (!organization && row.organizationId) {
+
+ {{ "shared" | i18n }}
+ }
+ @if (row.hasAttachments) {
+
+ {{ "attachments" | i18n }}
+ }
+
+ {{ row.subTitle }}
+ |
+
+ @if (!organization) {
+
+
+ }
+ |
+
+
+ }
+
+ }
diff --git a/apps/web/src/app/dirt/reports/pages/weak-passwords-report.component.html b/apps/web/src/app/dirt/reports/pages/weak-passwords-report.component.html
index 96bae4c3e0a..d96d083ffe0 100644
--- a/apps/web/src/app/dirt/reports/pages/weak-passwords-report.component.html
+++ b/apps/web/src/app/dirt/reports/pages/weak-passwords-report.component.html
@@ -2,115 +2,123 @@
{{ "weakPasswordsReportDesc" | i18n }}
-
-
- {{ "loading" | i18n }}
-
-
-
- {{ "noWeakPasswords" | i18n }}
-
-
-
- {{ "weakPasswordsFoundReportDesc" | i18n: (ciphers.length | number) : vaultMsg }}
-
-
- @if (showFilterToggle && !isAdminConsoleActive) {
- @if (canDisplayToggleGroup()) {
-
-
-
- {{ getName(status) }}
- {{ getCount(status) }}
-
-
-
- } @else {
-
- }
- }
-
-
-
- |
- {{ "name" | i18n }} |
-
- {{ "owner" | i18n }}
- |
-
- {{ "weakness" | i18n }}
- |
-
-
-
-
- |
-
-
- {{ row.name }}
-
-
- {{ row.name }}
-
-
-
- {{ "shared" | i18n }}
-
-
-
- {{ "attachments" | i18n }}
-
-
- {{ row.subTitle }}
- |
-
-
+
+ {{ "loading" | i18n }}
+
+ } @else {
+
+ @if (!ciphers.length) {
+
+ {{ "noWeakPasswords" | i18n }}
+
+ } @else {
+
+ {{ "weakPasswordsFoundReportDesc" | i18n: (ciphers.length | number) : vaultMsg }}
+
+ @if (showFilterToggle && !isAdminConsoleActive) {
+ @if (canDisplayToggleGroup()) {
+
-
- |
-
-
- {{ row.reportValue.label | i18n }}
-
- |
-
-
-
-
+ @for (status of filterStatus; track status) {
+
+ {{ getName(status) }}
+ {{ getCount(status) }}
+
+ }
+
+ } @else {
+
+ }
+ }
+
+
+ |
+ {{ "name" | i18n }} |
+ @if (!isAdminConsoleActive) {
+
+ {{ "owner" | i18n }}
+ |
+ }
+
+ {{ "weakness" | i18n }}
+ |
+
+
+
+
+ |
+
+ @if (!organization || canManageCipher(row)) {
+ {{ row.name }}
+ } @else {
+ {{ row.name }}
+ }
+ @if (!organization && row.organizationId) {
+
+ {{ "shared" | i18n }}
+ }
+ @if (row.hasAttachments) {
+
+ {{ "attachments" | i18n }}
+ }
+
+ {{ row.subTitle }}
+ |
+ @if (!isAdminConsoleActive) {
+
+ @if (!organization) {
+
+
+ }
+ |
+ }
+
+
+ {{ row.reportValue.label | i18n }}
+
+ |
+
+
+ }
+
+ }
diff --git a/apps/web/src/app/dirt/reports/shared/report-list/report-list.component.html b/apps/web/src/app/dirt/reports/shared/report-list/report-list.component.html
index 2a03bf78dd4..bba57882027 100644
--- a/apps/web/src/app/dirt/reports/shared/report-list/report-list.component.html
+++ b/apps/web/src/app/dirt/reports/shared/report-list/report-list.component.html
@@ -1,13 +1,15 @@
-
+ @for (report of reports; track report) {
+
+ }
diff --git a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/activity/activity-card.component.ts b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/activity/activity-card.component.ts
index e7c54bc81d0..111cf3e4d01 100644
--- a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/activity/activity-card.component.ts
+++ b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/activity/activity-card.component.ts
@@ -1,4 +1,3 @@
-import { CommonModule } from "@angular/common";
import { Component, EventEmitter, Input, Output } from "@angular/core";
import { Router } from "@angular/router";
@@ -10,7 +9,7 @@ import { ButtonModule, ButtonType, LinkModule, TypographyModule } from "@bitward
@Component({
selector: "dirt-activity-card",
templateUrl: "./activity-card.component.html",
- imports: [CommonModule, TypographyModule, JslibModule, LinkModule, ButtonModule],
+ imports: [TypographyModule, JslibModule, LinkModule, ButtonModule],
host: {
class:
"tw-box-border tw-bg-background tw-block tw-text-main tw-border-solid tw-border tw-border-secondary-300 tw-border [&:not(bit-layout_*)]:tw-rounded-lg tw-rounded-lg tw-p-6 tw-min-h-56 tw-overflow-hidden",
diff --git a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/activity/activity-cards/password-change-metric.component.ts b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/activity/activity-cards/password-change-metric.component.ts
index 30e1db7b438..60b53f7405d 100644
--- a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/activity/activity-cards/password-change-metric.component.ts
+++ b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/activity/activity-cards/password-change-metric.component.ts
@@ -1,4 +1,3 @@
-import { CommonModule } from "@angular/common";
import {
ChangeDetectionStrategy,
Component,
@@ -44,7 +43,7 @@ export type PasswordChangeView = (typeof PasswordChangeView)[keyof typeof Passwo
@Component({
changeDetection: ChangeDetectionStrategy.OnPush,
selector: "dirt-password-change-metric",
- imports: [CommonModule, TypographyModule, JslibModule, ProgressModule, ButtonModule],
+ imports: [TypographyModule, JslibModule, ProgressModule, ButtonModule],
templateUrl: "./password-change-metric.component.html",
})
export class PasswordChangeMetricComponent implements OnInit {
diff --git a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/activity/application-review-dialog/assign-tasks-view.component.ts b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/activity/application-review-dialog/assign-tasks-view.component.ts
index 15d927a7714..619858fdffe 100644
--- a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/activity/application-review-dialog/assign-tasks-view.component.ts
+++ b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/activity/application-review-dialog/assign-tasks-view.component.ts
@@ -1,4 +1,3 @@
-import { CommonModule } from "@angular/common";
import { ChangeDetectionStrategy, Component, input } from "@angular/core";
import {
@@ -25,7 +24,6 @@ import { DarkImageSourceDirective } from "@bitwarden/vault";
selector: "dirt-assign-tasks-view",
templateUrl: "./assign-tasks-view.component.html",
imports: [
- CommonModule,
ButtonModule,
TypographyModule,
I18nPipe,
diff --git a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/activity/application-review-dialog/new-applications-dialog.component.ts b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/activity/application-review-dialog/new-applications-dialog.component.ts
index 4de8ecd9cd0..796c0acf220 100644
--- a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/activity/application-review-dialog/new-applications-dialog.component.ts
+++ b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/activity/application-review-dialog/new-applications-dialog.component.ts
@@ -1,4 +1,3 @@
-import { CommonModule } from "@angular/common";
import {
ChangeDetectionStrategy,
Component,
@@ -79,7 +78,6 @@ export type NewApplicationsDialogResultType =
selector: "dirt-new-applications-dialog",
templateUrl: "./new-applications-dialog.component.html",
imports: [
- CommonModule,
ButtonModule,
DialogModule,
TypographyModule,
diff --git a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/empty-state-card.component.html b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/empty-state-card.component.html
index b1eda08481a..59aa680fa4e 100644
--- a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/empty-state-card.component.html
+++ b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/empty-state-card.component.html
@@ -6,12 +6,11 @@
{{ title() }}
-
- {{ description() }}
-
+ @if (description()) {
+
+ {{ description() }}
+
+ }
@if (benefits().length > 0) {
@for (benefit of benefits(); track $index) {
@@ -38,69 +37,74 @@
}
-
-
-
+ @if (buttonText() && buttonAction()) {
+
+
+
+ }
-
-
- @if (videoSrc()) {
-
- } @else if (icon()) {
-
-
+
+ @if (videoSrc()) {
+
- }
+ >
+ } @else if (icon()) {
+
+
+
+ }
+
-
-
-
-
- @if (videoSrc()) {
-
- } @else if (icon()) {
-
-
+
+ @if (videoSrc()) {
+
- }
+ >
+ } @else if (icon()) {
+
+
+
+ }
+
-
+ }
diff --git a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/empty-state-card.component.ts b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/empty-state-card.component.ts
index c28de5e9952..a9ad86dc67c 100644
--- a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/empty-state-card.component.ts
+++ b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/empty-state-card.component.ts
@@ -1,4 +1,3 @@
-import { CommonModule } from "@angular/common";
import { ChangeDetectionStrategy, Component, input, isDevMode, OnInit } from "@angular/core";
import { BitSvg } from "@bitwarden/assets/svg";
@@ -7,7 +6,7 @@ import { ButtonModule, SvgModule } from "@bitwarden/components";
@Component({
selector: "empty-state-card",
templateUrl: "./empty-state-card.component.html",
- imports: [CommonModule, SvgModule, ButtonModule],
+ imports: [SvgModule, ButtonModule],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class EmptyStateCardComponent implements OnInit {
diff --git a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/risk-insights.component.html b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/risk-insights.component.html
index dfbd49d95f7..2a783e6dcc2 100644
--- a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/risk-insights.component.html
+++ b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/risk-insights.component.html
@@ -44,10 +44,11 @@
-
0">
- {{ "reviewAtRiskPasswords" | i18n }}
-
- @let isRunningReport = dataService.isGeneratingReport$ | async;
+ @if (appsCount > 0) {
+
+ {{ "reviewAtRiskPasswords" | i18n }}
+
+ }
@@ -62,7 +63,6 @@
}
-
-
-
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 0494f77bd46..0a72c76a550 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
@@ -12,28 +12,32 @@
{{ "totalMembers" | i18n }} |
-
-
-
- |
-
-
- |
+ @if (showRowCheckBox) {
+
+ @if (!row.isMarkedAsCritical) {
+
+ }
+ @if (row.isMarkedAsCritical) {
+
+ }
+ |
+ }
+ @if (!showRowCheckBox) {
+
+ @if (row.isMarkedAsCritical) {
+
+ }
+ |
+ }
-
+ @if (row.iconCipher) {
+
+ }
|
{{ row.memberCount }}
|
-
-
-
-
-
-
- |
+ @if (showRowMenuForCriticalApps) {
+
+
+
+
+
+ |
+ }
diff --git a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/shared/report-loading.component.ts b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/shared/report-loading.component.ts
index f3cb89dff55..45b28dae470 100644
--- a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/shared/report-loading.component.ts
+++ b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/shared/report-loading.component.ts
@@ -1,4 +1,3 @@
-import { CommonModule } from "@angular/common";
import { Component, input } from "@angular/core";
import { JslibModule } from "@bitwarden/angular/jslib.module";
@@ -19,7 +18,7 @@ const ProgressStepConfig = Object.freeze({
// eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection
@Component({
selector: "dirt-report-loading",
- imports: [CommonModule, JslibModule, ProgressModule],
+ imports: [JslibModule, ProgressModule],
templateUrl: "./report-loading.component.html",
})
export class ReportLoadingComponent {
diff --git a/bitwarden_license/bit-web/src/app/dirt/organization-integrations/integration-grid/integration-grid.component.html b/bitwarden_license/bit-web/src/app/dirt/organization-integrations/integration-grid/integration-grid.component.html
index 9e14023d21b..8127c6a0343 100644
--- a/bitwarden_license/bit-web/src/app/dirt/organization-integrations/integration-grid/integration-grid.component.html
+++ b/bitwarden_license/bit-web/src/app/dirt/organization-integrations/integration-grid/integration-grid.component.html
@@ -1,21 +1,22 @@
- -
-
-
+ @for (integration of integrations; track integration) {
+ -
+
+
+ }
diff --git a/bitwarden_license/bit-web/src/app/dirt/organization-integrations/integrations.component.html b/bitwarden_license/bit-web/src/app/dirt/organization-integrations/integrations.component.html
index a35df3677bb..14f20a0b71c 100644
--- a/bitwarden_license/bit-web/src/app/dirt/organization-integrations/integrations.component.html
+++ b/bitwarden_license/bit-web/src/app/dirt/organization-integrations/integrations.component.html
@@ -24,28 +24,32 @@
@if (organization?.useScim || organization?.useDirectory) {
-
-
- {{ "scimIntegration" | i18n }}
-
-
- {{ "scimIntegrationDescStart" | i18n }}
- {{ "scimIntegration" | i18n }}
- {{ "scimIntegrationDescEnd" | i18n }}
-
-
-
-
-
- {{ "bwdc" | i18n }}
-
- {{ "bwdcDesc" | i18n }}
-
-
+ @if (organization?.useScim) {
+
+
+ {{ "scimIntegration" | i18n }}
+
+
+ {{ "scimIntegrationDescStart" | i18n }}
+ {{ "scimIntegration" | i18n }}
+ {{ "scimIntegrationDescEnd" | i18n }}
+
+
+
+ }
+ @if (organization?.useDirectory) {
+
+
+ {{ "bwdc" | i18n }}
+
+ {{ "bwdcDesc" | i18n }}
+
+
+ }
}
diff --git a/bitwarden_license/bit-web/src/app/dirt/reports/member-access-report/member-access-report.component.html b/bitwarden_license/bit-web/src/app/dirt/reports/member-access-report/member-access-report.component.html
index 0200e206327..440e955a226 100644
--- a/bitwarden_license/bit-web/src/app/dirt/reports/member-access-report/member-access-report.component.html
+++ b/bitwarden_license/bit-web/src/app/dirt/reports/member-access-report/member-access-report.component.html
@@ -1,21 +1,17 @@
-
+ @let isLoading = isLoading$ | async;
-
+ @if (!isLoading) {
+
+
+ }
@@ -24,7 +20,7 @@
-
+@if (isLoading) {
{{ "loading" | i18n }}
-
-
-
- {{ "members" | i18n }} |
- {{ "groups" | i18n }} |
- {{ "collections" | i18n }} |
- {{ "items" | i18n }} |
-
-
-
-
-
-
-
-
-
- {{ row.email }}
+} @else {
+
+
+ {{ "members" | i18n }} |
+ {{ "groups" | i18n }} |
+
+ {{ "collections" | i18n }}
+ |
+ {{ "items" | i18n }} |
+
+
+
+
+
+
+
+
+ {{ row.email }}
+
-
- |
- {{ row.groupsCount }} |
- {{ row.collectionsCount }} |
- {{ row.itemsCount }} |
-
-
+ |
+ {{ row.groupsCount }} |
+ {{ row.collectionsCount }} |
+ {{ row.itemsCount }} |
+
+
+}