aboutsummaryrefslogtreecommitdiff
path: root/src/lib/stores/guests.svelte.js
diff options
context:
space:
mode:
authorKaran Jayachandra <mail@karanjayachandra.com>2026-08-30 22:43:21 +0200
committerKaran Jayachandra <mail@karanjayachandra.com>2026-08-30 22:43:21 +0200
commitfc8d8ab8d0da95ec79056f59e14a150df6fcea89 (patch)
tree33f8050b2f2920c0f1b884a205a8aa4c81d7687c /src/lib/stores/guests.svelte.js
parentd37ebfda883bcd03b146a85bc3e5a4657d0abd73 (diff)
Moved to sveltemain
Diffstat (limited to 'src/lib/stores/guests.svelte.js')
-rw-r--r--src/lib/stores/guests.svelte.js46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/lib/stores/guests.svelte.js b/src/lib/stores/guests.svelte.js
new file mode 100644
index 0000000..6dc08db
--- /dev/null
+++ b/src/lib/stores/guests.svelte.js
@@ -0,0 +1,46 @@
+import { createGuest } from "../logic/players.js";
+import { randomStatus } from "../logic/random.js";
+
+const STORAGE_KEY = "Guest";
+const GUEST_COUNT = 18;
+
+function loadInitialGuests() {
+ const stored = JSON.parse(localStorage.getItem(STORAGE_KEY));
+ if (stored && stored.length > 0) {
+ return stored.map((g) =>
+ createGuest(Number(g.id), Boolean(Number(g.status)), Number(g.games))
+ );
+ }
+ return Array.from({ length: GUEST_COUNT }, (_, i) => createGuest(i, randomStatus()));
+}
+
+let guests = $state(loadInitialGuests());
+
+function persist() {
+ localStorage.setItem(STORAGE_KEY, JSON.stringify(guests));
+}
+if (!localStorage.getItem(STORAGE_KEY)) persist();
+
+export function getGuests() {
+ return guests;
+}
+
+export function activeGuests() {
+ return guests.filter((g) => g.status);
+}
+
+export function toggleGuest(id) {
+ const guest = guests.find((g) => g.id === id);
+ if (!guest) return;
+ guest.status = !guest.status;
+ persist();
+}
+
+export function incrementGuestGames(names) {
+ for (const guest of guests) {
+ if (names.includes(guest.name)) {
+ guest.games += 1;
+ }
+ }
+ persist();
+}