fix(mila): fix last feed display, hide diaper tile when empty today, and add resilient git-init

This commit is contained in:
Moritz Graf
2026-10-17 08:01:39 +02:00
parent 5b8432caf4
commit 7ce1da18ab
4 changed files with 76 additions and 17 deletions
+4 -1
View File
@@ -54,7 +54,10 @@ spec:
else
git fetch origin main
fi
git pull --rebase --autostash origin main || true
git rebase --abort 2>/dev/null || true
git merge --abort 2>/dev/null || true
git reset --hard origin/main
git clean -fd
fi
env:
- name: GIT_SYNC_USERNAME
+8
View File
@@ -974,16 +974,24 @@ class DuckDBEngine:
"last_wake_iso": last_wake_iso,
"last_feed_iso": last_feed_iso,
"last_feed_time_str": last_feed_time_str,
"last_feed_time": last_feed_time_str,
"last_feed_since_str": last_feed_since_str,
"last_feed_since_minutes": last_feed_since_minutes,
"last_feed_elapsed_minutes": last_feed_since_minutes,
"last_feed_summary": last_feed_summary,
"last_feed_item": (last_feed[5] or ("Fläschchen" if last_feed[6] == "feeding.bottle" else "Mahlzeit")) if last_feed else None,
"last_feed_amount": (last_feed[3] or last_feed[4]) if last_feed else None,
"last_diaper_iso": last_diaper_iso,
"last_diaper_time_str": last_diaper_time_str,
"last_diaper_time": last_diaper_time_str,
"last_diaper_since_str": last_diaper_since_str,
"last_diaper_since_minutes": last_diaper_since_minutes,
"last_diaper_elapsed_minutes": last_diaper_since_minutes,
"last_diaper_type": last_diaper_type,
"last_stool_iso": last_stool_iso,
"last_stool_str": last_stool_str,
"last_stool_time": st_dt.strftime("%H:%M") if last_stool else None,
"last_stool_elapsed_minutes": st_mins if last_stool else None,
},
"today": {
"total_sleep_hours_str": today_tot_hours,
+44 -8
View File
@@ -200,10 +200,30 @@ const wakeWindowStatus = computed(() => {
}
})
// Whether any diaper or poo was recorded today
const hasDiaperToday = computed(() => {
if (!data.value) return false
const diapersCount = data.value.today?.diapers?.length || 0
const changesCount = data.value.today?.diaper_summary?.total_changes || 0
return diapersCount > 0 || changesCount > 0
})
// Feed Interval status
const feedIntervalStatus = computed(() => {
if (!data.value) return null
const elapsed = data.value.live_status.last_feed_elapsed_minutes
const ls = data.value.live_status
// Calculate dynamic live elapsed if iso is available
let elapsed = ls.last_feed_since_minutes ?? (ls as any).last_feed_elapsed_minutes
if (ls.last_feed_iso) {
try {
const feedTime = new Date(ls.last_feed_iso).getTime()
if (!isNaN(feedTime)) {
elapsed = Math.max(0, Math.floor((nowEpoch.value - feedTime) / 60000))
}
} catch {}
}
if (elapsed === null || elapsed === undefined) {
return { text: 'Keine Mahlzeit', elapsedStr: '—', isDue: false }
}
@@ -216,11 +236,27 @@ const feedIntervalStatus = computed(() => {
}
})
// Last Feed detail information
const lastFeedDetail = computed(() => {
if (!data.value?.live_status) return null
const ls = data.value.live_status
const time = ls.last_feed_time_str || (ls as any).last_feed_time
if (!time) return null
const summary = ls.last_feed_summary || (
((ls as any).last_feed_amount ? `${(ls as any).last_feed_amount} ` : '') + ((ls as any).last_feed_item || 'Fläschchen')
)
return {
time,
summary,
}
})
// Diaper / Stool status
const diaperStatus = computed(() => {
if (!data.value) return null
const elapsed = data.value.live_status.last_diaper_elapsed_minutes
const elapsedStool = data.value.live_status.last_stool_elapsed_minutes
const ls = data.value.live_status
const elapsed = ls.last_diaper_since_minutes ?? (ls as any).last_diaper_elapsed_minutes
const elapsedStool = (ls as any).last_stool_elapsed_minutes
const formatElapsed = (mins: number | null | undefined) => {
if (mins === null || mins === undefined) return null
@@ -348,7 +384,7 @@ const currentAgeMonths = computed(() => {
<span>Eltern-Cockpit: Sofort-Überblick</span>
</div>
<div class="grid grid-cols-1 sm:grid-cols-3 gap-3">
<div class="grid grid-cols-1 gap-3" :class="hasDiaperToday ? 'sm:grid-cols-3' : 'sm:grid-cols-2'">
<!-- Cockpit Card 1: Sleep / Wake Window -->
<div
:class="data.live_status.is_sleeping ? 'from-purple-950/40 via-zinc-900/90 to-zinc-950 border-purple-500/40' : 'from-emerald-950/30 via-zinc-900/90 to-zinc-950 border-emerald-500/30'"
@@ -417,8 +453,8 @@ const currentAgeMonths = computed(() => {
{{ feedIntervalStatus ? `vor ${feedIntervalStatus.elapsedStr}` : '—' }}
</div>
<div class="text-[11px] text-zinc-400 mt-0.5 truncate">
<span v-if="data.live_status.last_feed_time">
{{ data.live_status.last_feed_amount ? data.live_status.last_feed_amount + ' ' : '' }}{{ data.live_status.last_feed_item || 'Fläschchen' }} um {{ data.live_status.last_feed_time }} Uhr
<span v-if="lastFeedDetail">
{{ lastFeedDetail.summary }} um <strong>{{ lastFeedDetail.time }} Uhr</strong>
</span>
<span v-else>Heute noch keine Nahrung</span>
</div>
@@ -430,8 +466,8 @@ const currentAgeMonths = computed(() => {
</div>
</div>
<!-- Cockpit Card 3: Last Diaper & Stool -->
<div class="p-4 rounded-2xl bg-zinc-950/70 border border-zinc-800/80 shadow-lg space-y-2">
<!-- Cockpit Card 3: Last Diaper & Stool (only shown when diaper logged today) -->
<div v-if="hasDiaperToday" class="p-4 rounded-2xl bg-zinc-950/70 border border-zinc-800/80 shadow-lg space-y-2">
<div class="flex items-center justify-between text-xs">
<span class="font-bold flex items-center gap-1.5 text-teal-300 font-mono">
<Baby class="w-3.5 h-3.5" />
+20 -8
View File
@@ -110,14 +110,26 @@ export interface MilaDashboardData {
wake_window_str: string
last_wake_time_str: string
last_wake_iso: string
last_feed_time: string | null
last_feed_elapsed_minutes: number | null
last_feed_item: string | null
last_feed_amount: number | null
last_diaper_time: string | null
last_diaper_elapsed_minutes: number | null
last_stool_time: string | null
last_stool_elapsed_minutes: number | null
last_feed_iso?: string | null
last_feed_time_str?: string | null
last_feed_time?: string | null
last_feed_since_str?: string | null
last_feed_since_minutes?: number | null
last_feed_elapsed_minutes?: number | null
last_feed_summary?: string | null
last_feed_item?: string | null
last_feed_amount?: number | null
last_diaper_iso?: string | null
last_diaper_time_str?: string | null
last_diaper_time?: string | null
last_diaper_since_str?: string | null
last_diaper_since_minutes?: number | null
last_diaper_elapsed_minutes?: number | null
last_diaper_type?: string | null
last_stool_iso?: string | null
last_stool_str?: string | null
last_stool_time?: string | null
last_stool_elapsed_minutes?: number | null
}
age_norms?: AgeNorms
today: {