diff --git a/bitwarden_license/bit-web/src/app/tools/access-intelligence/all-applications.component.html b/bitwarden_license/bit-web/src/app/tools/access-intelligence/all-applications.component.html index 4ef5453478e..c9d0ba11eee 100644 --- a/bitwarden_license/bit-web/src/app/tools/access-intelligence/all-applications.component.html +++ b/bitwarden_license/bit-web/src/app/tools/access-intelligence/all-applications.component.html @@ -69,55 +69,15 @@ {{ "markAppAsCritical" | i18n }} - - - - - {{ "application" | i18n }} - {{ "atRiskPasswords" | i18n }} - {{ "totalPasswords" | i18n }} - {{ "atRiskMembers" | i18n }} - {{ "totalMembers" | i18n }} - - - - - - - - - - {{ r.applicationName }} - - - - {{ r.atRiskPasswordCount }} - - - - - {{ r.passwordCount }} - - - - - {{ r.atRiskMemberCount }} - - - - {{ r.memberCount }} - - - - + + diff --git a/bitwarden_license/bit-web/src/app/tools/access-intelligence/all-applications.component.ts b/bitwarden_license/bit-web/src/app/tools/access-intelligence/all-applications.component.ts index 5c45733cabb..ee51a134e31 100644 --- a/bitwarden_license/bit-web/src/app/tools/access-intelligence/all-applications.component.ts +++ b/bitwarden_license/bit-web/src/app/tools/access-intelligence/all-applications.component.ts @@ -37,6 +37,7 @@ import { HeaderModule } from "@bitwarden/web-vault/app/layouts/header/header.mod import { SharedModule } from "@bitwarden/web-vault/app/shared"; import { PipesModule } from "@bitwarden/web-vault/app/vault/individual-vault/pipes/pipes.module"; +import { AppTableRowScrollableComponent } from "./app-table-row-scrollable.component"; import { ApplicationsLoadingComponent } from "./risk-insights-loading.component"; @Component({ @@ -51,6 +52,7 @@ import { ApplicationsLoadingComponent } from "./risk-insights-loading.component" PipesModule, NoItemsModule, SharedModule, + AppTableRowScrollableComponent, ], }) export class AllApplicationsComponent implements OnInit { @@ -190,14 +192,18 @@ export class AllApplicationsComponent implements OnInit { this.dataService.setDrawerForOrgAtRiskApps(data, invokerId); }; - onCheckboxChange(applicationName: string, event: Event) { + onCheckboxChange = (applicationName: string, event: Event) => { const isChecked = (event.target as HTMLInputElement).checked; if (isChecked) { this.selectedUrls.add(applicationName); } else { this.selectedUrls.delete(applicationName); } - } + }; getSelectedUrls = () => Array.from(this.selectedUrls); + + isDrawerOpenForTableRow = (applicationName: string): boolean => { + return this.dataService.drawerInvokerId === applicationName; + }; } diff --git a/bitwarden_license/bit-web/src/app/tools/access-intelligence/app-table-row-scrollable.component.html b/bitwarden_license/bit-web/src/app/tools/access-intelligence/app-table-row-scrollable.component.html new file mode 100644 index 00000000000..e89acf1ac66 --- /dev/null +++ b/bitwarden_license/bit-web/src/app/tools/access-intelligence/app-table-row-scrollable.component.html @@ -0,0 +1,98 @@ + + + + + {{ "application" | i18n }} + {{ "atRiskPasswords" | i18n }} + {{ "totalPasswords" | i18n }} + {{ "atRiskMembers" | i18n }} + {{ "totalMembers" | i18n }} + + + + + + + + + + + {{ row.applicationName }} + + + + {{ row.atRiskPasswordCount }} + + + + + {{ row.passwordCount }} + + + + + {{ row.atRiskMemberCount }} + + + + {{ row.memberCount }} + + + + + + + {{ "unmarkAsCriticalApp" | i18n }} + + + + + + diff --git a/bitwarden_license/bit-web/src/app/tools/access-intelligence/app-table-row-scrollable.component.ts b/bitwarden_license/bit-web/src/app/tools/access-intelligence/app-table-row-scrollable.component.ts new file mode 100644 index 00000000000..b0e99580919 --- /dev/null +++ b/bitwarden_license/bit-web/src/app/tools/access-intelligence/app-table-row-scrollable.component.ts @@ -0,0 +1,26 @@ +import { CommonModule } from "@angular/common"; +import { Component, Input } from "@angular/core"; + +import { JslibModule } from "@bitwarden/angular/jslib.module"; +import { ApplicationHealthReportDetailWithCriticalFlag } from "@bitwarden/bit-common/tools/reports/risk-insights/models/password-health"; +import { MenuModule, TableDataSource, TableModule } from "@bitwarden/components"; +import { SharedModule } from "@bitwarden/web-vault/app/shared"; +import { PipesModule } from "@bitwarden/web-vault/app/vault/individual-vault/pipes/pipes.module"; + +@Component({ + selector: "app-table-row-scrollable", + standalone: true, + imports: [CommonModule, JslibModule, TableModule, SharedModule, PipesModule, MenuModule], + templateUrl: "./app-table-row-scrollable.component.html", +}) +export class AppTableRowScrollableComponent { + @Input() dataSource!: TableDataSource; + @Input() showRowMenuForCriticalApps: boolean = false; + @Input() showRowCheckBox: boolean = false; + @Input() selectedUrls: Set = new Set(); + @Input() isCriticalAppsFeatureEnabled: boolean = false; + @Input() isDrawerIsOpenForThisRecord!: (applicationName: string) => boolean; + @Input() showAppAtRiskMembers!: (applicationName: string) => void; + @Input() unmarkAsCriticalApp!: (applicationName: string) => void; + @Input() checkboxChange!: (applicationName: string, $event: Event) => void; +} diff --git a/bitwarden_license/bit-web/src/app/tools/access-intelligence/critical-applications.component.html b/bitwarden_license/bit-web/src/app/tools/access-intelligence/critical-applications.component.html index 3eb7831c7f8..73b0af312b6 100644 --- a/bitwarden_license/bit-web/src/app/tools/access-intelligence/critical-applications.component.html +++ b/bitwarden_license/bit-web/src/app/tools/access-intelligence/critical-applications.component.html @@ -73,63 +73,14 @@ [formControl]="searchControl" > - - - - - {{ "application" | i18n }} - {{ "atRiskPasswords" | i18n }} - {{ "totalPasswords" | i18n }} - {{ "atRiskMembers" | i18n }} - {{ "totalMembers" | i18n }} - - - - - - - - - {{ r.applicationName }} - - - - {{ r.atRiskPasswordCount }} - - - - - {{ r.passwordCount }} - - - - - {{ r.atRiskMemberCount }} - - - - {{ r.memberCount }} - - - - - - {{ "unmarkAsCriticalApp" | i18n }} - - - - - - + diff --git a/bitwarden_license/bit-web/src/app/tools/access-intelligence/critical-applications.component.ts b/bitwarden_license/bit-web/src/app/tools/access-intelligence/critical-applications.component.ts index 42c1c62a437..af5c9a90015 100644 --- a/bitwarden_license/bit-web/src/app/tools/access-intelligence/critical-applications.component.ts +++ b/bitwarden_license/bit-web/src/app/tools/access-intelligence/critical-applications.component.ts @@ -35,13 +35,22 @@ import { PipesModule } from "@bitwarden/web-vault/app/vault/individual-vault/pip import { CreateTasksRequest } from "../../vault/services/abstractions/admin-task.abstraction"; import { DefaultAdminTaskService } from "../../vault/services/default-admin-task.service"; +import { AppTableRowScrollableComponent } from "./app-table-row-scrollable.component"; import { RiskInsightsTabType } from "./risk-insights.component"; @Component({ standalone: true, selector: "tools-critical-applications", templateUrl: "./critical-applications.component.html", - imports: [CardComponent, HeaderModule, SearchModule, NoItemsModule, PipesModule, SharedModule], + imports: [ + CardComponent, + HeaderModule, + SearchModule, + NoItemsModule, + PipesModule, + SharedModule, + AppTableRowScrollableComponent, + ], providers: [DefaultAdminTaskService], }) export class CriticalApplicationsComponent implements OnInit { @@ -181,4 +190,7 @@ export class CriticalApplicationsComponent implements OnInit { trackByFunction(_: number, item: ApplicationHealthReportDetailWithCriticalFlag) { return item.applicationName; } + isDrawerOpenForTableRow = (applicationName: string) => { + return this.dataService.drawerInvokerId === applicationName; + }; } diff --git a/bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health-members-uri.component.html b/bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health-members-uri.component.html index bdccc523e76..936d92d8701 100644 --- a/bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health-members-uri.component.html +++ b/bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health-members-uri.component.html @@ -9,47 +9,43 @@ {{ "loading" | i18n }} - + - - {{ "application" | i18n }} - {{ "weakness" | i18n }} - {{ "timesReused" | i18n }} - {{ "timesExposed" | i18n }} - {{ "totalMembers" | i18n }} - + {{ "application" | i18n }} + {{ "weakness" | i18n }} + {{ "timesReused" | i18n }} + {{ "timesExposed" | i18n }} + {{ "totalMembers" | i18n }} - - - - - {{ r.hostURI }} - - - - - {{ passwordStrengthMap.get(r.id)[0] | i18n }} - - - - - {{ "reusedXTimes" | i18n: passwordUseMap.get(r.login.password) }} - - - - - {{ "exposedXTimes" | i18n: exposedPasswordMap.get(r.id) }} - - - - {{ totalMembersMap.get(r.id) || 0 }} - - + + + + {{ row.hostURI }} + + + + + {{ passwordStrengthMap.get(row.id)[0] | i18n }} + + + + + {{ "reusedXTimes" | i18n: passwordUseMap.get(row.login.password) }} + + + + + {{ "exposedXTimes" | i18n: exposedPasswordMap.get(row.id) }} + + + + {{ totalMembersMap.get(row.id) || 0 }} + - + diff --git a/bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health-members.component.html b/bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health-members.component.html index 7f9b37f2a82..5c980f75a81 100644 --- a/bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health-members.component.html +++ b/bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health-members.component.html @@ -8,57 +8,53 @@ {{ "loading" | i18n }} - + - - - {{ "name" | i18n }} - {{ "weakness" | i18n }} - {{ "timesReused" | i18n }} - {{ "timesExposed" | i18n }} - {{ "totalMembers" | i18n }} - + + {{ "name" | i18n }} + {{ "weakness" | i18n }} + {{ "timesReused" | i18n }} + {{ "timesExposed" | i18n }} + {{ "totalMembers" | i18n }} - - - - - - - - {{ r.name }} - - - {{ r.subTitle }} - - - - {{ passwordStrengthMap.get(r.id)[0] | i18n }} - - - - - {{ "reusedXTimes" | i18n: passwordUseMap.get(r.login.password) }} - - - - - {{ "exposedXTimes" | i18n: exposedPasswordMap.get(r.id) }} - - - - {{ totalMembersMap.get(r.id) || 0 }} - - + + + + + + + {{ row.name }} + + + {{ row.subTitle }} + + + + {{ passwordStrengthMap.get(row.id)[0] | i18n }} + + + + + {{ "reusedXTimes" | i18n: passwordUseMap.get(row.login.password) }} + + + + + {{ "exposedXTimes" | i18n: exposedPasswordMap.get(row.id) }} + + + + {{ totalMembersMap.get(row.id) || 0 }} + - + diff --git a/bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health.component.html b/bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health.component.html index aeaa9f33197..b798a75ab3a 100644 --- a/bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health.component.html +++ b/bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health.component.html @@ -9,49 +9,45 @@ {{ "loading" | i18n }} - + - - - {{ "name" | i18n }} - {{ "weakness" | i18n }} - {{ "timesReused" | i18n }} - {{ "timesExposed" | i18n }} - + + {{ "name" | i18n }} + {{ "weakness" | i18n }} + {{ "timesReused" | i18n }} + {{ "timesExposed" | i18n }} - - - - - - - - {{ r.name }} - - - {{ r.subTitle }} - - - - {{ r.weakPasswordDetail?.detailValue.label | i18n }} - - - - - {{ "reusedXTimes" | i18n: passwordUseMap.get(r.login.password) }} - - - - - {{ "exposedXTimes" | i18n: r.exposedPasswordDetail?.exposedXTimes }} - - - + + + + + + + {{ row.name }} + + + {{ row.subTitle }} + + + + {{ row.weakPasswordDetail?.detailValue.label | i18n }} + + + + + {{ "reusedXTimes" | i18n: passwordUseMap.get(row.login.password) }} + + + + + {{ "exposedXTimes" | i18n: row.exposedPasswordDetail?.exposedXTimes }} + + - +