diff options
| author | Fuwn <[email protected]> | 2026-03-03 09:11:38 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2026-03-03 09:12:31 -0800 |
| commit | 0b3f4af0d8061fefcdeaba1352ea8176f34b1cbd (patch) | |
| tree | 5305af0876b70d0207df44febab27fb65236622d /src/lib/Events/AniListBadges/EasterEvent2025 | |
| parent | refactor(effect): harden settings and media cache json parsing (diff) | |
| download | due.moe-0b3f4af0d8061fefcdeaba1352ea8176f34b1cbd.tar.xz due.moe-0b3f4af0d8061fefcdeaba1352ea8176f34b1cbd.zip | |
refactor(effect): migrate svelte json hotspots to typed decoders
Diffstat (limited to 'src/lib/Events/AniListBadges/EasterEvent2025')
| -rw-r--r-- | src/lib/Events/AniListBadges/EasterEvent2025/EasterEgg.svelte | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/src/lib/Events/AniListBadges/EasterEvent2025/EasterEgg.svelte b/src/lib/Events/AniListBadges/EasterEvent2025/EasterEgg.svelte index ab9698d4..c48003d7 100644 --- a/src/lib/Events/AniListBadges/EasterEvent2025/EasterEgg.svelte +++ b/src/lib/Events/AniListBadges/EasterEvent2025/EasterEgg.svelte @@ -2,16 +2,24 @@ import { onMount, tick } from "svelte"; import { browser } from "$app/environment"; import Popup from "$lib/Layout/Popup.svelte"; +import { parseJsonStringWithSchemaOrDefault } from "$lib/Effect/json"; +import { Schema } from "effect"; export let targetID = "easter-target"; export let id: number; let visible = false; let showPopup = false; +const clickedEggsSchema = Schema.Array(Schema.Number); +const readClickedEggs = () => [ + ...parseJsonStringWithSchemaOrDefault( + localStorage.getItem("easter2025ClickedEggs") || "[]", + clickedEggsSchema, + [], + ), +]; -$: eggCount = browser - ? JSON.parse(localStorage.getItem("easter2025ClickedEggs") || "[]").length - : 0; +$: eggCount = browser ? readClickedEggs().length : 0; onMount(() => { let intervalId: number | undefined; @@ -23,8 +31,7 @@ onMount(() => { if (!targetElement) return; - const storedClickedEggs = localStorage.getItem("easter2025ClickedEggs"); - const clickedEggs = storedClickedEggs ? JSON.parse(storedClickedEggs) : []; + const clickedEggs = readClickedEggs(); const eggVisual = document.getElementById(`egg-visual-${targetID}-${id}`); const eggClick = document.getElementById(`egg-click-${targetID}-${id}`); const pageWidth = document.documentElement.clientWidth; @@ -60,8 +67,7 @@ onMount(() => { const handleClick = (event: MouseEvent) => { if (event.button === 0) { - const storedClickedEggs = localStorage.getItem("easter2025ClickedEggs"); - const clickedEggs = storedClickedEggs ? JSON.parse(storedClickedEggs) : []; + const clickedEggs = readClickedEggs(); if (!clickedEggs.includes(id)) { clickedEggs.push(id); @@ -92,8 +98,7 @@ const copyCode = (source: string) => { const onLeavePopup = () => { showPopup = false; - const storedClickedEggs = localStorage.getItem("easter2025ClickedEggs"); - const clickedEggs = storedClickedEggs ? JSON.parse(storedClickedEggs) : []; + const clickedEggs = readClickedEggs(); clickedEggs.push(-1); localStorage.setItem("easter2025ClickedEggs", JSON.stringify(clickedEggs)); |