mirror of
https://github.com/bitwarden/browser
synced 2025-12-16 16:23:44 +00:00
[PM-15847] libs/components strict migration (#15738)
This PR migrates `libs/components` to use strict TypeScript. - Remove `@ts-strict-ignore` from each file in `libs/components` and resolved any new compilation errors - Converted ViewChild and ContentChild decorators to use the new signal-based queries using the [Angular signal queries migration](https://angular.dev/reference/migrations/signal-queries) - Made view/content children `required` where appropriate, eliminating the need for additional null checking. This helped simplify the strict migration. --- Co-authored-by: Vicki League <vleague@bitwarden.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
@if (label) {
|
||||
@if (label()) {
|
||||
<fieldset>
|
||||
<legend class="tw-mb-1 tw-block tw-text-sm tw-font-semibold tw-text-main">
|
||||
<ng-content select="bit-label"></ng-content>
|
||||
@@ -10,7 +10,7 @@
|
||||
</fieldset>
|
||||
}
|
||||
|
||||
@if (!label) {
|
||||
@if (!label()) {
|
||||
<ng-container *ngTemplateOutlet="content"></ng-container>
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
// FIXME: Update this file to be type safe and remove this and next line
|
||||
// @ts-strict-ignore
|
||||
import { NgTemplateOutlet } from "@angular/common";
|
||||
import { Component, ContentChild, HostBinding, Optional, Input, Self, input } from "@angular/core";
|
||||
import { Component, HostBinding, Optional, Self, input, contentChild } from "@angular/core";
|
||||
import { ControlValueAccessor, NgControl, Validators } from "@angular/forms";
|
||||
|
||||
import { I18nPipe } from "@bitwarden/ui-common";
|
||||
@@ -22,14 +20,8 @@ export class RadioGroupComponent implements ControlValueAccessor {
|
||||
selected: unknown;
|
||||
disabled = false;
|
||||
|
||||
// TODO: Skipped for signal migration because:
|
||||
// Accessor inputs cannot be migrated as they are too complex.
|
||||
private _name?: string;
|
||||
@Input() get name() {
|
||||
return this._name ?? this.ngControl?.name?.toString();
|
||||
}
|
||||
set name(value: string) {
|
||||
this._name = value;
|
||||
get name() {
|
||||
return this.ngControl?.name?.toString();
|
||||
}
|
||||
|
||||
readonly block = input(false);
|
||||
@@ -38,7 +30,7 @@ export class RadioGroupComponent implements ControlValueAccessor {
|
||||
readonly id = input(`bit-radio-group-${nextId++}`);
|
||||
@HostBinding("class") classList = ["tw-block", "tw-mb-4"];
|
||||
|
||||
@ContentChild(BitLabel) protected label: BitLabel;
|
||||
protected readonly label = contentChild(BitLabel);
|
||||
|
||||
constructor(@Optional() @Self() private ngControl?: NgControl) {
|
||||
if (ngControl != null) {
|
||||
@@ -51,8 +43,8 @@ export class RadioGroupComponent implements ControlValueAccessor {
|
||||
}
|
||||
|
||||
// ControlValueAccessor
|
||||
onChange: (value: unknown) => void;
|
||||
onTouched: () => void;
|
||||
onChange?: (value: unknown) => void;
|
||||
onTouched?: () => void;
|
||||
|
||||
writeValue(value: boolean): void {
|
||||
this.selected = value;
|
||||
@@ -72,10 +64,10 @@ export class RadioGroupComponent implements ControlValueAccessor {
|
||||
|
||||
onInputChange(value: unknown) {
|
||||
this.selected = value;
|
||||
this.onChange(this.selected);
|
||||
this.onChange?.(this.selected);
|
||||
}
|
||||
|
||||
onBlur() {
|
||||
this.onTouched();
|
||||
this.onTouched?.();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
// FIXME: Update this file to be type safe and remove this and next line
|
||||
// @ts-strict-ignore
|
||||
import { Component, HostBinding, input, Input, Optional, Self } from "@angular/core";
|
||||
import { NgControl, Validators } from "@angular/forms";
|
||||
|
||||
@@ -86,7 +84,7 @@ export class RadioInputComponent implements BitFormControlAbstraction {
|
||||
set disabled(value: any) {
|
||||
this._disabled = value != null && value !== false;
|
||||
}
|
||||
private _disabled: boolean;
|
||||
private _disabled?: boolean;
|
||||
|
||||
// TODO: Skipped for signal migration because:
|
||||
// Accessor inputs cannot be migrated as they are too complex.
|
||||
@@ -99,14 +97,15 @@ export class RadioInputComponent implements BitFormControlAbstraction {
|
||||
set required(value: any) {
|
||||
this._required = value != null && value !== false;
|
||||
}
|
||||
private _required: boolean;
|
||||
private _required?: boolean;
|
||||
|
||||
get hasError() {
|
||||
return this.ngControl?.status === "INVALID" && this.ngControl?.touched;
|
||||
return !!(this.ngControl?.status === "INVALID" && this.ngControl?.touched);
|
||||
}
|
||||
|
||||
get error(): [string, any] {
|
||||
const key = Object.keys(this.ngControl.errors)[0];
|
||||
return [key, this.ngControl.errors[key]];
|
||||
const errors = this.ngControl?.errors ?? {};
|
||||
const key = Object.keys(errors)[0];
|
||||
return [key, errors[key]];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user