From 7a2aab6356eda14099541951f2c6bdbe456e2399 Mon Sep 17 00:00:00 2001 From: dvcolomban Date: Thu, 10 Sep 2026 19:56:00 +0200 Subject: [PATCH 1/6] fix(hub-ui): show failed icons and retry on remount --- .../client/components/icons/IconifyIcon.vue | 28 +++++++++++++------ packages/hub-ui/src/client/utils/iconify.ts | 16 +++++++---- 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/packages/hub-ui/src/client/components/icons/IconifyIcon.vue b/packages/hub-ui/src/client/components/icons/IconifyIcon.vue index 7a210ccae..bde0d454d 100644 --- a/packages/hub-ui/src/client/components/icons/IconifyIcon.vue +++ b/packages/hub-ui/src/client/components/icons/IconifyIcon.vue @@ -20,25 +20,35 @@ const iconifyParsed = computed(() => { }) const iconifyLoaded = ref(undefined) -watchEffect(async () => { - if (!iconifyParsed.value) { - iconifyLoaded.value = undefined +const failed = ref(false) +watchEffect(async (onCleanup) => { + let active = true + onCleanup(() => { + active = false + }) + iconifyLoaded.value = undefined + failed.value = false + if (!iconifyParsed.value) return - } try { - iconifyLoaded.value = await getIconifySvg(iconifyParsed.value.collection, iconifyParsed.value.icon) + const svg = await getIconifySvg(iconifyParsed.value.collection, iconifyParsed.value.icon) + if (active) + iconifyLoaded.value = svg } catch { - // A failed icon fetch (offline / flaky CDN) should degrade to a blank icon, - // not throw out of the async effect and crash the surrounding panel. - iconifyLoaded.value = undefined + if (active) + failed.value = true } })