Skip to content

Commit 53de4fd

Browse files
Fix blinking badge not working & more
- Reduce the delay before displaying the tooltips on badge and dates - Add time to the date tooltip - Change `title` attribute to tooltip on date
1 parent e0a2867 commit 53de4fd

File tree

1 file changed

+48
-24
lines changed

1 file changed

+48
-24
lines changed

src/routes/+page.svelte

Lines changed: 48 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,12 @@
136136
// Badges
137137
let previousTab: string = currentRepo;
138138
let visitedTabs: string[] = [];
139-
const lastVisitKey = "lastVisit";
139+
let loadedTabs: Tab[] = [];
140+
let isLoadingDone = false;
141+
$: if (loadedTabs.length === Object.keys(repos).length) {
142+
isLoadingDone = true;
143+
}
144+
const lastVisitKey = "lastVisit" as const;
140145
let lastVisitDateString = "";
141146
142147
// Settings
@@ -184,6 +189,7 @@
184189
type Entries<T> = {
185190
[K in keyof T]: [K, T[K]];
186191
}[keyof T][];
192+
187193
// https://stackoverflow.com/a/74823834/12070367
188194
function typedEntries<T extends object>(obj: T) {
189195
return Object.entries(obj) as Entries<T>;
@@ -194,6 +200,7 @@
194200
localStorage.removeItem("displayBetaReleases");
195201
localStorage.removeItem("nonKitReleasesDisplay");
196202
203+
// Get the last visit date for the blinking badge
197204
const localItem = localStorage.getItem(lastVisitKey);
198205
const nowDate = new Date().toISOString();
199206
lastVisitDateString = localItem ?? nowDate;
@@ -323,6 +330,11 @@
323330
{:then releases}
324331
<!-- eslint-disable-next-line @typescript-eslint/no-unused-vars -->
325332
{@const _ = (() => {
333+
// Add tab to loaded tabs
334+
const toSet = new Set(loadedTabs);
335+
toSet.add(id);
336+
loadedTabs = [...toSet];
337+
326338
// Update the most recent date of a release of the list
327339
const latestRelease = releases.sort(
328340
(a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime()
@@ -331,7 +343,7 @@
331343
const storedDate = localStorage.getItem(`${id.toLowerCase()}MostRecentUpdate`);
332344
const latestReleaseDate = new Date(latestRelease.created_at);
333345
if (storedDate) {
334-
const storedDateObj = new Date(storedDate);
346+
const storedDateObj = new Date(storedDate.replace(/"/g, ""));
335347
if (latestReleaseDate > storedDateObj) {
336348
localStorage.setItem(
337349
`${id.toLowerCase()}MostRecentUpdate`,
@@ -532,21 +544,24 @@
532544
<!-- Trigger with release name, date and optional prerelease badge -->
533545
<Accordion.Trigger class="group hover:no-underline">
534546
<div class="flex w-full items-center gap-2 xs:items-baseline xs:gap-1">
535-
{#if new Date(release.created_at) > new Date(lastVisitDateString) && !visitedTabs.includes(id)}
536-
<div class="relative ml-1 mr-2 inline-flex">
537-
<span
538-
class="absolute inline-flex h-full w-full animate-ping rounded-full bg-primary opacity-75"
539-
/>
540-
<span class="inline-flex size-2.5 rounded-full bg-primary" />
541-
</div>
542-
{/if}
547+
<!-- Trigger reactivity (please give me Svelte 5) -->
548+
{#key isLoadingDone}
549+
{#if releaseDate > new Date(lastVisitDateString) && !visitedTabs.includes(id)}
550+
<div class="relative ml-1 mr-2 inline-flex">
551+
<span
552+
class="absolute inline-flex h-full w-full animate-ping rounded-full bg-primary opacity-75"
553+
/>
554+
<span class="inline-flex size-2.5 rounded-full bg-primary" />
555+
</div>
556+
{/if}
557+
{/key}
543558
<div class="flex flex-col items-start gap-1">
544559
<span class="text-left text-lg group-hover:underline">
545560
{release.name}
546561
</span>
547562
<div class="flex items-center gap-2 xs:hidden">
548563
{#if isLatestRelease}
549-
<Tooltip.Root>
564+
<Tooltip.Root openDelay={300}>
550565
<Tooltip.Trigger>
551566
<Badge
552567
class="bg-green-600 hover:bg-green-600 dark:bg-green-700 dark:hover:bg-green-700"
@@ -564,7 +579,7 @@
564579
</Tooltip.Root>
565580
{/if}
566581
{#if isMajorRelease}
567-
<Tooltip.Root>
582+
<Tooltip.Root openDelay={300}>
568583
<Tooltip.Trigger>
569584
<Badge>Major</Badge>
570585
</Tooltip.Trigger>
@@ -573,7 +588,7 @@
573588
</Tooltip.Content>
574589
</Tooltip.Root>
575590
{:else if release.prerelease}
576-
<Tooltip.Root>
591+
<Tooltip.Root openDelay={300}>
577592
<Tooltip.Trigger>
578593
<Badge variant="outline" class="border-primary text-primary">
579594
Prerelease
@@ -586,7 +601,7 @@
586601
</Tooltip.Content>
587602
</Tooltip.Root>
588603
{:else if isMaintenanceRelease}
589-
<Tooltip.Root>
604+
<Tooltip.Root openDelay={300}>
590605
<Tooltip.Trigger>
591606
<Badge variant="outline" class="border-blue-600 text-blue-600">
592607
Maintenance
@@ -601,19 +616,28 @@
601616
</div>
602617
</div>
603618
<span
604-
title={isOlderThanAWeek
605-
? toRelativeDateString(releaseDate)
606-
: releaseDate.toLocaleDateString("en")}
607619
class="ml-auto mr-4 flex text-right text-sm text-muted-foreground xs:ml-0 xs:mr-2"
608620
>
609621
<span class="mr-1 hidden xs:block">•</span>
610-
{isOlderThanAWeek
611-
? releaseDate.toLocaleDateString("en")
612-
: toRelativeDateString(releaseDate)}
622+
<Tooltip.Root openDelay={300}>
623+
<Tooltip.Trigger>
624+
{isOlderThanAWeek
625+
? releaseDate.toLocaleDateString("en")
626+
: toRelativeDateString(releaseDate)}
627+
</Tooltip.Trigger>
628+
<Tooltip.Content>
629+
{isOlderThanAWeek
630+
? toRelativeDateString(releaseDate)
631+
: new Intl.DateTimeFormat("en", {
632+
dateStyle: "medium",
633+
timeStyle: "short"
634+
}).format(releaseDate)}
635+
</Tooltip.Content>
636+
</Tooltip.Root>
613637
</span>
614638
<div class="hidden items-center gap-2 xs:flex">
615639
{#if isLatestRelease}
616-
<Tooltip.Root>
640+
<Tooltip.Root openDelay={300}>
617641
<Tooltip.Trigger>
618642
<Badge
619643
class="bg-green-600 hover:bg-green-600 dark:bg-green-700 dark:hover:bg-green-700"
@@ -631,7 +655,7 @@
631655
</Tooltip.Root>
632656
{/if}
633657
{#if isMajorRelease}
634-
<Tooltip.Root>
658+
<Tooltip.Root openDelay={300}>
635659
<Tooltip.Trigger>
636660
<Badge>Major</Badge>
637661
</Tooltip.Trigger>
@@ -640,7 +664,7 @@
640664
</Tooltip.Content>
641665
</Tooltip.Root>
642666
{:else if release.prerelease}
643-
<Tooltip.Root>
667+
<Tooltip.Root openDelay={300}>
644668
<Tooltip.Trigger>
645669
<Badge variant="outline" class="border-primary text-primary">
646670
Prerelease
@@ -653,7 +677,7 @@
653677
</Tooltip.Content>
654678
</Tooltip.Root>
655679
{:else if isMaintenanceRelease}
656-
<Tooltip.Root>
680+
<Tooltip.Root openDelay={300}>
657681
<Tooltip.Trigger>
658682
<Badge variant="outline" class="border-blue-600 text-blue-600">
659683
Maintenance

0 commit comments

Comments
 (0)