feat(fitness/measure): consolidate entries by day + richer past-measurements summary
- Server POST now upserts by (user, calendar day). Non-conflicting fields merge silently; real overwrites (new non-empty value ≠ stored value) return 409 with the conflict list. Client retries with `?overwrite=1` after a confirm dialog naming each field and its old→new value. Null/empty payload fields are skipped, so logging a body-fat entry on a day that already has weight merges cleanly without flagging a phantom weight conflict. - `summaryParts` in the history now includes a body-parts count, e.g. "86 kg · 0.1% bf · 5 body parts" or "5 body parts" instead of the flat "Body measurements only" fallback. Pluralised in EN and DE. - Inline quick-edit: "Full edit →" text replaced by a dashed primary pill `Pencil · Edit all fields · ChevronRight`, inlined with the X / ✓ action buttons on the same row. The label collapses to icons only at ≤480px so the three controls stay on one line. - Quick-edit date input swapped from native `<input type="date">` to the site's `DatePicker` component. - New i18n: `overwrite_title`, `overwrite_message`, `overwrite_confirm`. - TODO.md marks features #2 and #3 done. CLAUDE.md carries a policy note (no AI-attribution trailers on commits).
This commit is contained in:
@@ -313,6 +313,12 @@ const translations: Translations = {
|
||||
history: { en: 'History', de: 'Verlauf' },
|
||||
past_measurements: { en: 'Past measurements', de: 'Frühere Messungen' },
|
||||
show_more: { en: 'Show more', de: 'Mehr anzeigen' },
|
||||
overwrite_title: { en: 'Overwrite existing values?', de: 'Bestehende Werte überschreiben?' },
|
||||
overwrite_message: {
|
||||
en: 'You already have values for this date: {fields}. Replace them?',
|
||||
de: 'Für dieses Datum sind bereits Werte erfasst: {fields}. Überschreiben?'
|
||||
},
|
||||
overwrite_confirm: { en: 'Overwrite', de: 'Überschreiben' },
|
||||
|
||||
// SetTable
|
||||
set_header: { en: 'SET', de: 'SATZ' },
|
||||
|
||||
Reference in New Issue
Block a user