diff --git a/src/app.css b/src/app.css
index 80bc59b..3e8f3fa 100644
--- a/src/app.css
+++ b/src/app.css
@@ -5,27 +5,27 @@
@custom-variant dark (&:where(.dark, .dark *));
@theme {
- --color-primary-50: #fff5f2;
- --color-primary-100: #fff1ee;
- --color-primary-200: #ffe4de;
- --color-primary-300: #ffd5cc;
- --color-primary-400: #ffbcad;
- --color-primary-500: #fe795d;
- --color-primary-600: #ef562f;
- --color-primary-700: #eb4f27;
- --color-primary-800: #cc4522;
- --color-primary-900: #a5371b;
+ --color-primary-50: #f0f9ff;
+ --color-primary-100: #e0f2fe;
+ --color-primary-200: #bae6fd;
+ --color-primary-300: #7dd3fc;
+ --color-primary-400: #38bdf8;
+ --color-primary-500: #0ea5e9;
+ --color-primary-600: #0284c7;
+ --color-primary-700: #0369a1;
+ --color-primary-800: #075985;
+ --color-primary-900: #0c4a6e;
- --color-secondary-50: #f0f9ff;
- --color-secondary-100: #e0f2fe;
- --color-secondary-200: #bae6fd;
- --color-secondary-300: #7dd3fc;
- --color-secondary-400: #38bdf8;
- --color-secondary-500: #0ea5e9;
- --color-secondary-600: #0284c7;
- --color-secondary-700: #0369a1;
- --color-secondary-800: #075985;
- --color-secondary-900: #0c4a6e;
+ --color-secondary-50: #fff5f2;
+ --color-secondary-100: #fff1ee;
+ --color-secondary-200: #ffe4de;
+ --color-secondary-300: #ffd5cc;
+ --color-secondary-400: #ffbcad;
+ --color-secondary-500: #fe795d;
+ --color-secondary-600: #ef562f;
+ --color-secondary-700: #eb4f27;
+ --color-secondary-800: #cc4522;
+ --color-secondary-900: #a5371b;
}
@source '../node_modules/flowbite-svelte/dist';
diff --git a/src/lib/components/EventForm.svelte b/src/lib/components/EventForm.svelte
index d9b4551..86d03b5 100644
--- a/src/lib/components/EventForm.svelte
+++ b/src/lib/components/EventForm.svelte
@@ -13,7 +13,7 @@
let newDish = $state('');
let votingSystem: string = $state(votingSystems[0].id);
- const isFormValid = $derived(eventName.trim() !== '' && dishes.length > 0);
+ const isFormValid = $derived(eventName.trim() !== '' && dishes.length > 1);
const addDish = () => {
if (newDish.trim()) {
@@ -49,7 +49,7 @@
};
-Create an Event
+Host an Event
diff --git a/src/lib/components/SavedBallotList.svelte b/src/lib/components/SavedBallotList.svelte
new file mode 100644
index 0000000..bf4c2dc
--- /dev/null
+++ b/src/lib/components/SavedBallotList.svelte
@@ -0,0 +1,74 @@
+
+
+{#snippet ballotItem(ballot: BallotItem)}
+
+ {ballot.eventName}
+
+{/snippet}
+
+{#if ballots.length === 0}
+ No past ballots found.
+{:else}
+ {#if openBallots.length}
+
+ Open
+ {#each openBallots as ballot (ballot.id)}
+ {@render ballotItem(ballot)}
+ {/each}
+
+ {/if}
+ {#if closedBallots.length}
+
+ Closed
+ {#each closedBallots.slice(0, 5) as ballot (ballot.id)}
+ {@render ballotItem(ballot)}
+ {/each}
+
+ {/if}
+{/if}
diff --git a/src/lib/components/SavedEventList.svelte b/src/lib/components/SavedEventList.svelte
new file mode 100644
index 0000000..2b6ca3b
--- /dev/null
+++ b/src/lib/components/SavedEventList.svelte
@@ -0,0 +1,79 @@
+
+
+{#snippet eventItem(event: EventItem)}
+
+ {event.name}
+
+{/snippet}
+
+{#if events.length === 0}
+ No past events found.
+{:else}
+ {#if openEvents.length}
+
+ Open
+ {#each openEvents as event (event.id)}
+ {@render eventItem(event)}
+ {/each}
+
+ {/if}
+ {#if closedEvents.length}
+
+ Closed
+ {#each closedEvents.slice(0, 5) as event (event.id)}
+ {@render eventItem(event)}
+ {/each}
+
+ {/if}
+{/if}
diff --git a/src/lib/storage/storage.ts b/src/lib/storage/storage.ts
index 739b06b..db69148 100644
--- a/src/lib/storage/storage.ts
+++ b/src/lib/storage/storage.ts
@@ -35,6 +35,14 @@ export class StorageManager {
this.data = await this.loadStorage();
};
+ hasBallots() {
+ return !!this.data.ballots;
+ }
+
+ hasEvents() {
+ return !!this.data.events;
+ }
+
getBallot(ballotID: number) {
if (!this.data.ballots) throw new ErrorBallotNotFound(ballotID);
if (ballotID in this.data.ballots) return this.data.ballots[ballotID];
@@ -66,6 +74,11 @@ export class StorageManager {
this.saveStorage(this.data);
}
+ deleteBallot(ballotID: number) {
+ if (this.data.ballots) delete this.data.ballots[ballotID];
+ this.saveStorage(this.data);
+ }
+
saveEvent(eventID: number, name: string, token: string) {
if (!this.data.events) {
this.data.events = {};
@@ -74,6 +87,11 @@ export class StorageManager {
this.saveStorage(this.data);
}
+ deleteEvent(eventID: number) {
+ if (this.data.events) delete this.data.events[eventID];
+ this.saveStorage(this.data);
+ }
+
async migrate(data: StorageData): Promise> {
let migratedData: StorageData = { ...data };
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte
index 9e07075..2a4ee15 100644
--- a/src/routes/+page.svelte
+++ b/src/routes/+page.svelte
@@ -1,6 +1,9 @@
@@ -14,5 +17,11 @@
+ {#if storage.hasEvents() || storage.hasEvents()}
+
+
+
or
+ {/if}
+
diff --git a/src/routes/event/[id=eventID]/components/registration.svelte b/src/routes/event/[id=eventID]/components/registration.svelte
index 51c5835..dfa99d8 100644
--- a/src/routes/event/[id=eventID]/components/registration.svelte
+++ b/src/routes/event/[id=eventID]/components/registration.svelte
@@ -79,6 +79,6 @@
{/if}
-