diff --git a/docs/architecture/zoneless-migration.md b/docs/architecture/zoneless-migration.md index d3c7d8015..630d51ff2 100644 --- a/docs/architecture/zoneless-migration.md +++ b/docs/architecture/zoneless-migration.md @@ -85,17 +85,17 @@ files that still contain `ChangeDetectionStrategy.Eager`. ### libs/ui (20 files, 21 components) -- [ ] `libs/ui/components/src/lib/confirm-dialog/confirm-dialog.component.ts` -- [ ] `libs/ui/components/src/lib/content-hero/content-hero.component.ts` -- [ ] `libs/ui/components/src/lib/expandable-text/expandable-text.component.ts` -- [ ] `libs/ui/components/src/lib/portal-detail-shell/content-about.component.ts` -- [ ] `libs/ui/components/src/lib/portal-detail-shell/portal-detail-shell.component.ts` -- [ ] `libs/ui/components/src/lib/progress-capsule/progress-capsule.component.ts` -- [ ] `libs/ui/components/src/lib/season-container/episode-info-dialog.component.ts` -- [ ] `libs/ui/components/src/lib/watched-badge/watched-badge.component.ts` -- [ ] `libs/ui/epg/src/lib/epg-item-description/epg-item-description.component.ts` -- [ ] `libs/ui/epg/src/lib/epg-progress-panel/epg-progress-panel.component.ts` (idle audit root; also `EpgTrustConfirmDialogComponent`) -- [ ] `libs/ui/epg/src/lib/epg-source-status/epg-source-status.component.ts` +- [x] `libs/ui/components/src/lib/confirm-dialog/confirm-dialog.component.ts` +- [x] `libs/ui/components/src/lib/content-hero/content-hero.component.ts` +- [x] `libs/ui/components/src/lib/expandable-text/expandable-text.component.ts` +- [x] `libs/ui/components/src/lib/portal-detail-shell/content-about.component.ts` +- [x] `libs/ui/components/src/lib/portal-detail-shell/portal-detail-shell.component.ts` +- [x] `libs/ui/components/src/lib/progress-capsule/progress-capsule.component.ts` +- [x] `libs/ui/components/src/lib/season-container/episode-info-dialog.component.ts` +- [x] `libs/ui/components/src/lib/watched-badge/watched-badge.component.ts` +- [x] `libs/ui/epg/src/lib/epg-item-description/epg-item-description.component.ts` +- [x] `libs/ui/epg/src/lib/epg-progress-panel/epg-progress-panel.component.ts` (idle audit root; also `EpgTrustConfirmDialogComponent`) +- [x] `libs/ui/epg/src/lib/epg-source-status/epg-source-status.component.ts` - [ ] `libs/ui/remote-control/src/lib/remote-control/remote-control.component.ts` (`apps/remote-control-web` only) - [ ] `libs/ui/playback/src/lib/art-player/art-player.component.ts` - [ ] `libs/ui/playback/src/lib/audio-player/audio-player.component.ts` diff --git a/libs/ui/components/src/lib/confirm-dialog/confirm-dialog.component.ts b/libs/ui/components/src/lib/confirm-dialog/confirm-dialog.component.ts index 937c06e54..375f073d2 100644 --- a/libs/ui/components/src/lib/confirm-dialog/confirm-dialog.component.ts +++ b/libs/ui/components/src/lib/confirm-dialog/confirm-dialog.component.ts @@ -29,8 +29,7 @@ export interface ConfirmDialogData { @Component({ imports: [MatButtonModule, MatDialogModule, TranslateModule], - // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection -- Preserve pre-Angular 22 eager checking during the framework upgrade. - changeDetection: ChangeDetectionStrategy.Eager, + changeDetection: ChangeDetectionStrategy.OnPush, template: `

