1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-16 08:13:42 +00:00
Files
browser/libs/vault/src/cipher-view/view-identity-sections/view-identity-sections.component.ts
Nick Krantz 84ee01caee [PM-7103] Identity View (#10240)
* make headings of v2 view component lowercase

* initial add of view identity sections

* adding identification fields

* add contact information section

* add copy ability to all identity fields

* add visibility toggle for passport and ssn

* add testids for all identity fields

* add test-ids to visibility toggles

* refactor visibility methods to be called in `ngOnInit` rather than on each render

* replace `disabled` with `readonly`
2024-07-30 10:55:09 -05:00

73 lines
2.3 KiB
TypeScript

import { NgIf } from "@angular/common";
import { Component, Input, OnInit } from "@angular/core";
import { JslibModule } from "@bitwarden/angular/jslib.module";
import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view";
import {
CardComponent,
FormFieldModule,
IconButtonModule,
SectionComponent,
SectionHeaderComponent,
TypographyModule,
} from "@bitwarden/components";
@Component({
standalone: true,
selector: "app-view-identity-sections",
templateUrl: "./view-identity-sections.component.html",
imports: [
NgIf,
JslibModule,
CardComponent,
SectionComponent,
SectionHeaderComponent,
TypographyModule,
FormFieldModule,
IconButtonModule,
],
})
export class ViewIdentitySectionsComponent implements OnInit {
@Input() cipher: CipherView;
showPersonalDetails: boolean;
showIdentificationDetails: boolean;
showContactDetails: boolean;
ngOnInit(): void {
this.showPersonalDetails = this.hasPersonalDetails();
this.showIdentificationDetails = this.hasIdentificationDetails();
this.showContactDetails = this.hasContactDetails();
}
/** Returns all populated address fields */
get addressFields(): string {
const { address1, address2, address3, fullAddressPart2, country } = this.cipher.identity;
return [address1, address2, address3, fullAddressPart2, country].filter(Boolean).join("\n");
}
/** Returns the number of "rows" that should be assigned to the address textarea */
get addressRows(): number {
return this.addressFields.split("\n").length;
}
/** Returns true when any of the "personal detail" attributes are populated */
private hasPersonalDetails(): boolean {
const { username, company, fullName } = this.cipher.identity;
return Boolean(fullName || username || company);
}
/** Returns true when any of the "identification detail" attributes are populated */
private hasIdentificationDetails(): boolean {
const { ssn, passportNumber, licenseNumber } = this.cipher.identity;
return Boolean(ssn || passportNumber || licenseNumber);
}
/** Returns true when any of the "contact detail" attributes are populated */
private hasContactDetails(): boolean {
const { email, phone } = this.cipher.identity;
return Boolean(email || phone || this.addressFields);
}
}