fix(mila): fix last feed display, hide diaper tile when empty today, and add resilient git-init
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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: {
|
||||
|
||||
Reference in New Issue
Block a user