I swear I'm at my limit

This commit is contained in:
Laurent
2024-10-24 16:46:58 +02:00
parent c514a94b5b
commit 9beb5044d3
13 changed files with 289 additions and 319 deletions

View File

@@ -1,7 +1,7 @@
import {scoreStore} from "./scoreStore";
import {Score} from "../models/score";
const api_url = import.meta.env.VITE_API_URL
const api_url = import.meta.env.VITE_CLIENT_API_URL
export async function submitScore(owner: string, value : number){
return await handleRequest(`${api_url}/submit/`,

View File

@@ -1,42 +1,37 @@
import {writable} from "svelte/store";
import {Score} from "../models/score";
import {browser} from "$app/environment"
import {getLeaderboard, submitScore} from "./requests";
let localStorageKey = "scores"
let scores : Score[] = []
function isBrowser() {
return typeof window !== 'undefined' && typeof window.localStorage !== 'undefined';
function sort(scores : Score[]){
if(scores.length >= 2) scores.sort((s1 : Score, s2 : Score) => s1.value - s2.value)
return scores;
}
function createStore(scores : Score[]){
//const storedValue = isBrowser() ? localStorage.getItem(localStorageKey) : null;
function createStore(){
const { set, update, subscribe } = writable<Score[]>(scores);
//if (isBrowser()) subscribe(value => localStorage.setItem(localStorageKey, JSON.stringify(value)));
return {
update,
subscribe,
set : (value : Score[]) => set(!value ? [] : value),
reset : () => set([]),
add : async (playerName : string, value : number) => {
await submitScore(playerName, value)
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;
return sort(s);
});
}
},
loadData: async () => {
if(scores.length !== 0) return;
let res = sort(await getLeaderboard());
set(res);
},
};
}
async function createStoreFromAPI(){
let scores = await getLeaderboard();
return createStore(scores)
}
export const scoreStore= createStoreFromAPI();
export const scoreStore = createStore();

View File

@@ -3,16 +3,11 @@
import { scoreStore } from "$lib/stores/scoreStore.ts";
import LeaderBoard from "$lib/components/LeaderBoard.svelte";
let scores;
onMount(async () => {
scores = await scoreStore;
await scoreStore.loadData();
});
</script>
{#if scores}
<LeaderBoard bind:scores={$scores}></LeaderBoard>
{:else}
<p>Loading leaderboard...</p>
{/if}
<LeaderBoard bind:scores={$scoreStore}></LeaderBoard>

View File

@@ -3,6 +3,8 @@
import {onMount} from "svelte";
import {scoreStore} from "$lib/stores/scoreStore.ts";
let scores;
let playerName = undefined;
let range = 100;
let result = 0;
@@ -26,7 +28,7 @@
toggleLoading();
window.$(".result").text(`Result : ${result}/${range}`)
scoreStore.add(playerName, result)
await scoreStore.add(playerName, result)
}
function toggleLoading(){