diff --git a/.changeset/angry-points-applaud.md b/.changeset/angry-points-applaud.md new file mode 100644 index 00000000..a81a3bf1 --- /dev/null +++ b/.changeset/angry-points-applaud.md @@ -0,0 +1,5 @@ +--- +"authenticlash": minor +--- + +Remove new badge when hovered and store status in local storage diff --git a/src/lib/stores/PersistantStorage.ts b/src/lib/stores/PersistantStorage.ts new file mode 100644 index 00000000..1fabb5fa --- /dev/null +++ b/src/lib/stores/PersistantStorage.ts @@ -0,0 +1,31 @@ +import { browser } from '$app/environment'; +import type { Writable } from 'svelte/store'; +import { writable, get } from 'svelte/store'; + +const storage = (key: string, initValue: T): Writable => { + const store = writable(initValue); + if (!browser) return store; + + const storedValueStr = localStorage.getItem(key); + if (storedValueStr != null) store.set(JSON.parse(storedValueStr)); + + store.subscribe((val) => { + if (val === null || val === undefined) { + localStorage.removeItem(key); + } else { + localStorage.setItem(key, JSON.stringify(val)); + } + }); + + window.addEventListener('storage', () => { + const storedValueStr = localStorage.getItem(key); + if (storedValueStr == null) return; + + const localValue: T = JSON.parse(storedValueStr); + if (localValue !== get(store)) store.set(localValue); + }); + + return store; +}; + +export default storage; diff --git a/src/lib/stores/SeenBadgesStore.ts b/src/lib/stores/SeenBadgesStore.ts new file mode 100644 index 00000000..d613f9c0 --- /dev/null +++ b/src/lib/stores/SeenBadgesStore.ts @@ -0,0 +1,3 @@ +import storage from './PersistantStorage'; + +export const seenBadges = storage>('seenBadges', []); diff --git a/src/routes/badges/+page.server.ts b/src/routes/badges/+page.server.ts index b358869e..89dbbcf4 100644 --- a/src/routes/badges/+page.server.ts +++ b/src/routes/badges/+page.server.ts @@ -51,7 +51,6 @@ export const load: PageServerLoad = async ({ locals: { getSession } }) => { } const badges: Array = allBadges.map((badge) => { - console.log('console.log', unlockedBadges); const unlockedBadge = unlockedBadges.find((ub) => ub.badge_id === badge.id); const awardedOn = unlockedBadge?.awarded_on ? new Date(unlockedBadge.awarded_on) : undefined; const fiveDays = 1000 * 60 * 60 * 24 * 5; diff --git a/src/routes/badges/UserBadge.svelte b/src/routes/badges/UserBadge.svelte index e4a1a681..bf46c1da 100644 --- a/src/routes/badges/UserBadge.svelte +++ b/src/routes/badges/UserBadge.svelte @@ -1,13 +1,37 @@ -
  • +
  • markBadgeAsSeen()} + on:focus={() => markBadgeAsSeen()} +>
    {#if showBadgeCustomImage} {/if}
    - {#if badge.isNew} - NEWNEW {/if}