From 9fb76cbc8b91664a86fcc171527d6e3564cec71d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Kr=C4=8Dek?= Date: Fri, 27 Jun 2025 23:29:08 +0200 Subject: [PATCH] Move data processing to the browser for better responsivness and privacy --- .../private/events/creator/+page.server.ts | 61 -------- .../private/events/creator/+page.svelte | 12 +- .../creator/steps/StepCraftEmail.svelte | 85 ++++++++--- .../creator/steps/StepCreateEvent.svelte | 137 ++++++++++-------- .../events/creator/steps/StepOverview.svelte | 1 - .../creator/steps/StepUploadFiles.svelte | 65 --------- .../steps/StepUploadParticipants.svelte | 97 +++++++++++++ 7 files changed, 243 insertions(+), 215 deletions(-) delete mode 100644 src/routes/private/events/creator/+page.server.ts delete mode 100644 src/routes/private/events/creator/steps/StepUploadFiles.svelte create mode 100644 src/routes/private/events/creator/steps/StepUploadParticipants.svelte diff --git a/src/routes/private/events/creator/+page.server.ts b/src/routes/private/events/creator/+page.server.ts deleted file mode 100644 index 869e800..0000000 --- a/src/routes/private/events/creator/+page.server.ts +++ /dev/null @@ -1,61 +0,0 @@ -import type { Actions } from './$types'; -import { error as kitError } from '@sveltejs/kit'; -import Papa from 'papaparse'; -import { fail } from '@sveltejs/kit'; - -export async function load({ locals }) { - const { data: events, error } = await locals.supabase - .from('events') - .select('*') - .order('date', { ascending: true }); - - if (error) { - console.error('❌ supabase error:', error); - // optional: throw to render SvelteKit error page - throw kitError(500, 'Could not load events'); - } - - return { events }; -} - -export const actions = { - create: async (event) => { - const formData = await event.request.formData(); - let { data: new_event, error } = await event.locals.supabase.rpc("create_event", - { - "p_name": formData.get('name'), - "p_date": formData.get('date'), - "p_description": formData.get('description'), - }); - return { - new_event, - error - } - }, - participants: async (event) => { - const formData = await event.request.formData(); - const file = formData.get('participants') as File; - - let csvText = await file.text(); - - const { data: parsedRows, errors } = Papa.parse(csvText, { - skipEmptyLines: true, - header: false - }); - // Remove the first row (header) - if (parsedRows.length > 0) { - parsedRows.shift(); - } - - // Map each row to an object with keys: name, surname, email - const participants = parsedRows.map((row: string[]) => ({ - name: row[0], - surname: row[1], - email: row[2] - })); - - return { - participants, - } - } -} satisfies Actions; \ No newline at end of file diff --git a/src/routes/private/events/creator/+page.svelte b/src/routes/private/events/creator/+page.svelte index 84c74d5..fd4af95 100644 --- a/src/routes/private/events/creator/+page.svelte +++ b/src/routes/private/events/creator/+page.svelte @@ -3,7 +3,7 @@ import StepCraftEmail from "./steps/StepCraftEmail.svelte"; import StepCreateEvent from "./steps/StepCreateEvent.svelte"; import StepOverview from "./steps/StepOverview.svelte"; - import StepUploadFiles from "./steps/StepUploadFiles.svelte"; + import StepUploadParticipants from "./steps/StepUploadParticipants.svelte"; let { data, form } = $props(); @@ -13,8 +13,8 @@ let authorized = $state(false); $effect(() => { - if (form && form.new_event) { - event = form.new_event; + if (form && form.event) { + event = form.event; } if (form && form.participants) { participants = form.participants; @@ -25,7 +25,7 @@ const steps = [ StepConnectGoogle, StepCreateEvent, - StepUploadFiles, + StepUploadParticipants, StepCraftEmail, StepOverview ]; @@ -78,9 +78,9 @@ {#if step == 0} {:else if step == 1} - + {:else if step == 2} - + {:else if step == 3} {:else if step == 4} diff --git a/src/routes/private/events/creator/steps/StepCraftEmail.svelte b/src/routes/private/events/creator/steps/StepCraftEmail.svelte index 351ce70..9272f3e 100644 --- a/src/routes/private/events/creator/steps/StepCraftEmail.svelte +++ b/src/routes/private/events/creator/steps/StepCraftEmail.svelte @@ -1,25 +1,66 @@ -
-

Craft Email

- - -
\ No newline at end of file +{#if showForm} +
+

Craft Email

+ + + +
+{:else} + +
+
    +
  1. {email.subject}
  2. +
  3. {email.body}
  4. +
+
+{/if} \ No newline at end of file diff --git a/src/routes/private/events/creator/steps/StepCreateEvent.svelte b/src/routes/private/events/creator/steps/StepCreateEvent.svelte index 82b096a..024e441 100644 --- a/src/routes/private/events/creator/steps/StepCreateEvent.svelte +++ b/src/routes/private/events/creator/steps/StepCreateEvent.svelte @@ -1,71 +1,88 @@ +{#if showForm} +
+

Create Event

+ + + +
+{/if} -
-

Create Event

- - - - -
+{#if !showForm} + +{/if} -{#if Object.keys(event).length === 0} -
- {#if loading} - Loading... - {:else} - No event created yet... - {/if} -
-{:else} -
-
    -
  1. {event.name}
  2. -
  3. {event.date}
  4. -
  5. {event.description}
  6. -
-
-{/if} \ No newline at end of file +{#if !showForm} +
+ {#if loading} + Loading... + {:else if Object.keys(event).length > 0} +
    +
  1. {event.name}
  2. +
  3. {event.date}
  4. +
+ {:else} + No event created yet... + {/if} +
+{/if} diff --git a/src/routes/private/events/creator/steps/StepOverview.svelte b/src/routes/private/events/creator/steps/StepOverview.svelte index d0abdcb..cd77d45 100644 --- a/src/routes/private/events/creator/steps/StepOverview.svelte +++ b/src/routes/private/events/creator/steps/StepOverview.svelte @@ -23,7 +23,6 @@
  • Name: {event.name}
  • Date: {event.date}
  • -
  • Description: {event.description}
diff --git a/src/routes/private/events/creator/steps/StepUploadFiles.svelte b/src/routes/private/events/creator/steps/StepUploadFiles.svelte deleted file mode 100644 index 9d5e0f1..0000000 --- a/src/routes/private/events/creator/steps/StepUploadFiles.svelte +++ /dev/null @@ -1,65 +0,0 @@ - - -
-

Upload Participants

- - -
- -{#if participants.length === 0} -
- {#if loading} - Loading... - {:else} - No participants yet... - {/if} -
-{:else} -
-
    - {#each participants as p, i} -
  • -
    -
    {p.name} {p.surname}
    -
    {p.email}
    -
    -
  • - {/each} -
-
-{/if} diff --git a/src/routes/private/events/creator/steps/StepUploadParticipants.svelte b/src/routes/private/events/creator/steps/StepUploadParticipants.svelte new file mode 100644 index 0000000..a426cd0 --- /dev/null +++ b/src/routes/private/events/creator/steps/StepUploadParticipants.svelte @@ -0,0 +1,97 @@ + + +{#if showForm} +
+

Upload Participants

+ + +
+{:else} + +{/if} + +{#if !showForm} +
+ {#if loading} + Loading... + {:else if participants.length === 0} + No participants yet... + {:else} +
    + {#each participants as p, i} +
  • +
    +
    {p.name} {p.surname}
    +
    {p.email}
    +
    +
  • + {/each} +
+ {/if} +
+{/if}