From c8df868626c3b2eb0efe8dc725b28e5ecb5d54d1 Mon Sep 17 00:00:00 2001 From: Laurent <58115082+naaturel@users.noreply.github.com> Date: Mon, 14 Oct 2024 16:23:07 +0200 Subject: [PATCH] Score are dynamically displayed and saved in local storage --- src/lib/components/LeaderBoard.svelte | 72 ++++++++++++++++++ src/lib/components/ListItem.svelte | 3 + src/lib/models/score.ts | 11 +++ src/lib/stores/scoreStore.ts | 34 +++++++++ src/routes/+layout.svelte | 1 - src/routes/+page.svelte | 104 ++------------------------ src/routes/about/+page.svelte | 2 +- src/routes/play/+page.svelte | 35 +++++++-- 8 files changed, 154 insertions(+), 108 deletions(-) create mode 100644 src/lib/components/LeaderBoard.svelte create mode 100644 src/lib/components/ListItem.svelte create mode 100644 src/lib/models/score.ts create mode 100644 src/lib/stores/scoreStore.ts diff --git a/src/lib/components/LeaderBoard.svelte b/src/lib/components/LeaderBoard.svelte new file mode 100644 index 0000000..e7db7ad --- /dev/null +++ b/src/lib/components/LeaderBoard.svelte @@ -0,0 +1,72 @@ + + + + + \ No newline at end of file diff --git a/src/lib/components/ListItem.svelte b/src/lib/components/ListItem.svelte new file mode 100644 index 0000000..40ebf54 --- /dev/null +++ b/src/lib/components/ListItem.svelte @@ -0,0 +1,3 @@ +
  • + +
  • \ No newline at end of file diff --git a/src/lib/models/score.ts b/src/lib/models/score.ts new file mode 100644 index 0000000..54c09af --- /dev/null +++ b/src/lib/models/score.ts @@ -0,0 +1,11 @@ +export class Score { + + readonly playerName : string; + readonly value: number; + + constructor({playerName = "", value = 0}) { + this.playerName = playerName; + this.value = value; + } + +} \ No newline at end of file diff --git a/src/lib/stores/scoreStore.ts b/src/lib/stores/scoreStore.ts new file mode 100644 index 0000000..3031038 --- /dev/null +++ b/src/lib/stores/scoreStore.ts @@ -0,0 +1,34 @@ +import {writable} from "svelte/store"; +import {Score} from "../models/score"; +import {browser} from "$app/environment" + +let localStorageKey = "scores" + +function isBrowser() { + return typeof window !== 'undefined' && typeof window.localStorage !== 'undefined'; +} + +function createStore(){ + + const storedValue = isBrowser() ? localStorage.getItem(localStorageKey) : null; + + const { set, update, subscribe } = writable(!storedValue ? [] : JSON.parse(storedValue)); + + if (isBrowser()) subscribe(value => localStorage.setItem(localStorageKey, JSON.stringify(value))); + + return { + update, + subscribe, + set : (value : Score[]) => set(!value ? [] : value), + reset : () => set([]), + add : (playerName : string, value : number) => { + update(scores => { + let s = [...scores, new Score({playerName : playerName, value : value})]; + if(s.length >= 2) s.sort((s1 : Score, s2 : Score) => s1.value - s2.value) + return s; + }); + } + }; +} + +export const scoreStore = createStore(); \ No newline at end of file diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 9c3b3b7..6fd30d7 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -3,7 +3,6 @@ import github_mark from '$lib/assets/github-mark-white.svg'; import twitter_mark from '$lib/assets/twitter-mark-white.svg'; - import NavLink from "$lib/components/NavLink.svelte"; import {onMount} from "svelte"; onMount(async () => { diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index ec5bf7e..857dc2d 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,101 +1,9 @@ - - - \ No newline at end of file + \ No newline at end of file diff --git a/src/routes/about/+page.svelte b/src/routes/about/+page.svelte index 0e74404..1b00494 100644 --- a/src/routes/about/+page.svelte +++ b/src/routes/about/+page.svelte @@ -1 +1 @@ -

    It was revealed to me in my dream

    \ No newline at end of file +

    It was revealed to me in a dream

    \ No newline at end of file diff --git a/src/routes/play/+page.svelte b/src/routes/play/+page.svelte index e1dbf05..6e3db3a 100644 --- a/src/routes/play/+page.svelte +++ b/src/routes/play/+page.svelte @@ -1,7 +1,9 @@