From 0fdf77a8c37a42ef020d49173edfef857eab80b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Kr=C4=8Dek?= Date: Mon, 23 Jun 2025 18:07:23 +0200 Subject: [PATCH] Creator scaffolding --- package-lock.json | 9 +- package.json | 3 +- src/routes/private/creator/+page.server.ts | 61 +++++++++ src/routes/private/creator/+page.svelte | 122 ++++++++---------- .../creator/steps/StepConnectGoogle.svelte | 69 ++++++++++ .../creator/steps/StepCraftEmail.svelte | 1 + .../creator/steps/StepCreateEvent.svelte | 17 +++ .../private/creator/steps/StepOverview.svelte | 11 ++ .../creator/steps/StepUploadFiles.svelte | 34 +++++ 9 files changed, 260 insertions(+), 67 deletions(-) create mode 100644 src/routes/private/creator/+page.server.ts create mode 100644 src/routes/private/creator/steps/StepConnectGoogle.svelte create mode 100644 src/routes/private/creator/steps/StepCraftEmail.svelte create mode 100644 src/routes/private/creator/steps/StepCreateEvent.svelte create mode 100644 src/routes/private/creator/steps/StepOverview.svelte create mode 100644 src/routes/private/creator/steps/StepUploadFiles.svelte diff --git a/package-lock.json b/package-lock.json index 7fe9a7f..7bf4e88 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,8 @@ "@supabase/ssr": "^0.6.1", "@supabase/supabase-js": "^2.50.0", "@sveltejs/adapter-node": "^5.2.12", - "googleapis": "^150.0.1" + "googleapis": "^150.0.1", + "papaparse": "^5.5.3" }, "devDependencies": { "@sveltejs/kit": "^2.16.0", @@ -2497,6 +2498,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/papaparse": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.5.3.tgz", + "integrity": "sha512-5QvjGxYVjxO59MGU2lHVYpRWBBtKHnlIAcSe1uNFCkkptUh63NFRj0FJQm7nR67puEruUci/ZkjmEFrjCAyP4A==", + "license": "MIT" + }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", diff --git a/package.json b/package.json index bb5447b..d856c29 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "@supabase/ssr": "^0.6.1", "@supabase/supabase-js": "^2.50.0", "@sveltejs/adapter-node": "^5.2.12", - "googleapis": "^150.0.1" + "googleapis": "^150.0.1", + "papaparse": "^5.5.3" } } diff --git a/src/routes/private/creator/+page.server.ts b/src/routes/private/creator/+page.server.ts new file mode 100644 index 0000000..f324d97 --- /dev/null +++ b/src/routes/private/creator/+page.server.ts @@ -0,0 +1,61 @@ +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 }) { + console.log("▶️ fetching events…"); + + 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(); + console.log(Array.from(formData.entries())); + console.log('create_event date', formData.get("date"), formData.get("name"), formData.get("description")); + 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 + }); + + // 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/creator/+page.svelte b/src/routes/private/creator/+page.svelte index 0489a10..83681d0 100644 --- a/src/routes/private/creator/+page.svelte +++ b/src/routes/private/creator/+page.svelte @@ -1,75 +1,67 @@ -{#if !authorized} -
-

You haven’t connected your Google account yet.

- -
-{:else} - - -
- - - + +
+ +

{JSON.stringify(new_event)}

\ No newline at end of file diff --git a/src/routes/private/creator/steps/StepOverview.svelte b/src/routes/private/creator/steps/StepOverview.svelte new file mode 100644 index 0000000..f961fb8 --- /dev/null +++ b/src/routes/private/creator/steps/StepOverview.svelte @@ -0,0 +1,11 @@ + + +

New event:

+{JSON.stringify(new_event)} + + +
+

Participants

+{JSON.stringify(participants)} \ No newline at end of file diff --git a/src/routes/private/creator/steps/StepUploadFiles.svelte b/src/routes/private/creator/steps/StepUploadFiles.svelte new file mode 100644 index 0000000..1858ed3 --- /dev/null +++ b/src/routes/private/creator/steps/StepUploadFiles.svelte @@ -0,0 +1,34 @@ + + +
+ + + +
+ +{JSON.stringify(participants)} + +{#if participants.length === 0} +

No participants added yet.

+{/if} + +{#if participants.length > 0} + +{/if}