From 63ef2acc26c725dda007efbc5cb140f185f7936c Mon Sep 17 00:00:00 2001 From: Matthieu Riegler Date: Fri, 10 Jan 2025 05:41:05 +0100 Subject: [PATCH] docs(docs-infra): prevent the host class from being replaced (#59460) When removing the binding, the class defined on the host element is being replaced fixes #59442 PR Close #59460 --- .../viewers/docs-viewer/docs-viewer.component.spec.ts | 7 +++++++ .../viewers/docs-viewer/docs-viewer.component.ts | 9 ++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/adev/shared-docs/components/viewers/docs-viewer/docs-viewer.component.spec.ts b/adev/shared-docs/components/viewers/docs-viewer/docs-viewer.component.spec.ts index 737f3538bf7..bc9dfa4bb52 100644 --- a/adev/shared-docs/components/viewers/docs-viewer/docs-viewer.component.spec.ts +++ b/adev/shared-docs/components/viewers/docs-viewer/docs-viewer.component.spec.ts @@ -112,6 +112,13 @@ describe('DocViewer', () => { expect(exampleViewer).not.toBeNull(); expect(exampleViewer.componentInstance.view()).toBe(CodeExampleViewMode.SNIPPET); + + const checkIcon = fixture.debugElement.query(By.directive(IconComponent)); + expect((checkIcon.nativeElement as HTMLElement).classList).toContain( + `material-symbols-outlined`, + ); + expect((checkIcon.nativeElement as HTMLElement).classList).toContain(`docs-check`); + expect(checkIcon.nativeElement.innerHTML).toBe('check'); }); it('should display example viewer in multi file mode when user clicks expand', async () => { diff --git a/adev/shared-docs/components/viewers/docs-viewer/docs-viewer.component.ts b/adev/shared-docs/components/viewers/docs-viewer/docs-viewer.component.ts index 3a33715c2a2..2a7e4104390 100644 --- a/adev/shared-docs/components/viewers/docs-viewer/docs-viewer.component.ts +++ b/adev/shared-docs/components/viewers/docs-viewer/docs-viewer.component.ts @@ -265,9 +265,12 @@ export class DocViewer implements OnChanges { } private loadIcons(element: HTMLElement): void { - element.querySelectorAll('docs-icon').forEach((iconsPlaceholder) => { - this.renderComponent(IconComponent, iconsPlaceholder as HTMLElement); - }); + // We need to make sure that we don't reload the icons in loadCopySourceCodeButtons + element + .querySelectorAll('docs-icon:not([docs-copy-source-code] docs-icon)') + .forEach((iconsPlaceholder) => { + this.renderComponent(IconComponent, iconsPlaceholder as HTMLElement); + }); } /**