From 7f7f346af47f45531046e1d2f1a88f53acee77fa Mon Sep 17 00:00:00 2001 From: Maria Hutt Date: Tue, 12 Sep 2023 11:50:52 -0700 Subject: [PATCH] fix(icon): verify the icon loads in the lifecycle (#1278) Co-authored-by: sean-perkins <13732623+sean-perkins@users.noreply.github.com > --- src/components/icon/icon.tsx | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/components/icon/icon.tsx b/src/components/icon/icon.tsx index b6a9f5fcd..10cdd0051 100755 --- a/src/components/icon/icon.tsx +++ b/src/components/icon/icon.tsx @@ -12,6 +12,7 @@ export class Icon { private io?: IntersectionObserver; private iconName: string | null = null; private inheritedAttributes: { [k: string]: any } = {}; + private didLoadIcon = false; @Element() el!: HTMLElement; @@ -94,6 +95,18 @@ export class Icon { }); } + componentDidLoad() { + /** + * Addresses an Angular issue where property values are assigned after the 'connectedCallback' but prior to the registration of watchers. + * This enhancement ensures the loading of an icon when the component has finished rendering and the icon has yet to apply the SVG data. + * This modification pertains to the usage of Angular's binding syntax: + * `` + */ + if (!this.didLoadIcon) { + this.loadIcon(); + } + } + disconnectedCallback() { if (this.io) { this.io.disconnect(); @@ -138,6 +151,7 @@ export class Icon { // async if it hasn't been loaded getSvgContent(url, this.sanitize).then(() => (this.svgContent = ioniconContent.get(url))); } + this.didLoadIcon = true; } }