From 86feec2e773401fba27ca61b0e68b407a62551ad Mon Sep 17 00:00:00 2001 From: Experiments DB Dev Date: Sun, 19 Jul 2026 19:35:22 -0400 Subject: [PATCH] fix(export): label synthetic ordinal '# Days Reach (ordinal)' to avoid collision with same-named daily field Co-Authored-By: Claude Opus 4.8 --- frontend/src/components/ExportDataModal.jsx | 2 +- frontend/src/lib/dataExport.js | 2 +- frontend/tests/ExportDataModal.test.jsx | 2 +- frontend/tests/dataExport.test.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/src/components/ExportDataModal.jsx b/frontend/src/components/ExportDataModal.jsx index 56c0eb2..69603f4 100644 --- a/frontend/src/components/ExportDataModal.jsx +++ b/frontend/src/components/ExportDataModal.jsx @@ -51,7 +51,7 @@ export default function ExportDataModal({ const activeDaily = useMemo(() => (dailyTemplate ?? []).filter((f) => f.active), [dailyTemplate]); const xOptions = useMemo(() => [ { id: '__date__', label: 'Date' }, - { id: '__days__', label: '# Days Reach' }, + { id: '__days__', label: '# Days Reach (ordinal)' }, ...activeDaily.map((f) => ({ id: f.fieldId, label: f.label })), ], [activeDaily]); diff --git a/frontend/src/lib/dataExport.js b/frontend/src/lib/dataExport.js index 6ca80d3..49785de 100644 --- a/frontend/src/lib/dataExport.js +++ b/frontend/src/lib/dataExport.js @@ -123,7 +123,7 @@ export function buildSampleIndex(statuses, xField, dailyTemplate) { function xFieldLabel(xField, dailyTemplate) { if (xField === '__date__') return 'Date'; - if (xField === '__days__') return '# Days Reach'; + if (xField === '__days__') return '# Days Reach (ordinal)'; return (dailyTemplate ?? []).find((f) => f.fieldId === xField)?.label ?? ''; } diff --git a/frontend/tests/ExportDataModal.test.jsx b/frontend/tests/ExportDataModal.test.jsx index de741fc..a83bab6 100644 --- a/frontend/tests/ExportDataModal.test.jsx +++ b/frontend/tests/ExportDataModal.test.jsx @@ -96,7 +96,7 @@ describe('ExportDataModal', () => { await waitFor(() => expect(screen.getByText(/2 rows/i)).toBeInTheDocument()); fireEvent.click(screen.getByText('Export CSV')); const text = await readBlobText(dl.getBlob()); - expect(text).toBe('Data,Total attempts\n\n# Days Reach,Alpha,Beta\n1,5,9\n2,7,'); + expect(text).toBe('Data,Total attempts\n\n# Days Reach (ordinal),Alpha,Beta\n1,5,9\n2,7,'); await dl.restore(); }); diff --git a/frontend/tests/dataExport.test.js b/frontend/tests/dataExport.test.js index 0ea0add..105f2bd 100644 --- a/frontend/tests/dataExport.test.js +++ b/frontend/tests/dataExport.test.js @@ -281,7 +281,7 @@ describe('buildSubjectSeriesMatrix', () => { { xField: '__days__', dataParam: totalParam, groupField: '__none__' }, { statuses: ssStatuses, animals: ssAnimals, dailyTemplate: [] }, ); - expect(m.corner).toBe('# Days Reach'); + expect(m.corner).toBe('# Days Reach (ordinal)'); expect(m.rows.map((r) => r.member.label)).toEqual(['1', '2']); expect(m.rows[0].values).toEqual([5, 9]); expect(m.rows[1].values).toEqual([7, '']);