Skip to content

Commit c7d46de

Browse files
authored
fix: add loading spinner for service images loaded externally (#140)
1 parent 3a7211e commit c7d46de

1 file changed

Lines changed: 11 additions & 1 deletion

File tree

src/lib/features/awesome-privacy/components/service-logo.svelte

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,15 @@
1313
let { service, class: klass, ...props }: ServiceLogoProps = $props();
1414
1515
let error = $state(false);
16+
let loading = $state(true);
1617
1718
const fallback = $derived(`https://icon.horse/icon/${service.url}`);
1819
</script>
1920

21+
{#if loading}
22+
<span class={cn('size-5 animate-pulse rounded-sm bg-base-300', klass)}></span>
23+
{/if}
24+
2025
{#if error}
2126
<Icons.fallback class={cn('shrink-0', klass)} />
2227
{:else}
@@ -25,15 +30,20 @@
2530
src={service.icon ?? fallback}
2631
onerror={(e) => {
2732
const target = e.target as HTMLImageElement;
33+
loading = false;
2834

2935
if (target.src !== fallback) {
3036
target.src = fallback;
3137
} else if (target.src === fallback) {
3238
error = true;
3339
}
3440
}}
41+
onload={() => {
42+
loading = false;
43+
error = false;
44+
}}
3545
alt={service.name}
36-
class={cn('shrink-0 object-contain', klass)}
46+
class={cn('shrink-0 object-contain', loading && 'hidden', klass)}
3747
{...props}
3848
/>
3949
{/if}

0 commit comments

Comments
 (0)