feat(insights): name the part of the day on the blood pressure stats while narrowed

The stat strip reads the chart's visible window, so with the chart
narrowed to the morning its figures were morning figures under a plain
Systolic label. The column label now says so. Russian texts for the
time-of-day card.
This commit is contained in:
Marc-André Bombeck committed 2026-11-04 00:17:00 +01:00
1 parent 22f83aed6e
commit 1a4703f4fe
12 files changed
+108 -2

No files matched your search

+6
View File
@@ -4999,6 +4999,12 @@
"morning": "Blutdruck morgens",
"midday": "Blutdruck mittags",
"evening": "Blutdruck abends"
},
"statsLabel": "{series}, {part}",
"statsPart": {
"morning": "morgens",
"midday": "mittags",
"evening": "abends"
}
}
},
+6
View File
@@ -4999,6 +4999,12 @@
"morning": "Blood pressure in the morning",
"midday": "Blood pressure at midday",
"evening": "Blood pressure in the evening"
},
"statsLabel": "{series}, {part}",
"statsPart": {
"morning": "morning",
"midday": "midday",
"evening": "evening"
}
}
},
+6
View File
@@ -4999,6 +4999,12 @@
"morning": "Tensión arterial por la mañana",
"midday": "Tensión arterial a mediodía",
"evening": "Tensión arterial por la noche"
},
"statsLabel": "{series}, {part}",
"statsPart": {
"morning": "por la mañana",
"midday": "al mediodía",
"evening": "por la noche"
}
}
},
+6
View File
@@ -4999,6 +4999,12 @@
"morning": "Tension artérielle le matin",
"midday": "Tension artérielle à midi",
"evening": "Tension artérielle le soir"
},
"statsLabel": "{series}, {part}",
"statsPart": {
"morning": "le matin",
"midday": "à midi",
"evening": "le soir"
}
}
},
+6
View File
@@ -4999,6 +4999,12 @@
"morning": "Pressione arteriosa al mattino",
"midday": "Pressione arteriosa a mezzogiorno",
"evening": "Pressione arteriosa alla sera"
},
"statsLabel": "{series}, {part}",
"statsPart": {
"morning": "al mattino",
"midday": "a mezzogiorno",
"evening": "alla sera"
}
}
},
+6
View File
@@ -4999,6 +4999,12 @@
"morning": "아침 혈압",
"midday": "낮 혈압",
"evening": "저녁 혈압"
},
"statsLabel": "{series}, {part}",
"statsPart": {
"morning": "아침",
"midday": "낮",
"evening": "저녁"
}
}
},
+6
View File
@@ -4999,6 +4999,12 @@
"morning": "Bloeddruk 's ochtends",
"midday": "Bloeddruk 's middags",
"evening": "Bloeddruk 's avonds"
},
"statsLabel": "{series}, {part}",
"statsPart": {
"morning": "'s ochtends",
"midday": "'s middags",
"evening": "'s avonds"
}
}
},
+6
View File
@@ -4999,6 +4999,12 @@
"morning": "Ciśnienie tętnicze rano",
"midday": "Ciśnienie tętnicze w południe",
"evening": "Ciśnienie tętnicze wieczorem"
},
"statsLabel": "{series}, {part}",
"statsPart": {
"morning": "rano",
"midday": "w południe",
"evening": "wieczorem"
}
}
},
+6
View File
@@ -4999,6 +4999,12 @@
"morning": "Pressão arterial pela manhã",
"midday": "Pressão arterial à tarde",
"evening": "Pressão arterial à noite"
},
"statsLabel": "{series}, {part}",
"statsPart": {
"morning": "pela manhã",
"midday": "ao meio-dia",
"evening": "à noite"
}
}
},
+34
View File
@@ -4972,6 +4972,40 @@
"emptyDescription": "В этом диапазоне пока не записано ни одного балла.",
"usualRange": "Заштриховано: ваш обычный диапазон, {lo}–{hi}.",
"seam": "Линия прерывается там, где изменилось то, что учитывается в балле."
},
"bpTimeOfDay": {
"title": "По времени суток",
"description": "Ваше среднее давление в каждой части дня за период графика.",
"part": {
"morning": "Утро",
"midday": "День",
"evening": "Вечер"
},
"filterAll": "Весь день",
"filterLabel": "Показать на графике",
"readingsOne": "{count} измерение",
"readingsFew": "{count} измерения",
"readingsOther": "{count} измерений",
"notEnough": "Слишком мало измерений",
"pulse": "Пульс {value} уд/мин",
"difference": "Утро минус вечер: {systolic}/{diastolic} мм рт. ст.",
"differencePending": "Утро и вечер сравниваются, когда в каждом есть не меньше {min} измерений.",
"hours": "Утро {morning}, день {midday}, вечер {evening}, в вашем часовом поясе.",
"hourRange": "{start}–{end}",
"emptyTitle": "За этот период нет полных измерений",
"emptyDescription": "Здесь появляются измерения, в которых есть и систолическое, и диастолическое значение.",
"error": "Не удалось загрузить средние значения по времени суток.",
"chartTitle": {
"morning": "Давление утром",
"midday": "Давление днём",
"evening": "Давление вечером"
},
"statsLabel": "{series}, {part}",
"statsPart": {
"morning": "утром",
"midday": "днём",
"evening": "вечером"
}
}
},
"thresholds": {
+2 -2
View File
@@ -145,7 +145,7 @@ export default function InsightsBlutdruckPage() {
summary: sysSummary,
unit: "mmHg",
fractionDigits: 0,
seriesLabel: t("charts.systolic"),
seriesLabel: timeOfDay.statsLabel(t("charts.systolic")),
icon: ArrowUpRight,
windowStats: statsByType?.BLOOD_PRESSURE_SYS ?? null,
windowPending: !statsSettled,
@@ -155,7 +155,7 @@ export default function InsightsBlutdruckPage() {
summary: diaSummary,
unit: "mmHg",
fractionDigits: 0,
seriesLabel: t("charts.diastolic"),
seriesLabel: timeOfDay.statsLabel(t("charts.diastolic")),
icon: ArrowDownRight,
windowStats: statsByType?.BLOOD_PRESSURE_DIA ?? null,
windowPending: !statsSettled,
@@ -11,6 +11,7 @@ import {
BP_PARTS_OF_DAY,
type BpPartOfDay,
} from "@/lib/analytics/bp-time-of-day";
import { useTranslations } from "@/lib/i18n/context";
import { useUrlSearch, writeUrlState } from "@/lib/url-state";
/** The chart's part of the day, or the whole day. */
@@ -24,6 +25,13 @@ export function parseBpChartPart(
return BP_PARTS_OF_DAY.find((part) => part === raw);
}
/** The stat strip's part-of-day word, so its figures say which readings they are. */
const STATS_PART_KEYS: Record<BpPartOfDay, string> = {
morning: "insights.bpTimeOfDay.statsPart.morning",
midday: "insights.bpTimeOfDay.statsPart.midday",
evening: "insights.bpTimeOfDay.statsPart.evening",
};
const CHART_TITLE_KEYS: Record<BpPartOfDay, string> = {
morning: "insights.bpTimeOfDay.chartTitle.morning",
midday: "insights.bpTimeOfDay.chartTitle.midday",
@@ -45,8 +53,11 @@ export function useBpTimeOfDayState(): {
/** The chart title's message key while narrowed; undefined for the whole day. */
chartTitleKey: string | undefined;
setChartPart: (next: BpChartPart) => void;
/** A stat column's label, naming the part of the day while narrowed. */
statsLabel: (series: string) => string;
days: number;
} {
const { t } = useTranslations();
const partOfDay = parseBpChartPart(useUrlSearch());
const setChartPart = useCallback((next: BpChartPart) => {
writeUrlState(
@@ -63,6 +74,13 @@ export function useBpTimeOfDayState(): {
partOfDay,
chartTitleKey: partOfDay ? CHART_TITLE_KEYS[partOfDay] : undefined,
setChartPart,
statsLabel: (series) =>
partOfDay
? t("insights.bpTimeOfDay.statsLabel", {
series,
part: t(STATS_PART_KEYS[partOfDay]),
})
: series,
days: rangeWindowDays(range),
};
}