Commit Graph

9 Commits

Author SHA1 Message Date
Experiments DB Dev dfe3938afc feat(frontend): toCSV + csvFilename for data export 2026-07-06 15:40:24 -04:00
Experiments DB Dev b5578f6e24 feat(frontend): buildMatrix pivots statuses into date×subject grid 2026-07-06 15:37:33 -04:00
Experiments DB Dev 3f8febfda3 feat(frontend): listExportableParams enumerates export options 2026-07-06 15:35:19 -04:00
Experiments DB Dev 523cf1614e feat(frontend): extractValue helper for data export 2026-07-06 15:33:30 -04:00
Experiments DB Dev 4b82df514f feat(frontend): serialize/read helpers for plot config
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 10:18:56 -04:00
Experiments DB Dev 0f7f6fbbe3 feat(frontend): pure helpers for cross-subject plot interactions
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 09:29:21 -04:00
Experiments DB Dev b9b8a4ef1d feat(frontend): add computeNumericSeries helper 2026-05-01 07:51:22 -04:00
Experiments DB Dev 0b83795665 feat(frontend): add extractNumber helper 2026-05-01 07:50:56 -04:00
Experiments DB Dev 9535f86970 feat: add experiment calendar view with per-day subject counts
New ExperimentCalendar component added as a third view mode (List / Group / Calendar)
on the Experiment Detail page.

Backend:
- GET /api/experiments/:id/calendar?field=<fieldIdOrBuiltinKey>
  Returns { field, days: { "YYYY-MM-DD": count } } where count = number of
  subjects with a non-null/non-empty value for the chosen field on that date.
  Supports both builtin fields (vitals, treatment, notes, experiment_description)
  and custom fields addressed by fieldId UUID.

Frontend:
- ExperimentCalendar component: navigable monthly grid, field selector
  (defaults to first field with "weight" in label, else first active field),
  blue badges showing subject count per day, click to open modal with all
  subjects' data for that day.
- Integrated into ExperimentDetail as displayMode "calendar", persisted
  in localStorage alongside the existing list/group modes.
- experimentsApi.getCalendar() added to API client.

Tests:
- backend/tests/calendar.test.js: 8 unit tests (404, empty days, builtin
  count, custom field count, whitespace ignored, multi-month, field echo,
  missing param).
- frontend/tests/ExperimentCalendar.test.jsx: 13 RTL tests covering
  rendering, default field selection, count badges, month navigation,
  field-change re-fetch, day click modal, and multi-subject display.

All 47 backend + 13 calendar frontend tests passing.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-23 09:26:35 -04:00