From 1b0f083cc5f75aa54a853928ea0e1e2c37a23882 Mon Sep 17 00:00:00 2001 From: Experiments DB Dev Date: Fri, 1 May 2026 08:05:07 -0400 Subject: [PATCH] feat(frontend): persist bucket config to animal on successful analysis Co-Authored-By: Claude Opus 4.7 --- frontend/src/components/CsvAnalysis.jsx | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/CsvAnalysis.jsx b/frontend/src/components/CsvAnalysis.jsx index 6731fbf..431c099 100644 --- a/frontend/src/components/CsvAnalysis.jsx +++ b/frontend/src/components/CsvAnalysis.jsx @@ -3,7 +3,7 @@ import { parseCSVHeaders, parseCSV, getUniqueNoteValues, runAnalysis, checkFrame import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, } from 'recharts'; -import { analysesApi, dailyStatusesApi } from '../api/client'; +import { analysesApi, dailyStatusesApi, animalsApi } from '../api/client'; import Button from './ui/Button'; import RunSequenceView from './RunSequenceView'; @@ -167,6 +167,7 @@ export default function CsvAnalysis({ dailyStatusId, animal, onSaved, onSummaryP const [summaryPushing, setSummaryPushing] = useState(false); const [summaryPushed, setSummaryPushed] = useState(false); const [summaryError, setSummaryError] = useState(null); + const [configSaveError, setConfigSaveError] = useState(null); // ── File reading ───────────────────────────────────────────────────────────── @@ -265,6 +266,14 @@ export default function CsvAnalysis({ dailyStatusId, animal, onSaved, onSummaryP setResults({ ...res, numericSeries }); setPhase('results'); + // Persist bucket config to the animal so future uploads pre-classify. + // Independent of dailyStatusId — runs even for ad-hoc analyses. + if (animal?.id) { + setConfigSaveError(null); + animalsApi.updateCsvConfig(animal.id, { buckets }) + .catch((err) => setConfigSaveError(err.message ?? 'Failed to save bucket config')); + } + if (!dailyStatusId) return; setSaving(true); setSaveError(null); @@ -719,6 +728,11 @@ export default function CsvAnalysis({ dailyStatusId, animal, onSaved, onSummaryP )} + {configSaveError && ( +

+ Bucket config didn't save: {configSaveError}. Analysis still ran. Try running again to retry. +

+ )}