{{ dialogData.title }} diff --git a/libs/ui/components/src/lib/content-hero/content-hero.component.ts b/libs/ui/components/src/lib/content-hero/content-hero.component.ts index 5917e374e..6413a66b5 100644 --- a/libs/ui/components/src/lib/content-hero/content-hero.component.ts +++ b/libs/ui/components/src/lib/content-hero/content-hero.component.ts @@ -34,8 +34,7 @@ export type ContentHeroLayout = 'stage' | 'compact'; TranslateModule, ], templateUrl: './content-hero.component.html', - // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection -- Preserve pre-Angular 22 eager checking during the framework upgrade. - changeDetection: ChangeDetectionStrategy.Eager, + changeDetection: ChangeDetectionStrategy.OnPush, styleUrls: ['./content-hero.component.scss'], }) export class ContentHeroComponent { diff --git a/libs/ui/components/src/lib/expandable-text/expandable-text.component.ts b/libs/ui/components/src/lib/expandable-text/expandable-text.component.ts index a35f18b95..1b50a3fcf 100644 --- a/libs/ui/components/src/lib/expandable-text/expandable-text.component.ts +++ b/libs/ui/components/src/lib/expandable-text/expandable-text.component.ts @@ -47,8 +47,7 @@ import { TranslateModule } from '@ngx-translate/core'; } `, - // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection -- Preserve pre-Angular 22 eager checking during the framework upgrade. - changeDetection: ChangeDetectionStrategy.Eager, + changeDetection: ChangeDetectionStrategy.OnPush, styles: [ ` :host { diff --git a/libs/ui/components/src/lib/portal-detail-shell/content-about.component.ts b/libs/ui/components/src/lib/portal-detail-shell/content-about.component.ts index 1d55c39f6..71328b8bd 100644 --- a/libs/ui/components/src/lib/portal-detail-shell/content-about.component.ts +++ b/libs/ui/components/src/lib/portal-detail-shell/content-about.component.ts @@ -56,8 +56,7 @@ import { TranslateModule } from '@ngx-translate/core'; `, - // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection -- Preserve pre-Angular 22 eager checking during the framework upgrade. - changeDetection: ChangeDetectionStrategy.Eager, + changeDetection: ChangeDetectionStrategy.OnPush, styleUrls: ['./content-about.component.scss'], }) export class ContentAboutComponent { diff --git a/libs/ui/components/src/lib/portal-detail-shell/portal-detail-shell.component.ts b/libs/ui/components/src/lib/portal-detail-shell/portal-detail-shell.component.ts index de069c8e7..a11e88986 100644 --- a/libs/ui/components/src/lib/portal-detail-shell/portal-detail-shell.component.ts +++ b/libs/ui/components/src/lib/portal-detail-shell/portal-detail-shell.component.ts @@ -44,8 +44,7 @@ import { imports: [ContentHeroComponent, ContentAboutComponent, NgTemplateOutlet], templateUrl: './portal-detail-shell.component.html', styleUrls: ['./portal-detail-shell.component.scss'], - // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection -- Preserve pre-Angular 22 eager checking during the framework upgrade. - changeDetection: ChangeDetectionStrategy.Eager, + changeDetection: ChangeDetectionStrategy.OnPush, host: { tabindex: '0', role: 'region', diff --git a/libs/ui/components/src/lib/progress-capsule/progress-capsule.component.ts b/libs/ui/components/src/lib/progress-capsule/progress-capsule.component.ts index c1394d165..253703482 100644 --- a/libs/ui/components/src/lib/progress-capsule/progress-capsule.component.ts +++ b/libs/ui/components/src/lib/progress-capsule/progress-capsule.component.ts @@ -19,8 +19,7 @@ import { > `, - // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection -- Preserve pre-Angular 22 eager checking during the framework upgrade. - changeDetection: ChangeDetectionStrategy.Eager, + changeDetection: ChangeDetectionStrategy.OnPush, styles: [ ` .progress-capsule { diff --git a/libs/ui/components/src/lib/season-container/episode-info-dialog.component.ts b/libs/ui/components/src/lib/season-container/episode-info-dialog.component.ts index 59c78ca4c..e08e4dbf4 100644 --- a/libs/ui/components/src/lib/season-container/episode-info-dialog.component.ts +++ b/libs/ui/components/src/lib/season-container/episode-info-dialog.component.ts @@ -105,8 +105,7 @@ export const EPISODE_INFO_PLAY = 'play' as const; `, - // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection -- Preserve pre-Angular 22 eager checking during the framework upgrade. - changeDetection: ChangeDetectionStrategy.Eager, + changeDetection: ChangeDetectionStrategy.OnPush, styles: [ ` :host { diff --git a/libs/ui/components/src/lib/watched-badge/watched-badge.component.ts b/libs/ui/components/src/lib/watched-badge/watched-badge.component.ts index cba3fe79a..582e7dcb5 100644 --- a/libs/ui/components/src/lib/watched-badge/watched-badge.component.ts +++ b/libs/ui/components/src/lib/watched-badge/watched-badge.component.ts @@ -12,8 +12,7 @@ import { MatIcon } from '@angular/material/icon'; } `, - // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection -- Preserve pre-Angular 22 eager checking during the framework upgrade. - changeDetection: ChangeDetectionStrategy.Eager, + changeDetection: ChangeDetectionStrategy.OnPush, styles: [ ` .watched-badge { diff --git a/libs/ui/epg/src/lib/epg-item-description/epg-item-description.component.spec.ts b/libs/ui/epg/src/lib/epg-item-description/epg-item-description.component.spec.ts index ce7dd3c79..bd8c5ec1f 100644 --- a/libs/ui/epg/src/lib/epg-item-description/epg-item-description.component.spec.ts +++ b/libs/ui/epg/src/lib/epg-item-description/epg-item-description.component.spec.ts @@ -1,4 +1,4 @@ -import { signal } from '@angular/core'; +import { ChangeDetectorRef, signal } from '@angular/core'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog'; import { By } from '@angular/platform-browser'; @@ -72,8 +72,12 @@ describe('EpgItemDescriptionComponent', () => { }); it('offers archive URL copying only with explicit capability and explains credentials', () => { + // The component is OnPush and dialog data is fixed once the dialog + // opens, so the test marks the component's own view after mutating it. + const componentView = + fixture.debugElement.injector.get(ChangeDetectorRef); Object.assign(component.dialogData, { archiveUrlAvailable: true }); - fixture.changeDetectorRef.markForCheck(); + componentView.markForCheck(); fixture.detectChanges(); expect( fixture.nativeElement.querySelector( @@ -84,7 +88,7 @@ describe('EpgItemDescriptionComponent', () => { 'EPG.PROGRAM_DIALOG.ARCHIVE_URL_NOTICE' ); Object.assign(component.dialogData, { archiveUrlAvailable: false }); - fixture.changeDetectorRef.markForCheck(); + componentView.markForCheck(); fixture.detectChanges(); expect( fixture.nativeElement.querySelector( diff --git a/libs/ui/epg/src/lib/epg-item-description/epg-item-description.component.ts b/libs/ui/epg/src/lib/epg-item-description/epg-item-description.component.ts index de527bda8..98ad0ff77 100644 --- a/libs/ui/epg/src/lib/epg-item-description/epg-item-description.component.ts +++ b/libs/ui/epg/src/lib/epg-item-description/epg-item-description.component.ts @@ -38,7 +38,7 @@ export type EpgItemDialogData = EpgProgram & { selector: 'app-epg-item-description', templateUrl: './epg-item-description.component.html', styleUrls: ['./epg-item-description.component.scss'], - changeDetection: ChangeDetectionStrategy.Eager, + changeDetection: ChangeDetectionStrategy.OnPush, imports: [DatePipe, MatDialogModule, MatIcon, TranslatePipe], }) export class EpgItemDescriptionComponent { diff --git a/libs/ui/epg/src/lib/epg-progress-panel/epg-progress-panel.component.ts b/libs/ui/epg/src/lib/epg-progress-panel/epg-progress-panel.component.ts index d0e47b8e9..a1011039b 100644 --- a/libs/ui/epg/src/lib/epg-progress-panel/epg-progress-panel.component.ts +++ b/libs/ui/epg/src/lib/epg-progress-panel/epg-progress-panel.component.ts @@ -32,7 +32,7 @@ interface EpgTrustConfirmDialogData { @Component({ selector: 'app-epg-trust-confirm-dialog', imports: [MatButtonModule, MatDialogModule, TranslatePipe], - changeDetection: ChangeDetectionStrategy.Eager, + changeDetection: ChangeDetectionStrategy.OnPush, template: `

{{ data.title }}

@@ -64,7 +64,7 @@ class EpgTrustConfirmDialogComponent { TranslatePipe, ], templateUrl: './epg-progress-panel.component.html', - changeDetection: ChangeDetectionStrategy.Eager, + changeDetection: ChangeDetectionStrategy.OnPush, styleUrl: './epg-progress-panel.component.scss', }) export class EpgProgressPanelComponent { diff --git a/libs/ui/epg/src/lib/epg-source-status/epg-source-status.component.ts b/libs/ui/epg/src/lib/epg-source-status/epg-source-status.component.ts index e5fb3777d..12d5fc93d 100644 --- a/libs/ui/epg/src/lib/epg-source-status/epg-source-status.component.ts +++ b/libs/ui/epg/src/lib/epg-source-status/epg-source-status.component.ts @@ -30,7 +30,7 @@ type BadgeStatus = TranslatePipe, ], templateUrl: './epg-source-status.component.html', - changeDetection: ChangeDetectionStrategy.Eager, + changeDetection: ChangeDetectionStrategy.OnPush, styleUrl: './epg-source-status.component.scss', }) export class EpgSourceStatusComponent implements OnInit {