diff --git a/apps/web/src/app/tools/access-intelligence/no-priority-apps.component.html b/apps/web/src/app/tools/access-intelligence/no-priority-apps.component.html new file mode 100644 index 0000000000..9c3b4f4891 --- /dev/null +++ b/apps/web/src/app/tools/access-intelligence/no-priority-apps.component.html @@ -0,0 +1,15 @@ + + +

+ {{ "noPriorityApplicationsTitle" | i18n }} +

+
+ +

+ {{ "noPriorityApplicationsDescription" | i18n }} +

+
+ + + +
diff --git a/apps/web/src/app/tools/access-intelligence/no-priority-apps.component.ts b/apps/web/src/app/tools/access-intelligence/no-priority-apps.component.ts new file mode 100644 index 0000000000..e4e54ca2f1 --- /dev/null +++ b/apps/web/src/app/tools/access-intelligence/no-priority-apps.component.ts @@ -0,0 +1,15 @@ +import { CommonModule } from "@angular/common"; +import { Component } from "@angular/core"; + +import { JslibModule } from "@bitwarden/angular/jslib.module"; +import { ButtonModule, NoItemsModule, Icons } from "@bitwarden/components"; + +@Component({ + standalone: true, + selector: "tools-no-priority-apps", + templateUrl: "no-priority-apps.component.html", + imports: [ButtonModule, CommonModule, JslibModule, NoItemsModule], +}) +export class NoPriorityAppsComponent { + noItemsIcon = Icons.NoResults; +} diff --git a/apps/web/src/app/tools/access-intelligence/password-health-members.component.html b/apps/web/src/app/tools/access-intelligence/password-health-members.component.html index f902011110..885c21f0a2 100644 --- a/apps/web/src/app/tools/access-intelligence/password-health-members.component.html +++ b/apps/web/src/app/tools/access-intelligence/password-health-members.component.html @@ -8,7 +8,33 @@ > {{ "loading" | i18n }} -
+
+ +
+
+
+ + + + +
+
+ + +
diff --git a/apps/web/src/app/tools/access-intelligence/password-health-members.component.ts b/apps/web/src/app/tools/access-intelligence/password-health-members.component.ts index 30c9ad8dba..17b2456406 100644 --- a/apps/web/src/app/tools/access-intelligence/password-health-members.component.ts +++ b/apps/web/src/app/tools/access-intelligence/password-health-members.component.ts @@ -1,10 +1,9 @@ -import { CommonModule } from "@angular/common"; import { Component, DestroyRef, inject, OnInit } from "@angular/core"; import { takeUntilDestroyed } from "@angular/core/rxjs-interop"; +import { FormControl, FormsModule } from "@angular/forms"; import { ActivatedRoute } from "@angular/router"; -import { map } from "rxjs"; +import { debounceTime, map } from "rxjs"; -import { JslibModule } from "@bitwarden/angular/jslib.module"; // eslint-disable-next-line no-restricted-imports import { PasswordHealthService } from "@bitwarden/bit-common/tools/reports/access-intelligence"; import { AuditService } from "@bitwarden/common/abstractions/audit.service"; @@ -12,33 +11,31 @@ import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.servic import { PasswordStrengthServiceAbstraction } from "@bitwarden/common/tools/password-strength"; import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; -import { - BadgeModule, - BadgeVariant, - ContainerComponent, - TableDataSource, - TableModule, -} from "@bitwarden/components"; +import { BadgeVariant, SearchModule, TableDataSource, TableModule } from "@bitwarden/components"; +import { CardComponent } from "@bitwarden/tools-card"; -// eslint-disable-next-line no-restricted-imports import { HeaderModule } from "../../layouts/header/header.module"; // eslint-disable-next-line no-restricted-imports +import { SharedModule } from "../../shared"; import { OrganizationBadgeModule } from "../../vault/individual-vault/organization-badge/organization-badge.module"; // eslint-disable-next-line no-restricted-imports import { PipesModule } from "../../vault/individual-vault/pipes/pipes.module"; +import { NoPriorityAppsComponent } from "./no-priority-apps.component"; + @Component({ standalone: true, selector: "tools-password-health-members", templateUrl: "password-health-members.component.html", imports: [ - BadgeModule, + CardComponent, OrganizationBadgeModule, - CommonModule, - ContainerComponent, PipesModule, - JslibModule, HeaderModule, + SearchModule, + FormsModule, + NoPriorityAppsComponent, + SharedModule, TableModule, ], providers: [PasswordHealthService], @@ -56,6 +53,8 @@ export class PasswordHealthMembersComponent implements OnInit { loading = true; + protected searchControl = new FormControl("", { nonNullable: true }); + private destroyRef = inject(DestroyRef); constructor( @@ -64,7 +63,11 @@ export class PasswordHealthMembersComponent implements OnInit { protected auditService: AuditService, protected i18nService: I18nService, protected activatedRoute: ActivatedRoute, - ) {} + ) { + this.searchControl.valueChanges + .pipe(debounceTime(200), takeUntilDestroyed()) + .subscribe((v) => (this.dataSource.filter = v)); + } ngOnInit() { this.activatedRoute.paramMap @@ -89,6 +92,7 @@ export class PasswordHealthMembersComponent implements OnInit { await passwordHealthService.generateReport(); this.dataSource.data = passwordHealthService.reportCiphers; + this.exposedPasswordMap = passwordHealthService.exposedPasswordMap; this.passwordStrengthMap = passwordHealthService.passwordStrengthMap; this.passwordUseMap = passwordHealthService.passwordUseMap; diff --git a/apps/web/src/app/tools/access-intelligence/password-health.component.html b/apps/web/src/app/tools/access-intelligence/password-health.component.html index 3245970644..5b1fe4610d 100644 --- a/apps/web/src/app/tools/access-intelligence/password-health.component.html +++ b/apps/web/src/app/tools/access-intelligence/password-health.component.html @@ -8,7 +8,7 @@ > {{ "loading" | i18n }}
-
+
diff --git a/apps/web/src/locales/en/messages.json b/apps/web/src/locales/en/messages.json index d1c5bd97f3..9ea33149de 100644 --- a/apps/web/src/locales/en/messages.json +++ b/apps/web/src/locales/en/messages.json @@ -53,6 +53,18 @@ } } }, + "noPriorityApplicationsTitle": { + "message": "You haven’t marked any applications as a priority" + }, + "noPriorityApplicationsDescription": { + "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + }, + "markPriorityApps": { + "message": "Mark priority apps" + }, + "markAppAsCritical": { + "message": "Mark app as critical" + }, "application": { "message": "Application" }, diff --git a/libs/tools/card/src/card.component.ts b/libs/tools/card/src/card.component.ts index 9305246c58..85db7eaa7b 100644 --- a/libs/tools/card/src/card.component.ts +++ b/libs/tools/card/src/card.component.ts @@ -11,7 +11,7 @@ import { TypographyModule } from "@bitwarden/components"; imports: [CommonModule, TypographyModule, JslibModule], 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-p-6", + "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", }, }) export class CardComponent {