1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-25 20:53:22 +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:
Will Martin
2025-08-18 15:36:45 -04:00
committed by GitHub
parent f2d2d0a767
commit 827c4c0301
77 changed files with 450 additions and 612 deletions

View File

@@ -1,8 +1,6 @@
import { Directive, Optional } from "@angular/core";
import { Directive, inject, model } from "@angular/core";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
import { ValidationService } from "@bitwarden/common/platform/abstractions/validation.service";
import { BitActionDirective, ButtonLikeAbstraction } from "@bitwarden/components";
import { BitActionDirective, FunctionReturningAwaitable } from "@bitwarden/components";
import { PopupRouterCacheService } from "../view-cache/popup-router-cache.service";
@@ -11,15 +9,10 @@ import { PopupRouterCacheService } from "../view-cache/popup-router-cache.servic
selector: "[popupBackAction]",
})
export class PopupBackBrowserDirective extends BitActionDirective {
constructor(
buttonComponent: ButtonLikeAbstraction,
private router: PopupRouterCacheService,
@Optional() validationService?: ValidationService,
@Optional() logService?: LogService,
) {
super(buttonComponent, validationService, logService);
// override `bitAction` input; the parent handles the rest
this.handler.set(() => this.router.back());
}
private routerCacheService = inject(PopupRouterCacheService);
// Override the required input to make it optional since we set it automatically
override readonly handler = model<FunctionReturningAwaitable>(
() => this.routerCacheService.back(),
{ alias: "popupBackAction" },
);
}

View File

@@ -343,7 +343,7 @@ export default {
generator: "Generator",
send: "Send",
settings: "Settings",
labelWithNotification: (label: string) => `${label}: New Notification`,
labelWithNotification: (label: string | undefined) => `${label}: New Notification`,
});
},
},

View File

@@ -179,7 +179,7 @@ type Story = StoryObj<
const Template: Story = {
render: (args) => ({
props: args,
template: `
template: /*html*/ `
<router-outlet [mockOrgs]="mockOrgs" [mockProviders]="mockProviders"></router-outlet>
<div class="tw-flex tw-gap-[200px]">
<div>
@@ -191,7 +191,7 @@ const Template: Story = {
<product-switcher-content #content></product-switcher-content>
<div class="tw-h-40">
<div class="cdk-overlay-pane bit-menu-panel">
<ng-container *ngTemplateOutlet="content?.menu?.templateRef"></ng-container>
<ng-container *ngTemplateOutlet="content?.menu?.templateRef()"></ng-container>
</div>
</div>
</div>