Compare commits
10 Commits
f1ae897c7b
...
dev
Author | SHA1 | Date | |
---|---|---|---|
![]() |
4aefd36c68 | ||
dafff6d064 | |||
e81ead8e41 | |||
3adeb4d1ab | |||
84e0d2b944 | |||
800ac867f2 | |||
c8dd478419 | |||
8a794c8bad | |||
2596fc96b7 | |||
3ea4ce2767 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -11,3 +11,4 @@ target
|
||||
node_modules
|
||||
.vscode
|
||||
.idea
|
||||
main.log
|
||||
|
@@ -5,7 +5,7 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Svelte-Tauri</title>
|
||||
</head>
|
||||
<body id="app">
|
||||
<body id="app" class="overflow-hidden">
|
||||
<script type="module" src="/src/main.ts"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
21
src-tauri/Cargo.lock
generated
21
src-tauri/Cargo.lock
generated
@@ -2435,12 +2435,6 @@ version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
|
||||
|
||||
[[package]]
|
||||
name = "minisign-verify"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "933dca44d65cdd53b355d0b73d380a2ff5da71f87f036053188bf1eab6a19881"
|
||||
|
||||
[[package]]
|
||||
name = "miniz_oxide"
|
||||
version = "0.7.3"
|
||||
@@ -4475,7 +4469,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "77567d2b3b74de4588d544147142d02297f3eaa171a25a065252141d8597a516"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"base64 0.21.7",
|
||||
"bytes",
|
||||
"cocoa",
|
||||
"dirs-next",
|
||||
@@ -4492,7 +4485,6 @@ dependencies = [
|
||||
"http",
|
||||
"ignore",
|
||||
"indexmap 1.9.3",
|
||||
"minisign-verify",
|
||||
"nix 0.26.4",
|
||||
"notify-rust",
|
||||
"objc",
|
||||
@@ -4521,14 +4513,12 @@ dependencies = [
|
||||
"tauri-utils",
|
||||
"tempfile",
|
||||
"thiserror",
|
||||
"time",
|
||||
"tokio",
|
||||
"url",
|
||||
"uuid",
|
||||
"webkit2gtk",
|
||||
"webview2-com",
|
||||
"windows 0.39.0",
|
||||
"zip",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -6289,17 +6279,6 @@ dependencies = [
|
||||
"syn 2.0.66",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zip"
|
||||
version = "0.6.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261"
|
||||
dependencies = [
|
||||
"byteorder",
|
||||
"crc32fast",
|
||||
"crossbeam-utils",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zvariant"
|
||||
version = "4.1.1"
|
||||
|
@@ -25,7 +25,7 @@ features = ["derive"]
|
||||
|
||||
[dependencies.tauri]
|
||||
version = "1.6.5"
|
||||
features = ["api-all", "devtools", "updater"]
|
||||
features = ["api-all", "devtools"]
|
||||
|
||||
[dependencies.tauri-specta]
|
||||
version = "1.0.2"
|
||||
|
@@ -51,7 +51,7 @@
|
||||
"csp": null
|
||||
},
|
||||
"updater": {
|
||||
"active": true,
|
||||
"active": false,
|
||||
"windows": {
|
||||
"installMode": "passive"
|
||||
},
|
||||
|
@@ -1,7 +1,7 @@
|
||||
<script lang="ts">
|
||||
import { Line } from 'svelte-chartjs'
|
||||
import type { AggregatedFood } from '$lib/database/food'
|
||||
import AggregatedFoodComp from '$components/AggregatedFood/AggregatedFoodComp.svelte'
|
||||
import AggregatedFoodComp from '$components/Energy/AggregatedFood/AggregatedFoodComp.svelte'
|
||||
import type { ChartData, Point } from 'chart.js'
|
||||
import {
|
||||
CategoryScale,
|
||||
@@ -85,13 +85,13 @@
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<Line data="{data}" />
|
||||
<div class="relative flex flex-col h-screen" data-vaul-drawer-wrapper id="page">
|
||||
<Line data="{data}" class="max-h-[50vh] h-[50vh]" />
|
||||
<div class="relative flex flex-col h-[43vh]" data-vaul-drawer-wrapper id="page">
|
||||
<div class="relative overflow-x-auto shadow-md sm:rounded-lg">
|
||||
<table class="w-full text-sm text-left rtl:text-right text-gray-500 dark:text-gray-400">
|
||||
<thead class="text-xs text-gray-700 uppercase dark:text-gray-400">
|
||||
<tr>
|
||||
<th class="px-6 py-3 bg-gray-50 dark:bg-gray-800" scope="col">
|
||||
<th class="px-6 py-3 bg-gray-50 dark:bg-gray-800 w-2/12" scope="col">
|
||||
Period
|
||||
</th>
|
||||
<th class="px-6 py-3" scope="col">
|
@@ -2,7 +2,8 @@
|
||||
import { type Food, FoodService } from '$lib/database/food'
|
||||
import { toast } from 'svelte-sonner'
|
||||
import type { Err } from '$lib/types'
|
||||
import { foodStore } from '$lib/store/foodStore'
|
||||
import { foodStore } from '$lib/store/energy/foodStore'
|
||||
import { RefreshStores } from '$lib/utils'
|
||||
|
||||
let item: Food = {
|
||||
food: '',
|
||||
@@ -35,7 +36,7 @@
|
||||
const [dbFood, err]: [Food, Err] = await FoodService.Create(item)
|
||||
name = ''
|
||||
amount = ''
|
||||
description = ''
|
||||
// description = ''
|
||||
per100 = ''
|
||||
per100Edited = false
|
||||
|
||||
@@ -43,10 +44,7 @@
|
||||
toast.error(err)
|
||||
return
|
||||
}
|
||||
foodStore.update((food) => {
|
||||
food.unshift(dbFood)
|
||||
return food
|
||||
})
|
||||
RefreshStores()
|
||||
}
|
||||
|
||||
if (!per100Edited)
|
||||
@@ -93,7 +91,5 @@
|
||||
contenteditable="true"
|
||||
on:keydown={update}>
|
||||
</td>
|
||||
<td class="px-6 py-4">
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
@@ -12,31 +12,17 @@
|
||||
let name: string = item.food
|
||||
|
||||
async function update(event: KeyboardEvent & { currentTarget: (EventTarget & HTMLTableCellElement) }) {
|
||||
amount = amount.trim()
|
||||
per100 = per100.trim()
|
||||
description = description.trim()
|
||||
name = name.trim()
|
||||
|
||||
if (event.key == 'Enter') {
|
||||
event.preventDefault()
|
||||
item.food = name
|
||||
item.description = description
|
||||
item.amount = parseInt(amount)
|
||||
item.per100 = parseInt(per100)
|
||||
|
||||
const [newItem, err] = await FoodService.Update(item)
|
||||
|
||||
if (newItem && !err) {
|
||||
item = newItem
|
||||
}
|
||||
name = item.food
|
||||
description = item.description ?? ''
|
||||
amount = item.amount.toString()
|
||||
per100 = item.per100?.toString() ?? ''
|
||||
await updateItem()
|
||||
}
|
||||
}
|
||||
|
||||
async function focusOutUpdate() {
|
||||
await updateItem()
|
||||
}
|
||||
|
||||
async function updateItem() {
|
||||
amount = amount.trim()
|
||||
per100 = per100.trim()
|
||||
description = description.trim()
|
@@ -1,6 +1,6 @@
|
||||
<script lang="ts">
|
||||
import EmptyFoodComp from '$components/Food/EmptyFoodComp.svelte'
|
||||
import FoodComp from '$components/Food/FoodComp.svelte'
|
||||
import EmptyFoodComp from '$components/Energy/Food/EmptyFoodComp.svelte'
|
||||
import FoodComp from '$components/Energy/Food/FoodComp.svelte'
|
||||
import type { Food } from '$lib/database/food'
|
||||
import { GenerateColor } from '$lib/utils'
|
||||
|
||||
@@ -56,27 +56,27 @@
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="relative flex flex-col h-screen" data-vaul-drawer-wrapper id="page">
|
||||
<div class="relative overflow-x-auto shadow-md sm:rounded-lg">
|
||||
<div class="relative flex flex-col flex-grow h-[95vh]" data-vaul-drawer-wrapper id="page">
|
||||
<div class="relative overflow-auto h-full shadow-md sm:rounded-lg">
|
||||
<table class="w-full text-sm text-left rtl:text-right text-gray-500 dark:text-gray-400">
|
||||
<thead class="text-xs text-gray-700 uppercase dark:text-gray-400">
|
||||
<tr>
|
||||
<th class="px-6 py-3 bg-gray-50 dark:bg-gray-800" scope="col">
|
||||
<th class="px-6 py-3 bg-gray-50 dark:bg-gray-800 w-2/12" scope="col">
|
||||
Date
|
||||
</th>
|
||||
<th class="px-6 py-3" scope="col">
|
||||
<th class="px-6 py-3 w-3/12" scope="col">
|
||||
Food
|
||||
</th>
|
||||
<th class="px-6 py-3 bg-gray-50 dark:bg-gray-800" scope="col">
|
||||
<th class="px-6 py-3 bg-gray-50 dark:bg-gray-800 w-4/12" scope="col">
|
||||
Description
|
||||
</th>
|
||||
<th class="px-6 py-3" scope="col">
|
||||
<th class="px-6 py-3 w-1/12" scope="col">
|
||||
Amount
|
||||
</th>
|
||||
<th class="px-6 py-3 bg-gray-50 dark:bg-gray-800" scope="col">
|
||||
<th class="px-6 py-3 bg-gray-50 dark:bg-gray-800 w-1/12" scope="col">
|
||||
Cal Per 100
|
||||
</th>
|
||||
<th class="px-6 py-3" scope="col">
|
||||
<th class="px-6 py-3 w-1/12" scope="col">
|
||||
Energy
|
||||
</th>
|
||||
</tr>
|
@@ -1,7 +1,6 @@
|
||||
<script lang="ts">
|
||||
import { appWindow } from '@tauri-apps/api/window'
|
||||
import { faWindowMinimize, faXmark } from '@fortawesome/free-solid-svg-icons'
|
||||
import { faGithub } from '@fortawesome/free-brands-svg-icons'
|
||||
import Fa from 'svelte-fa'
|
||||
import { link, location } from 'svelte-spa-router'
|
||||
import { Button } from '$components/ui/button'
|
||||
@@ -10,7 +9,7 @@
|
||||
import { cn } from '$lib/utils'
|
||||
import { dbStateStore } from '$lib/store/dbState'
|
||||
import { DBService } from '$lib/database'
|
||||
import { lookbackDaysStore } from '$lib/store/lookbackDaysStore'
|
||||
import { lookbackDaysStore } from '$lib/store/energy/lookbackDaysStore'
|
||||
|
||||
Fa
|
||||
|
||||
@@ -18,36 +17,47 @@
|
||||
type Link = {
|
||||
label: string
|
||||
href: string
|
||||
base: string?
|
||||
}
|
||||
const links: Link[] = [
|
||||
{
|
||||
label: 'Home',
|
||||
href: '/'
|
||||
},
|
||||
let sublinks: Link[] = [
|
||||
{
|
||||
label: 'Daily',
|
||||
href: '/daily'
|
||||
href: '/daily',
|
||||
base: '/daily'
|
||||
},
|
||||
{
|
||||
label: 'Weekly',
|
||||
href: '/weekly'
|
||||
href: '/weekly',
|
||||
base: '/weekly'
|
||||
},
|
||||
{
|
||||
label: 'Monthly',
|
||||
href: '/monthly'
|
||||
href: '/monthly',
|
||||
base: '/monthly'
|
||||
},
|
||||
{
|
||||
label: 'Yearly',
|
||||
href: '/yearly'
|
||||
href: '/yearly',
|
||||
base: '/yearly'
|
||||
}
|
||||
]
|
||||
|
||||
let selected = 'Energy'
|
||||
$: {
|
||||
console.log('update')
|
||||
sublinks = sublinks.map((sublink: Link) => {
|
||||
return {
|
||||
...sublink,
|
||||
href: `/${selected}${sublink.base}`
|
||||
}
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
||||
<header
|
||||
class="flex h-14 items-center justify-between bg-base-100 shadow-lg sticky top-0 z-50 border-b
|
||||
class="flex h-22 items-center justify-between bg-base-100 shadow-lg sticky top-0 z-50 border-b
|
||||
border-border/40 bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60"
|
||||
data-tauri-drag-region
|
||||
>
|
||||
data-tauri-drag-region>
|
||||
<Button class="ml-2" on:click={toggleMode} size="icon" variant="outline">
|
||||
<Sun
|
||||
class="h-[1.2rem] w-[1.2rem] rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0"
|
||||
@@ -58,38 +68,40 @@
|
||||
<span class="sr-only">Toggle theme</span>
|
||||
</Button>
|
||||
|
||||
<nav
|
||||
class="flex space-x-4 text-xl font-bold select-none"
|
||||
on:dragstart|preventDefault
|
||||
>
|
||||
<div>
|
||||
<nav class="flex space-x-4 text-2xl font-bold select-none justify-center">
|
||||
<div class="cursor-pointer" class:text-amber-500="{$dbStateStore.transacting}" on:click={DBService.Begin}>T
|
||||
</div>
|
||||
<div class="cursor-pointer" class:text-emerald-600={$dbStateStore.transacting} on:click={DBService.Commit}>C
|
||||
</div>
|
||||
<div class="cursor-pointer" class:text-red-700={$dbStateStore.transacting} on:click={DBService.Rollback}>R</div>
|
||||
<div class="cursor-pointer" class:text-red-700={$dbStateStore.transacting} on:click={DBService.Rollback}>R
|
||||
</div>
|
||||
<div contenteditable="true" bind:innerText={$lookbackDaysStore}></div>
|
||||
{#each links as { href, label }}
|
||||
<a
|
||||
use:link
|
||||
<a use:link
|
||||
class={cn(
|
||||
'transition-colors hover:text-foreground/80',
|
||||
"/" === $location ? '' : 'text-foreground/60')}
|
||||
href="/"
|
||||
on:click={e => selected = 'Energy'}>Energy</a>
|
||||
<a use:link
|
||||
class={cn(
|
||||
'transition-colors hover:text-foreground/80',
|
||||
"/Weight" === $location ? '' : 'text-foreground/60')}
|
||||
href="/Weight"
|
||||
on:click={e => selected = 'Weight'}>Weight</a>
|
||||
</nav>
|
||||
<nav class="flex space-x-4 text-2xl font-bold select-none justify-center">
|
||||
{#each sublinks as { label, href }}
|
||||
<a use:link
|
||||
{href}
|
||||
class={cn(
|
||||
'transition-colors hover:text-foreground/80',
|
||||
href === $location ? '' : 'text-foreground/60'
|
||||
)}>{label}</a
|
||||
>
|
||||
href === $location ? '' : 'text-foreground/60')}>{label}</a>
|
||||
{/each}
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
<div class="flex h-full [&>*]:px-2 [&>*]:transition-all">
|
||||
<a
|
||||
class="flex items-center hover:text-secondary"
|
||||
href="https://github.com/Fractal-Tess/Svelte-Tauri"
|
||||
on:dragstart|preventDefault
|
||||
rel="noreferrer noopener"
|
||||
target="_blank"
|
||||
>
|
||||
<Fa icon={faGithub} size="lg" />
|
||||
</a>
|
||||
<button class="text-xl hover:text-secondary" on:click={appWindow.minimize}>
|
||||
<Fa icon={faWindowMinimize} />
|
||||
</button>
|
||||
|
@@ -0,0 +1,17 @@
|
||||
<script lang="ts">
|
||||
import type { AggregatedWeight } from '$lib/database/weight'
|
||||
|
||||
export let item: AggregatedWeight
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<tr class="border-b border-gray-200 dark:border-gray-700">
|
||||
<th class="px-6 py-4 font-medium text-gray-900 whitespace-nowrap bg-gray-50 dark:text-white dark:bg-gray-800"
|
||||
scope="row">
|
||||
{item.period}
|
||||
</th>
|
||||
<td class="px-6 py-4">
|
||||
{item.amount}
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
@@ -0,0 +1,85 @@
|
||||
<script lang="ts">
|
||||
import { Line } from 'svelte-chartjs'
|
||||
import type { AggregatedFood } from '$lib/database/food'
|
||||
import AggregatedFoodComp from '$components/Energy/AggregatedFood/AggregatedFoodComp.svelte'
|
||||
import type { ChartData, Point } from 'chart.js'
|
||||
import {
|
||||
CategoryScale,
|
||||
Chart as ChartJS,
|
||||
Legend,
|
||||
LinearScale,
|
||||
LineElement,
|
||||
PointElement,
|
||||
Title,
|
||||
Tooltip
|
||||
} from 'chart.js'
|
||||
import type { AggregatedWeight } from '$lib/database/weight'
|
||||
import AggregatedWeightComp from '$components/Weight/Aggregated/AggregatedWeightComp.svelte'
|
||||
|
||||
ChartJS.register(
|
||||
Title,
|
||||
Tooltip,
|
||||
Legend,
|
||||
LineElement,
|
||||
LinearScale,
|
||||
PointElement,
|
||||
CategoryScale
|
||||
)
|
||||
|
||||
export let items: AggregatedWeight[] = []
|
||||
let reversedItems = items.slice().reverse()
|
||||
|
||||
const defaultOptions = {
|
||||
backgroundColor: 'rgba(225, 204,230, .3)',
|
||||
borderColor: 'rgb(205, 130, 158)',
|
||||
pointBorderColor: 'rgb(205, 130, 158)',
|
||||
pointBackgroundColor: 'rgb(255, 255, 255)',
|
||||
pointBorderWidth: 10,
|
||||
pointHoverRadius: 5,
|
||||
pointHoverBackgroundColor: 'rgb(0, 157, 123)',
|
||||
pointHoverBorderColor: 'rgba(220, 220, 220, 1)',
|
||||
pointHoverBorderWidth: 2,
|
||||
pointRadius: 1,
|
||||
pointHitRadius: 10
|
||||
}
|
||||
const data: ChartData<'line', (number | Point)[]> = {
|
||||
labels: reversedItems.map(f => f.period),
|
||||
datasets: [
|
||||
{
|
||||
...defaultOptions,
|
||||
label: 'Amount',
|
||||
data: reversedItems.map(f => f.amount),
|
||||
borderColor: '#ff4dff',
|
||||
pointBorderColor: '#ff4dff',
|
||||
},
|
||||
]
|
||||
}
|
||||
console.log('aaaaaaaaaa')
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<Line data="{data}" class="max-h-[50vh] h-[50vh]" />
|
||||
<div class="relative flex flex-col h-[43vh]" data-vaul-drawer-wrapper id="page">
|
||||
<div class="relative overflow-x-auto shadow-md sm:rounded-lg">
|
||||
<table class="w-full text-sm text-left rtl:text-right text-gray-500 dark:text-gray-400">
|
||||
<thead class="text-xs text-gray-700 uppercase dark:text-gray-400">
|
||||
<tr>
|
||||
<th class="px-6 py-3 bg-gray-50 dark:bg-gray-800 w-2/12" scope="col">
|
||||
Period
|
||||
</th>
|
||||
<th class="px-6 py-3" scope="col">
|
||||
Amount
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{#each items as f}
|
||||
<AggregatedWeightComp item="{f}" />
|
||||
{/each}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
47
src/lib/components/Weight/EmptyWeightComp.svelte
Normal file
47
src/lib/components/Weight/EmptyWeightComp.svelte
Normal file
@@ -0,0 +1,47 @@
|
||||
<script lang="ts">
|
||||
import { toast } from 'svelte-sonner'
|
||||
import type { Err } from '$lib/types'
|
||||
import { type Weight, WeightService } from '$lib/database/weight'
|
||||
import { weightStore } from '$lib/store/weight/weightStore'
|
||||
import { RefreshStores } from '$lib/utils'
|
||||
|
||||
let item: Weight = {
|
||||
weight: 0
|
||||
}
|
||||
let weight: string | null = null
|
||||
|
||||
async function update(event: KeyboardEvent & { currentTarget: (EventTarget & HTMLTableCellElement) }) {
|
||||
if (!weight) return
|
||||
weight = weight.trim()
|
||||
|
||||
if (event.key == 'Enter') {
|
||||
event.preventDefault()
|
||||
item.weight = parseFloat(weight)
|
||||
|
||||
const [dbRow, err]: [Weight, Err] = await WeightService.Create(item)
|
||||
weight = ''
|
||||
|
||||
if (err) {
|
||||
toast.error(err)
|
||||
return
|
||||
}
|
||||
RefreshStores()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<tr class="border-b border-gray-200 dark:border-gray-700 text-lg font-bold">
|
||||
<th class="px-6 py-4 font-medium text-gray-900 whitespace-nowrap bg-gray-50 dark:text-white dark:bg-gray-800"
|
||||
scope="row">
|
||||
</th>
|
||||
<td bind:innerText={weight}
|
||||
class:border-[3px]={!weight}
|
||||
class:border-red-600={!weight}
|
||||
class="px-6 py-4 overflow-hidden"
|
||||
contenteditable="true"
|
||||
autofocus
|
||||
on:keydown={update}>
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
45
src/lib/components/Weight/WeightComp.svelte
Normal file
45
src/lib/components/Weight/WeightComp.svelte
Normal file
@@ -0,0 +1,45 @@
|
||||
<script lang="ts">
|
||||
import { type Weight, WeightService } from '$lib/database/weight'
|
||||
|
||||
export let item: Weight
|
||||
export let dateColor: string
|
||||
|
||||
let weight: string = item.weight.toString()
|
||||
|
||||
async function update(event: KeyboardEvent & { currentTarget: (EventTarget & HTMLTableCellElement) }) {
|
||||
if (event.key == 'Enter') {
|
||||
event.preventDefault()
|
||||
await updateItem()
|
||||
}
|
||||
}
|
||||
|
||||
async function focusOutUpdate() {
|
||||
await updateItem()
|
||||
}
|
||||
|
||||
async function updateItem() {
|
||||
weight = weight.trim()
|
||||
|
||||
item.weight = weight
|
||||
|
||||
const [newItem, err] = await WeightService.Update(item)
|
||||
|
||||
if (newItem && !err) {
|
||||
item = newItem
|
||||
}
|
||||
weight = item.weight
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<tr class="border-b border-gray-200 dark:border-gray-700 font-bold text-lg">
|
||||
<th class="px-6 py-4 font-medium text-gray-900 whitespace-nowrap bg-gray-50 dark:text-white dark:bg-gray-800"
|
||||
style="color: {dateColor}"
|
||||
scope="row">
|
||||
{item.date}
|
||||
</th>
|
||||
<td class="px-6 py-4">
|
||||
{item.weight}
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
50
src/lib/components/Weight/WeightTable.svelte
Normal file
50
src/lib/components/Weight/WeightTable.svelte
Normal file
@@ -0,0 +1,50 @@
|
||||
<script lang="ts">
|
||||
import { GenerateColor } from '$lib/utils'
|
||||
import EmptyWeightComp from '$components/Weight/EmptyWeightComp.svelte'
|
||||
import WeightComp from '$components/Weight/WeightComp.svelte'
|
||||
import type { Weight } from '$lib/database/weight'
|
||||
|
||||
export let items: Weight[] = []
|
||||
|
||||
const dateColors: Map<string, string> = new Map<string, string>()
|
||||
|
||||
function getDateColor(item: Weight): string {
|
||||
if (!item) return GenerateColor()
|
||||
if (!item.date) return GenerateColor()
|
||||
const date = item.date.toString().split(' ')[0]
|
||||
if (!date) return GenerateColor()
|
||||
if (!dateColors.has(date)) dateColors.set(date, GenerateColor())
|
||||
// THERE'S NOTHING UNDEFINED HERE
|
||||
// WE GOT RID OF UNDEFINED ON LINE 33
|
||||
// ASSHOLE
|
||||
// @ts-ignore
|
||||
return dateColors.get(date)
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="relative flex flex-col flex-grow h-[95vh]" data-vaul-drawer-wrapper id="page">
|
||||
<div class="relative overflow-auto h-full shadow-md sm:rounded-lg">
|
||||
<table class="w-full text-sm text-left rtl:text-right text-gray-500 dark:text-gray-400">
|
||||
<thead class="text-xs text-gray-700 uppercase dark:text-gray-400">
|
||||
<tr>
|
||||
<th class="px-6 py-3 bg-gray-50 dark:bg-gray-800 w-2/12" scope="col">
|
||||
Date
|
||||
</th>
|
||||
<th class="px-6 py-3 w-10/12" scope="col">
|
||||
Weight
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<EmptyWeightComp />
|
||||
{#each items as f}
|
||||
<WeightComp item="{f}" dateColor="{getDateColor(f)}" />
|
||||
{/each}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
@@ -1,6 +1,6 @@
|
||||
import { db } from '$lib/database'
|
||||
import type { Err } from '$lib/types'
|
||||
import { lookbackDaysStore } from '$lib/store/lookbackDaysStore'
|
||||
import { lookbackDaysStore } from '$lib/store/energy/lookbackDaysStore'
|
||||
import { get } from 'svelte/store'
|
||||
|
||||
export type Food = {
|
||||
|
77
src/lib/database/weight.ts
Normal file
77
src/lib/database/weight.ts
Normal file
@@ -0,0 +1,77 @@
|
||||
import { db } from '$lib/database'
|
||||
import type { Err } from '$lib/types'
|
||||
import { lookbackDaysStore } from '$lib/store/energy/lookbackDaysStore'
|
||||
import { get } from 'svelte/store'
|
||||
|
||||
export type Weight = {
|
||||
rowid?: number,
|
||||
date?: Date,
|
||||
weight: number,
|
||||
}
|
||||
export type AggregatedWeight = {
|
||||
period: string,
|
||||
amount: number,
|
||||
}
|
||||
|
||||
const columns = ['rowid', 'date', 'weight']
|
||||
const aggColumns = ['period', 'amount']
|
||||
|
||||
const WeightService = {
|
||||
async GetAll() {
|
||||
return await db.select<Weight[]>(`
|
||||
select ${columns.join(', ')}
|
||||
from food
|
||||
order by date desc
|
||||
`)
|
||||
},
|
||||
async GetRecent() {
|
||||
return await db.select<Weight[]>(`
|
||||
select ${columns.join(', ')}
|
||||
from weightView
|
||||
where date > datetime('now', "-${get(lookbackDaysStore)} days")
|
||||
order by date DESC;
|
||||
`)
|
||||
},
|
||||
async Create(entry: Weight): Promise<[Weight, Err]> {
|
||||
if (!entry.weight) return [entry, 'entry.weight is required']
|
||||
|
||||
const res = await db.execute(`insert into weight (weight) values ($1)`, [entry.weight])
|
||||
const rows = await db.select<Weight[]>(`select ${columns.join(', ')} from weightView where rowid = $1`, [res.lastInsertId])
|
||||
|
||||
if (!rows) return [entry, 'no data found']
|
||||
if (rows.length == 0) return [entry, 'no data found']
|
||||
// Its not undefined mannnnnnnnnnnnnnnnnnnnnnnnnn............
|
||||
// @ts-ignore
|
||||
return [rows[0], null]
|
||||
},
|
||||
async GetDaily(): Promise<[AggregatedWeight[], Err]> {
|
||||
const rows = await db.select<AggregatedWeight[]>(`select ${aggColumns.join(', ')} from weightDaily limit 100`)
|
||||
return [rows, null]
|
||||
},
|
||||
async GetWeekly(): Promise<[AggregatedWeight[], Err]> {
|
||||
const rows = await db.select<AggregatedWeight[]>(`select ${aggColumns.join(', ')} from weightWeekly limit 100`)
|
||||
return [rows, null]
|
||||
},
|
||||
async GetMonthly(): Promise<[AggregatedWeight[], Err]> {
|
||||
const rows = await db.select<AggregatedWeight[]>(`select ${aggColumns.join(', ')} from weightMonthly limit 100`)
|
||||
return [rows, null]
|
||||
},
|
||||
async GetYearly(): Promise<[AggregatedWeight[], Err]> {
|
||||
const rows = await db.select<AggregatedWeight[]>(`select ${aggColumns.join(', ')} from weightYearly limit 100`)
|
||||
return [rows, null]
|
||||
},
|
||||
async Update(entry: Weight): Promise<[Weight, Err]> {
|
||||
await db.execute(`
|
||||
update weight set
|
||||
weight = $1,
|
||||
where rowid = $2
|
||||
`, [entry.weight, entry.rowid])
|
||||
const res = await db.select<Weight[]>(`select ${columns.join(', ')} from weightView where rowid = $1`, [entry.rowid])
|
||||
if (!res) return [entry, 'no data found']
|
||||
if (res.length == 0) return [entry, 'no data found']
|
||||
if (!res[0]) return [entry, 'no data found']
|
||||
return [res[0], null]
|
||||
}
|
||||
}
|
||||
|
||||
export { WeightService }
|
@@ -1,18 +1,27 @@
|
||||
<script lang="ts">
|
||||
import Router from 'svelte-spa-router'
|
||||
|
||||
import Home from '$lib/router/routes/Home.svelte'
|
||||
import Daily from '$router/routes/Daily.svelte'
|
||||
import Weekly from '$router/routes/Weekly.svelte'
|
||||
import Monthly from '$router/routes/Monthly.svelte'
|
||||
import Yearly from '$router/routes/Yearly.svelte'
|
||||
import Daily from '$router/routes/Energy/Daily.svelte'
|
||||
import Weekly from '$router/routes/Energy/Weekly.svelte'
|
||||
import Monthly from '$router/routes/Energy/Monthly.svelte'
|
||||
import Yearly from '$router/routes/Energy/Yearly.svelte'
|
||||
import Energy from '$router/routes/Energy/Energy.svelte'
|
||||
import Weight from '$router/routes/Weight/Weight.svelte'
|
||||
import WDaily from '$router/routes/Weight/WDaily.svelte'
|
||||
import WWeekly from '$router/routes/Weight/WWeekly.svelte'
|
||||
import WMonthly from '$router/routes/Weight/WMonthly.svelte'
|
||||
import WYearly from '$router/routes/Weight/WYearly.svelte'
|
||||
|
||||
const routes = {
|
||||
'/': Home,
|
||||
'/daily': Daily,
|
||||
'/weekly': Weekly,
|
||||
'/monthly': Monthly,
|
||||
'/yearly': Yearly
|
||||
'/': Energy,
|
||||
'/Energy/daily': Daily,
|
||||
'/Energy/weekly': Weekly,
|
||||
'/Energy/monthly': Monthly,
|
||||
'/Energy/yearly': Yearly,
|
||||
'/Weight': Weight,
|
||||
'/Weight/daily': WDaily,
|
||||
'/Weight/weekly': WWeekly,
|
||||
'/Weight/monthly': WMonthly,
|
||||
'/Weight/yearly': WYearly
|
||||
}
|
||||
</script>
|
||||
|
||||
|
@@ -1,11 +0,0 @@
|
||||
<script lang="ts">
|
||||
import AggregatedFoodTable from '$components/AggregatedFood/AggregatedFoodTable.svelte'
|
||||
import { dailyFoodStore } from '$lib/store/dailyFoodStore'
|
||||
import { energyStore } from '$lib/store/energyStore'
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<AggregatedFoodTable items="{$dailyFoodStore}"
|
||||
energyLimit="{$energyStore.limit}"
|
||||
energyTarget="{$energyStore.target}" />
|
||||
</template>
|
11
src/lib/router/routes/Energy/Daily.svelte
Normal file
11
src/lib/router/routes/Energy/Daily.svelte
Normal file
@@ -0,0 +1,11 @@
|
||||
<script lang="ts">
|
||||
import AggregatedFoodTable from '$components/Energy/AggregatedFood/AggregatedFoodTable.svelte'
|
||||
import { dailyFoodStore } from '$lib/store/energy/dailyFoodStore'
|
||||
import { energyStore } from '$lib/store/energy/energyStore'
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<AggregatedFoodTable items="{$dailyFoodStore}"
|
||||
energyLimit="{$energyStore.limit}"
|
||||
energyTarget="{$energyStore.target}" />
|
||||
</template>
|
11
src/lib/router/routes/Energy/Energy.svelte
Normal file
11
src/lib/router/routes/Energy/Energy.svelte
Normal file
@@ -0,0 +1,11 @@
|
||||
<script lang="ts">
|
||||
import { foodStore } from '$lib/store/energy/foodStore'
|
||||
import FoodTable from '$components/Energy/Food/FoodTable.svelte'
|
||||
import { lookbackDaysStore } from '$lib/store/energy/lookbackDaysStore'
|
||||
import { RefreshStores } from '$lib/utils'
|
||||
lookbackDaysStore.subscribe((n) => RefreshStores())
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<FoodTable items="{$foodStore}" />
|
||||
</template>
|
@@ -1,7 +1,7 @@
|
||||
<script lang="ts">
|
||||
import AggregatedFoodTable from '$components/AggregatedFood/AggregatedFoodTable.svelte'
|
||||
import { monthlyFoodStore } from '$lib/store/monthlyFoodStore'
|
||||
import { energyStore } from '$lib/store/energyStore'
|
||||
import AggregatedFoodTable from '$components/Energy/AggregatedFood/AggregatedFoodTable.svelte'
|
||||
import { monthlyFoodStore } from '$lib/store/energy/monthlyFoodStore'
|
||||
import { energyStore } from '$lib/store/energy/energyStore'
|
||||
</script>
|
||||
|
||||
<template>
|
@@ -1,7 +1,7 @@
|
||||
<script lang="ts">
|
||||
import AggregatedFoodTable from '$components/AggregatedFood/AggregatedFoodTable.svelte'
|
||||
import { energyStore } from '$lib/store/energyStore'
|
||||
import { weeklyFoodStore } from '$lib/store/weeklyFoodStore'
|
||||
import AggregatedFoodTable from '$components/Energy/AggregatedFood/AggregatedFoodTable.svelte'
|
||||
import { energyStore } from '$lib/store/energy/energyStore'
|
||||
import { weeklyFoodStore } from '$lib/store/energy/weeklyFoodStore'
|
||||
</script>
|
||||
|
||||
<template>
|
@@ -1,7 +1,7 @@
|
||||
<script lang="ts">
|
||||
import AggregatedFoodTable from '$components/AggregatedFood/AggregatedFoodTable.svelte'
|
||||
import { yearlyFoodStore } from '$lib/store/yearlyFoodStore'
|
||||
import { energyStore } from '$lib/store/energyStore'
|
||||
import AggregatedFoodTable from '$components/Energy/AggregatedFood/AggregatedFoodTable.svelte'
|
||||
import { yearlyFoodStore } from '$lib/store/energy/yearlyFoodStore'
|
||||
import { energyStore } from '$lib/store/energy/energyStore'
|
||||
</script>
|
||||
|
||||
<template>
|
@@ -1,11 +0,0 @@
|
||||
<script lang="ts">
|
||||
import { foodStore } from '$lib/store/foodStore'
|
||||
import FoodTable from '$components/Food/FoodTable.svelte'
|
||||
import { lookbackDaysStore } from '$lib/store/lookbackDaysStore'
|
||||
// @ts-ignore
|
||||
lookbackDaysStore.subscribe((n) => foodStore.refresh())
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<FoodTable items="{$foodStore}" />
|
||||
</template>
|
8
src/lib/router/routes/Weight/WDaily.svelte
Normal file
8
src/lib/router/routes/Weight/WDaily.svelte
Normal file
@@ -0,0 +1,8 @@
|
||||
<script lang="ts">
|
||||
import AggregatedWeightTable from '$components/Weight/Aggregated/AggregatedWeightTable.svelte'
|
||||
import { dailyWeightStore } from '$lib/store/weight/dailyWeightStore'
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<AggregatedWeightTable items="{$dailyWeightStore}" />
|
||||
</template>
|
8
src/lib/router/routes/Weight/WMonthly.svelte
Normal file
8
src/lib/router/routes/Weight/WMonthly.svelte
Normal file
@@ -0,0 +1,8 @@
|
||||
<script lang="ts">
|
||||
import { monthlyWeightStore } from '$lib/store/weight/monthlyWeightStore'
|
||||
import AggregatedWeightTable from '$components/Weight/Aggregated/AggregatedWeightTable.svelte'
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<AggregatedWeightTable items="{$monthlyWeightStore}" />
|
||||
</template>
|
8
src/lib/router/routes/Weight/WWeekly.svelte
Normal file
8
src/lib/router/routes/Weight/WWeekly.svelte
Normal file
@@ -0,0 +1,8 @@
|
||||
<script lang="ts">
|
||||
import { weeklyWeightStore } from '$lib/store/weight/weeklyWeightStore'
|
||||
import AggregatedWeightTable from '$components/Weight/Aggregated/AggregatedWeightTable.svelte'
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<AggregatedWeightTable items="{$weeklyWeightStore}" />
|
||||
</template>
|
8
src/lib/router/routes/Weight/WYearly.svelte
Normal file
8
src/lib/router/routes/Weight/WYearly.svelte
Normal file
@@ -0,0 +1,8 @@
|
||||
<script lang="ts">
|
||||
import AggregatedWeightTable from '$components/Weight/Aggregated/AggregatedWeightTable.svelte'
|
||||
import { yearlyWeightStore } from '$lib/store/weight/yearlyWeightStore'
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<AggregatedWeightTable items="{yearlyWeightStore}" />
|
||||
</template>
|
8
src/lib/router/routes/Weight/Weight.svelte
Normal file
8
src/lib/router/routes/Weight/Weight.svelte
Normal file
@@ -0,0 +1,8 @@
|
||||
<script lang="ts">
|
||||
import WeightTable from '$components/Weight/WeightTable.svelte'
|
||||
import { weightStore } from '$lib/store/weight/weightStore'
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<WeightTable items="{$weightStore}" />
|
||||
</template>
|
@@ -13,7 +13,12 @@ async function createStore(): Promise<Writable<AggregatedFood[]>> {
|
||||
return {
|
||||
subscribe,
|
||||
update,
|
||||
set
|
||||
set,
|
||||
// @ts-ignore
|
||||
refresh: async () => {
|
||||
const rows = await FoodService.GetDaily()
|
||||
set(rows[0])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -13,7 +13,12 @@ async function createStore(): Promise<Writable<AggregatedFood[]>> {
|
||||
return {
|
||||
subscribe,
|
||||
update,
|
||||
set
|
||||
set,
|
||||
// @ts-ignore
|
||||
refresh: async () => {
|
||||
const rows = await FoodService.GetMonthly()
|
||||
set(rows[0])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -13,7 +13,12 @@ async function createStore(): Promise<Writable<AggregatedFood[]>> {
|
||||
return {
|
||||
subscribe,
|
||||
update,
|
||||
set
|
||||
set,
|
||||
// @ts-ignore
|
||||
refresh: async () => {
|
||||
const rows = await FoodService.GetWeekly()
|
||||
set(rows[0])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -13,7 +13,12 @@ async function createStore(): Promise<Writable<AggregatedFood[]>> {
|
||||
return {
|
||||
subscribe,
|
||||
update,
|
||||
set
|
||||
set,
|
||||
// @ts-ignore
|
||||
refresh: async () => {
|
||||
const rows = await FoodService.GetYearly()
|
||||
set(rows[0])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
26
src/lib/store/weight/dailyWeightStore.ts
Normal file
26
src/lib/store/weight/dailyWeightStore.ts
Normal file
@@ -0,0 +1,26 @@
|
||||
import { type Writable, writable } from 'svelte/store'
|
||||
import { type AggregatedWeight, WeightService } from '$lib/database/weight'
|
||||
import { FoodService } from '$lib/database/food'
|
||||
|
||||
|
||||
async function createStore(): Promise<Writable<AggregatedWeight[]>> {
|
||||
let [rows, err] = await WeightService.GetDaily()
|
||||
if (err) {
|
||||
rows = []
|
||||
console.error(err)
|
||||
}
|
||||
|
||||
const { subscribe, update, set } = writable(rows)
|
||||
return {
|
||||
subscribe,
|
||||
update,
|
||||
set,
|
||||
// @ts-ignore
|
||||
refresh: async () => {
|
||||
const rows = await WeightService.GetDaily()
|
||||
set(rows[0])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export const dailyWeightStore = await createStore()
|
25
src/lib/store/weight/monthlyWeightStore.ts
Normal file
25
src/lib/store/weight/monthlyWeightStore.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
import { type Writable, writable } from 'svelte/store'
|
||||
import { type AggregatedWeight, WeightService } from '$lib/database/weight'
|
||||
|
||||
|
||||
async function createStore(): Promise<Writable<AggregatedWeight[]>> {
|
||||
let [rows, err] = await WeightService.GetMonthly()
|
||||
if (err) {
|
||||
rows = []
|
||||
console.error(err)
|
||||
}
|
||||
|
||||
const { subscribe, update, set } = writable(rows)
|
||||
return {
|
||||
subscribe,
|
||||
update,
|
||||
set,
|
||||
// @ts-ignore
|
||||
refresh: async () => {
|
||||
const rows = await WeightService.GetMonthly()
|
||||
set(rows[0])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export const monthlyWeightStore = await createStore()
|
25
src/lib/store/weight/weeklyWeightStore.ts
Normal file
25
src/lib/store/weight/weeklyWeightStore.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
import { type Writable, writable } from 'svelte/store'
|
||||
import { type AggregatedWeight, WeightService } from '$lib/database/weight'
|
||||
|
||||
|
||||
async function createStore(): Promise<Writable<AggregatedWeight[]>> {
|
||||
let [rows, err] = await WeightService.GetWeekly()
|
||||
if (err) {
|
||||
rows = []
|
||||
console.error(err)
|
||||
}
|
||||
|
||||
const { subscribe, update, set } = writable(rows)
|
||||
return {
|
||||
subscribe,
|
||||
update,
|
||||
set,
|
||||
// @ts-ignore
|
||||
refresh: async () => {
|
||||
const rows = await WeightService.GetWeekly()
|
||||
set(rows[0])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export const weeklyWeightStore = await createStore()
|
20
src/lib/store/weight/weightStore.ts
Normal file
20
src/lib/store/weight/weightStore.ts
Normal file
@@ -0,0 +1,20 @@
|
||||
import { type Writable, writable } from 'svelte/store'
|
||||
import { type Weight, WeightService } from '$lib/database/weight'
|
||||
|
||||
|
||||
async function createStore(): Promise<Writable<Weight[]>> {
|
||||
const rows = await WeightService.GetRecent()
|
||||
const { subscribe, update, set } = writable(rows)
|
||||
return {
|
||||
subscribe,
|
||||
update,
|
||||
set,
|
||||
// @ts-ignore
|
||||
refresh: async () => {
|
||||
const foods = await WeightService.GetRecent()
|
||||
set(foods)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export const weightStore = await createStore()
|
25
src/lib/store/weight/yearlyWeightStore.ts
Normal file
25
src/lib/store/weight/yearlyWeightStore.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
import { type Writable, writable } from 'svelte/store'
|
||||
import { type AggregatedWeight, WeightService } from '$lib/database/weight'
|
||||
|
||||
|
||||
async function createStore(): Promise<Writable<AggregatedWeight[]>> {
|
||||
let [rows, err] = await WeightService.GetYearly()
|
||||
if (err) {
|
||||
rows = []
|
||||
console.error(err)
|
||||
}
|
||||
|
||||
const { subscribe, update, set } = writable(rows)
|
||||
return {
|
||||
subscribe,
|
||||
update,
|
||||
set,
|
||||
// @ts-ignore
|
||||
refresh: async () => {
|
||||
const rows = await WeightService.GetYearly()
|
||||
set(rows[0])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export const yearlyWeightStore = await createStore()
|
@@ -2,6 +2,16 @@ import { type ClassValue, clsx } from 'clsx'
|
||||
import { twMerge } from 'tailwind-merge'
|
||||
import { cubicOut } from 'svelte/easing'
|
||||
import type { TransitionConfig } from 'svelte/transition'
|
||||
import { dailyFoodStore } from '$lib/store/energy/dailyFoodStore'
|
||||
import { foodStore } from '$lib/store/energy/foodStore'
|
||||
import { weeklyFoodStore } from '$lib/store/energy/weeklyFoodStore'
|
||||
import { monthlyFoodStore } from '$lib/store/energy/monthlyFoodStore'
|
||||
import { yearlyFoodStore } from '$lib/store/energy/yearlyFoodStore'
|
||||
import { weightStore } from '$lib/store/weight/weightStore'
|
||||
import { dailyWeightStore } from '$lib/store/weight/dailyWeightStore'
|
||||
import { weeklyWeightStore } from '$lib/store/weight/weeklyWeightStore'
|
||||
import { monthlyWeightStore } from '$lib/store/weight/monthlyWeightStore'
|
||||
import { yearlyWeightStore } from '$lib/store/weight/yearlyWeightStore'
|
||||
|
||||
export function cn(...inputs: ClassValue[]) {
|
||||
return twMerge(clsx(inputs))
|
||||
@@ -110,3 +120,27 @@ function GenerateColor(): string {
|
||||
}
|
||||
|
||||
export { GenerateColor }
|
||||
|
||||
export function RefreshStores() {
|
||||
// @ts-ignore
|
||||
foodStore.refresh()
|
||||
// @ts-ignore
|
||||
dailyFoodStore.refresh()
|
||||
// @ts-ignore
|
||||
weeklyFoodStore.refresh()
|
||||
// @ts-ignore
|
||||
monthlyFoodStore.refresh()
|
||||
// @ts-ignore
|
||||
yearlyFoodStore.refresh()
|
||||
|
||||
// @ts-ignore
|
||||
weightStore.refresh()
|
||||
// @ts-ignore
|
||||
dailyWeightStore.refresh()
|
||||
// @ts-ignore
|
||||
weeklyWeightStore.refresh()
|
||||
// @ts-ignore
|
||||
monthlyWeightStore.refresh()
|
||||
// @ts-ignore
|
||||
yearlyWeightStore.refresh()
|
||||
}
|
||||
|
Reference in New Issue
Block a user