mirror of
https://github.com/bitwarden/browser
synced 2025-12-17 16:53:34 +00:00
* fix routes. update copy and headers
* Patch build process
* Revert "Patch build process"
This reverts commit 4d3716d375.
---------
Co-authored-by: Matt Bishop <mbishop@bitwarden.com>
Co-authored-by: Tom <144813356+ttalty@users.noreply.github.com>
127 lines
4.4 KiB
TypeScript
127 lines
4.4 KiB
TypeScript
import { Component, DestroyRef, inject, OnInit } from "@angular/core";
|
|
import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
|
|
import { FormControl } from "@angular/forms";
|
|
import { ActivatedRoute } from "@angular/router";
|
|
import { debounceTime, firstValueFrom, map } from "rxjs";
|
|
|
|
import { AuditService } from "@bitwarden/common/abstractions/audit.service";
|
|
import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
|
|
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
|
|
import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
|
|
import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
|
|
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
|
|
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 {
|
|
Icons,
|
|
NoItemsModule,
|
|
SearchModule,
|
|
TableDataSource,
|
|
ToastService,
|
|
} from "@bitwarden/components";
|
|
import { CardComponent } from "@bitwarden/tools-card";
|
|
|
|
import { HeaderModule } from "../../layouts/header/header.module";
|
|
import { SharedModule } from "../../shared";
|
|
import { PipesModule } from "../../vault/individual-vault/pipes/pipes.module";
|
|
|
|
import { applicationTableMockData } from "./application-table.mock";
|
|
|
|
@Component({
|
|
standalone: true,
|
|
selector: "tools-all-applications",
|
|
templateUrl: "./all-applications.component.html",
|
|
imports: [HeaderModule, CardComponent, SearchModule, PipesModule, NoItemsModule, SharedModule],
|
|
})
|
|
export class AllApplicationsComponent implements OnInit {
|
|
protected dataSource = new TableDataSource<any>();
|
|
protected selectedIds: Set<number> = new Set<number>();
|
|
protected searchControl = new FormControl("", { nonNullable: true });
|
|
private destroyRef = inject(DestroyRef);
|
|
protected loading = false;
|
|
protected organization: Organization;
|
|
noItemsIcon = Icons.Security;
|
|
protected markingAsCritical = false;
|
|
isCritialAppsFeatureEnabled = false;
|
|
|
|
// MOCK DATA
|
|
protected mockData = applicationTableMockData;
|
|
protected mockAtRiskMembersCount = 0;
|
|
protected mockAtRiskAppsCount = 0;
|
|
protected mockTotalMembersCount = 0;
|
|
protected mockTotalAppsCount = 0;
|
|
|
|
async ngOnInit() {
|
|
this.activatedRoute.paramMap
|
|
.pipe(
|
|
takeUntilDestroyed(this.destroyRef),
|
|
map(async (params) => {
|
|
const organizationId = params.get("organizationId");
|
|
this.organization = await firstValueFrom(this.organizationService.get$(organizationId));
|
|
// TODO: use organizationId to fetch data
|
|
}),
|
|
)
|
|
.subscribe();
|
|
|
|
this.isCritialAppsFeatureEnabled = await this.configService.getFeatureFlag(
|
|
FeatureFlag.CriticalApps,
|
|
);
|
|
}
|
|
|
|
constructor(
|
|
protected cipherService: CipherService,
|
|
protected passwordStrengthService: PasswordStrengthServiceAbstraction,
|
|
protected auditService: AuditService,
|
|
protected i18nService: I18nService,
|
|
protected activatedRoute: ActivatedRoute,
|
|
protected toastService: ToastService,
|
|
protected organizationService: OrganizationService,
|
|
protected configService: ConfigService,
|
|
) {
|
|
this.dataSource.data = applicationTableMockData;
|
|
this.searchControl.valueChanges
|
|
.pipe(debounceTime(200), takeUntilDestroyed())
|
|
.subscribe((v) => (this.dataSource.filter = v));
|
|
}
|
|
|
|
goToCreateNewLoginItem = async () => {
|
|
// TODO: implement
|
|
this.toastService.showToast({
|
|
variant: "warning",
|
|
title: null,
|
|
message: "Not yet implemented",
|
|
});
|
|
};
|
|
|
|
markAppsAsCritical = async () => {
|
|
// TODO: Send to API once implemented
|
|
this.markingAsCritical = true;
|
|
return new Promise((resolve) => {
|
|
setTimeout(() => {
|
|
this.selectedIds.clear();
|
|
this.toastService.showToast({
|
|
variant: "success",
|
|
title: null,
|
|
message: this.i18nService.t("appsMarkedAsCritical"),
|
|
});
|
|
resolve(true);
|
|
this.markingAsCritical = false;
|
|
}, 1000);
|
|
});
|
|
};
|
|
|
|
trackByFunction(_: number, item: CipherView) {
|
|
return item.id;
|
|
}
|
|
|
|
onCheckboxChange(id: number, event: Event) {
|
|
const isChecked = (event.target as HTMLInputElement).checked;
|
|
if (isChecked) {
|
|
this.selectedIds.add(id);
|
|
} else {
|
|
this.selectedIds.delete(id);
|
|
}
|
|
}
|
|
}
|