From 86059feb104598d65823528232d5e3d6ab6db4b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Majdand=C5=BEi=C4=87?= Date: Wed, 12 Jun 2024 11:11:52 +0200 Subject: [PATCH] Make per100 editable and auto inferable --- src/lib/components/EmptyFoodComp.svelte | 29 ++++++++++++++++++++++++- src/lib/database/food.ts | 15 +++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/lib/components/EmptyFoodComp.svelte b/src/lib/components/EmptyFoodComp.svelte index 36b269d..9e62785 100644 --- a/src/lib/components/EmptyFoodComp.svelte +++ b/src/lib/components/EmptyFoodComp.svelte @@ -12,8 +12,14 @@ let name: string = '' let amount: string = '' let description: string = '' + let per100: string = '' + let per100Edited: boolean = false + let per100Element: HTMLTableCellElement async function update(event: KeyboardEvent & { currentTarget: (EventTarget & HTMLTableCellElement) }) { + if (!per100Edited && event.currentTarget === per100Element) + per100Edited = true + if (event.key == 'Enter') { item.food = name.trim() item.amount = parseInt(amount.trim()) @@ -22,6 +28,8 @@ name = '' amount = '' description = '' + per100 = '' + per100Edited = false if (dbFood.length == 0) { toast.error('Creating food returned 0 rows') @@ -37,6 +45,15 @@ return food }) } + + if (!per100Edited) + FoodService.GetLatestPer100(name.trim()).then((res) => { + if (res[1]) + // toast.error(res[1]) + return + + per100 = res[0].toString() + }) } @@ -46,6 +63,8 @@ scope="row"> @@ -56,11 +75,19 @@ on:keyup={update}> - + diff --git a/src/lib/database/food.ts b/src/lib/database/food.ts index a20b10e..2a6c4e4 100644 --- a/src/lib/database/food.ts +++ b/src/lib/database/food.ts @@ -47,6 +47,21 @@ order by date DESC; return [row, null] }, + async GetLatestPer100(food: string): Promise<[number, Err]> { + if (!food) return [-1, 'food is required'] + const rows: { per100: number }[] = await db.select<{ per100: number }[]>(` +select per100 +from food +where food = $1 + and per100 is not null +order by date desc +limit 1 + `, [food]) + if (!rows) return [-1, 'no data found'] + if (rows.length == 0) return [-1, 'no data found'] + // @ts-ignore + return [rows[0].per100, null] + }, async GetDaily(): Promise<[AggregatedFood[], Err]> { const rows = await db.select(`select ${aggColumns.join(', ')} from daily limit 100`) return [rows, null]