diff options
| author | Martin Kagamino Lehoux <martin@lehoux.net> | 2026-09-08 09:25:03 +0200 |
|---|---|---|
| committer | Martin Kagamino Lehoux <martin@lehoux.net> | 2026-09-08 09:25:03 +0200 |
| commit | 3148742b323ab71f1ef768a2f4dc353c00944034 (patch) | |
| tree | 8f88990514fb58d11a8669b58a7265dbd3420fe0 /src/routes/groceries/+page.server.ts | |
| parent | 7d85a18867ca0fe2310218c63cfc696c0f916171 (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.ts | 42 |
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), }; |
