61 lines
1.8 KiB
TypeScript
61 lines
1.8 KiB
TypeScript
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<string[]>(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; |