mirror of
https://github.com/bitwarden/browser.git
synced 2024-11-13 10:24:20 +01:00
Count and display invalid fields in toast. (#10249)
This commit is contained in:
parent
3b668deaac
commit
6b8f60792e
@ -2949,6 +2949,18 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"singleFieldNeedsAttention": {
|
||||||
|
"message": "1 field needs your attention."
|
||||||
|
},
|
||||||
|
"multipleFieldsNeedAttention": {
|
||||||
|
"message": "$COUNT$ fields need your attention.",
|
||||||
|
"placeholders": {
|
||||||
|
"count": {
|
||||||
|
"content": "$1",
|
||||||
|
"example": "2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"selectPlaceholder": {
|
"selectPlaceholder": {
|
||||||
"message": "-- Select --"
|
"message": "-- Select --"
|
||||||
},
|
},
|
||||||
|
@ -13,7 +13,7 @@ import {
|
|||||||
ViewChild,
|
ViewChild,
|
||||||
} from "@angular/core";
|
} from "@angular/core";
|
||||||
import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
|
import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
|
||||||
import { FormBuilder, ReactiveFormsModule } from "@angular/forms";
|
import { FormBuilder, FormGroup, ReactiveFormsModule } from "@angular/forms";
|
||||||
|
|
||||||
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
|
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
|
||||||
import { CipherType, SecureNoteType } from "@bitwarden/common/vault/enums";
|
import { CipherType, SecureNoteType } from "@bitwarden/common/vault/enums";
|
||||||
@ -213,9 +213,35 @@ export class CipherFormComponent implements AfterViewInit, OnInit, OnChanges, Ci
|
|||||||
private i18nService: I18nService,
|
private i18nService: I18nService,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Counts the number of invalid fields in a form group.
|
||||||
|
* @param formGroup - The form group to count the invalid fields in.
|
||||||
|
* @returns The number of invalid fields in the form group.
|
||||||
|
*/
|
||||||
|
private countInvalidFields(formGroup: FormGroup): number {
|
||||||
|
return Object.values(formGroup.controls).reduce((count, control) => {
|
||||||
|
if (control instanceof FormGroup) {
|
||||||
|
return count + this.countInvalidFields(control);
|
||||||
|
}
|
||||||
|
return count + (control.invalid ? 1 : 0);
|
||||||
|
}, 0);
|
||||||
|
}
|
||||||
|
|
||||||
submit = async () => {
|
submit = async () => {
|
||||||
if (this.cipherForm.invalid) {
|
if (this.cipherForm.invalid) {
|
||||||
this.cipherForm.markAllAsTouched();
|
this.cipherForm.markAllAsTouched();
|
||||||
|
|
||||||
|
const invalidFieldsCount = this.countInvalidFields(this.cipherForm);
|
||||||
|
if (invalidFieldsCount > 0) {
|
||||||
|
this.toastService.showToast({
|
||||||
|
variant: "error",
|
||||||
|
title: null,
|
||||||
|
message:
|
||||||
|
invalidFieldsCount === 1
|
||||||
|
? this.i18nService.t("singleFieldNeedsAttention")
|
||||||
|
: this.i18nService.t("multipleFieldsNeedAttention", invalidFieldsCount),
|
||||||
|
});
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user