aboutsummaryrefslogtreecommitdiff
path: root/src/routes/groceries/+page.server.ts
diff options
context:
space:
mode:
authorMartin Kagamino Lehoux <martin@lehoux.net>2026-09-08 09:25:03 +0200
committerMartin Kagamino Lehoux <martin@lehoux.net>2026-09-08 09:25:03 +0200
commit3148742b323ab71f1ef768a2f4dc353c00944034 (patch)
tree8f88990514fb58d11a8669b58a7265dbd3420fe0 /src/routes/groceries/+page.server.ts
parent7d85a18867ca0fe2310218c63cfc696c0f916171 (diff)
Share grocery row component and list-page form actions
- GroceryRow.svelte renders the toggle row (checkbox, name, best ref, arrow link) for both the list and catalog pages - grocery-actions.ts grows full form actions: addCategoryAction, addGroceryAction, addGroceryAndEditAction, deleteByIdAction; the categories/groceries route servers become thin wrappers
Diffstat (limited to 'src/routes/groceries/+page.server.ts')
-rw-r--r--src/routes/groceries/+page.server.ts42
1 files changed, 7 insertions, 35 deletions
diff --git a/src/routes/groceries/+page.server.ts b/src/routes/groceries/+page.server.ts
index d0e0759..1cae275 100644
--- a/src/routes/groceries/+page.server.ts
+++ b/src/routes/groceries/+page.server.ts
@@ -1,14 +1,9 @@
-import { fail, redirect, error } from '@sveltejs/kit';
+import { loadUnchecked, loadAll } from '$lib/server/services/groceries';
import {
- loadUnchecked,
- loadAll,
- addOrUncheck,
-} from '$lib/server/services/groceries';
-import { toggleGroceryAction } from '$lib/server/services/grocery-actions';
-import {
- parseFormString,
- parseOptionalNumber,
-} from '$lib/server/services/validation';
+ addGroceryAction,
+ addGroceryAndEditAction,
+ toggleGroceryAction,
+} from '$lib/server/services/grocery-actions';
import type { EnrichedGrocery } from '$lib/server/services/groceries';
import type { Category } from '$lib/server/services/types';
import type { Actions, PageServerLoad } from './$types';
@@ -30,32 +25,9 @@ export const load: PageServerLoad = async () => {
};
export const actions: Actions = {
- add: async ({ request }) => {
- const data = await request.formData();
- const name = parseFormString(data.get('name'));
- const categoryId = parseOptionalNumber(data.get('category_id'));
-
- if (!name) {
- return fail(400, { error: 'Le nom est requis' });
- }
-
- await addOrUncheck(name, categoryId);
- const { items } = await loadUnchecked();
- return { success: true, items };
- },
+ add: ({ request }) => addGroceryAction(request),
toggle: ({ request }) => toggleGroceryAction(request),
- addAndEdit: async ({ request }) => {
- const data = await request.formData();
- const name = parseFormString(data.get('name'));
- const categoryId = parseOptionalNumber(data.get('category_id'));
-
- if (!name) {
- return fail(400, { error: 'Le nom est requis' });
- }
-
- const { item, created } = await addOrUncheck(name, categoryId);
- throw redirect(303, `/grocery/${item.id}`);
- },
+ addAndEdit: ({ request }) => addGroceryAndEditAction(request),
};