Files
HealthLog/src/components/settings/thresholds-section.tsx
T
Marc-André Bombeck e9d28b399e fix(copy): make delete confirmations, sleep-debt labels, and the glucose band honest
Three surfaces where the words no longer matched the code, plus the missing
web control for a preference the server already honours.

Delete confirmations. Four dialogs promised permanence on surfaces that
render an Undo: the measurements and mood bulk bodies, the lab-result body,
and the illness-episode body (which said "cannot be undone" sixty lines
below the code that fires the Undo toast). All four now use the same
sentence the single-row measurement and mood dialogs already used. A sweep
of every other confirmation in the tree found the rest accurate — the
biomarker cascade, the mood-tag purge, and the account purge keep their
warning because those deletes really are unrecoverable.

Sleep debt. v1.19.0 replaced the summed shortfall with a running balance
that credits catch-up sleep; the labels still described the old sum, so the
word contradicted the number for anyone who slept in after a short night.
Corrected in all six locales, plus the places the old semantics had
propagated: the Coach system prompt, the OpenAPI field descriptions the
native client reads, and four module docblocks.

Glucose reference band. `hasDiabetes` selects the tighter reference band and
grounds the Coach, but no web surface set it — a web-only account was pinned
to the non-diabetic scale with no way out. The control goes on Targets,
above the per-metric editor, because it answers the same question that page
answers and the two are ordered: it picks the default band, an override
below beats it. The copy says what it is — a reference band, not a
diagnosis, never inferred from a reading, no clinical action taken on it.

The passkey list was reported as always reading "never used". It does not
reproduce: the column is selected by the list route and stamped on every
verified assertion, both since v1.23.0. Pinned with tests on both halves so
the contract cannot quietly regress.
2026-07-19 12:28:05 +02:00

46 lines
2.1 KiB
TypeScript

"use client";
import { GlucoseReferenceCard } from "@/components/settings/glucose-reference-card";
import { ThresholdsEditorSection } from "@/components/settings/thresholds-editor-section";
/**
* `<ThresholdsSection>` — route-level wrapper for `/settings/thresholds`
* (the "Targets" / "Zielwerte" page).
*
* v1.8.7.1 — Targets and Sources are two separate settings pages again.
* This page owns only the per-metric target-range editor
* (`/api/user/thresholds`); the source-priority ladders moved back onto
* their own `/settings/sources` page (`<SourcesSection>`). The two were
* merged into one "Targets & Sources" page in v1.4.34 IW-D, but the
* combined surface ran long and the two editors drive distinct mutation
* flows, so each concern is self-contained on its own page.
*
* Visual structure on this page:
* 1. Section heading + subtitle — supplied by the shared
* `<SettingsSectionFrame>` in the route (v1.18.6 W9).
* 2. `<ThresholdsEditorSection>` — per-metric range inputs. The editor
* card keeps its own affordance row (icon, reset-all button).
*
* v1.4.16 phase B6: file renamed from the historic
* `thresholds-settings-section.tsx` (`<ThresholdsSettingsSection>`)
* so the filename + default export match the slug — every other
* section in `src/components/settings/` follows the
* `<slug>-section.tsx` `<SlugSection>` convention. The inner editor
* card was simultaneously moved out of `thresholds-section.tsx`
* (where it used to live as `<ThresholdsSection>`) into
* `thresholds-editor-section.tsx` (`<ThresholdsEditorSection>`) so
* the names stop clashing.
*/
export function ThresholdsSection() {
// The glucose reference band sits ABOVE the per-metric editor: it picks the
// DEFAULT band a glucose reading is judged against, and a per-metric
// override in the editor below then beats it. Same question, one page —
// splitting the two across surfaces would hide the precedence.
return (
<div className="space-y-4">
<GlucoseReferenceCard />
<ThresholdsEditorSection id="thresholds" />
</div>
);
}