diff --git a/frontend/src/lib/types.ts b/frontend/src/lib/types.ts index 6c99f94..e622736 100644 --- a/frontend/src/lib/types.ts +++ b/frontend/src/lib/types.ts @@ -129,7 +129,7 @@ export interface BonusProgress { memberColor: string current: number criteriaValue: number - reward: { id: string; claimed: boolean } | null + reward: { id: string; status: string } | null state: BonusState achieved: boolean } diff --git a/frontend/src/routes/[fam]/[username]/bonuses/+page.server.ts b/frontend/src/routes/[fam]/[username]/bonuses/+page.server.ts index 091b401..1f0a74f 100644 --- a/frontend/src/routes/[fam]/[username]/bonuses/+page.server.ts +++ b/frontend/src/routes/[fam]/[username]/bonuses/+page.server.ts @@ -95,24 +95,20 @@ export const actions = { if (!event.locals.session) throw redirect(303, '/login'); const famId = event.locals.session.famId; const fd = await event.request.formData(); - const templateId = fd.get('templateId') as string; + const data: Record = { + name: fd.get('name'), + description: fd.get('description') || '', + target: fd.get('target'), + type: fd.get('type'), + occurrence: fd.get('occurrence'), + rewardType: fd.get('rewardType'), + rewardValue: fd.get('rewardValue'), + criteriaValue: parseInt(fd.get('criteriaValue') as string, 10) || 0, + period: fd.get('period') || '', + memberId: fd.get('memberId') || '', + phase: 'active', + }; try { - const templates = await hono.admin.bonusConfigs(event, famId); - const tmpl = (Array.isArray(templates) ? templates : []).find((c: any) => c.id === templateId); - if (!tmpl) return fail(400, { error: 'Template not found' }); - const data: Record = { - name: tmpl.name, - description: tmpl.description || '', - target: tmpl.target, - type: tmpl.type, - occurrence: tmpl.occurrence, - rewardType: tmpl.rewardType, - rewardValue: tmpl.rewardValue, - criteriaValue: tmpl.criteriaValue || 0, - period: tmpl.period || '', - memberId: tmpl.memberId || '', - phase: 'ready', - }; const record = await hono.admin.create(event, 'bonus-configs', famId, data); return { record }; } catch (e) { diff --git a/frontend/src/routes/[fam]/[username]/bonuses/+page.svelte b/frontend/src/routes/[fam]/[username]/bonuses/+page.svelte index 2febabf..d24055a 100644 --- a/frontend/src/routes/[fam]/[username]/bonuses/+page.svelte +++ b/frontend/src/routes/[fam]/[username]/bonuses/+page.svelte @@ -1,10 +1,10 @@ @@ -239,7 +230,7 @@
-
{ return async ({ result, formData }) => { if (result.type === 'success') { const id = formData.get('id'); templates = templates.filter((t) => t.id !== id) as ChoreTemplate[]; if (famStore.fam?.featureFlags?.optimisticUpdates) { const rec = result.data.record; if (rec) famStore.applyRecord('chore_templates', { ...rec, id }, 'delete'); } } }; }}> + { return async ({ result, formData }) => { if (result.type === 'success') { const id = formData.get('id'); templates = templates.filter((t) => t.id !== id) as ChoreTemplate[]; } }; }}>
diff --git a/frontend/src/routes/[fam]/[username]/rewards/+page.svelte b/frontend/src/routes/[fam]/[username]/rewards/+page.svelte index 6f6d3c0..c5e8b6a 100644 --- a/frontend/src/routes/[fam]/[username]/rewards/+page.svelte +++ b/frontend/src/routes/[fam]/[username]/rewards/+page.svelte @@ -98,7 +98,7 @@ {#if outstanding} -
{ return async (args: any) => { const d = args.result.data || {}; if (d.error) showToast(d.error); else if (args.result.type === 'success') { if (d.record && famStore.fam?.featureFlags?.optimisticUpdates) famStore.applyRecord('rewards', d.record, 'update'); fire(); } }; }}> + { return async (args: any) => { const d = args.result.data || {}; if (d.error) showToast(d.error); else if (args.result.type === 'success') { fire(); } }; }}>
diff --git a/frontend/src/routes/[fam]/[username]/settings/+page.svelte b/frontend/src/routes/[fam]/[username]/settings/+page.svelte index 67ef1b0..c9d14b3 100644 --- a/frontend/src/routes/[fam]/[username]/settings/+page.svelte +++ b/frontend/src/routes/[fam]/[username]/settings/+page.svelte @@ -167,16 +167,11 @@ import { onDestroy } from 'svelte';