diff --git a/app/src/components/Report.jsx b/app/src/components/Report.jsx index 262e3d4..2bd963a 100644 --- a/app/src/components/Report.jsx +++ b/app/src/components/Report.jsx @@ -1,14 +1,14 @@ import { useState, useEffect, useRef, useMemo } from "react"; import { subDays, format } from "date-fns"; import { nb } from "date-fns/locale"; -import { fetchSessionsForReport } from "../lib/db"; +import { fetchSessionsForReport, saveLibraryExercise } from "../lib/db"; import { HeatmapBodySVG, BodySVG, MUSCLES, useIsMobile } from "../lib/bodymap.jsx"; import { buildRecMuscleMap, callClaude, logDevError } from "../lib/utils"; import { CLAUDE_MODEL_TEXT, buildPeriodRecommendPrompt } from "../lib/prompts"; import { Tag, InlineLoading, DefinitionTooltip, Button, InlineNotification, } from "@carbon/react"; -import { AiGenerate, Add } from "@carbon/icons-react"; +import { AiGenerate, Add, Checkmark } from "@carbon/icons-react"; import PageShell, { SectionLabel, AccentChip, StickyCta } from "./PageShell"; import { useNav } from "../lib/NavContext"; @@ -80,6 +80,9 @@ export default function Report({ prefill, onPrefillConsumed }) { const [loadingRecs, setLoadingRecs] = useState(false); const [recsError, setRecsError] = useState(null); const [hoveredMuscle, setHoveredMuscle] = useState(null); + const [savedRecs, setSavedRecs] = useState(new Set()); + const [savingRec, setSavingRec] = useState(null); + const [saveRecError, setSaveRecError] = useState(null); const initialPrefill = useRef(prefill); useEffect(() => { @@ -114,6 +117,29 @@ export default function Report({ prefill, onPrefillConsumed }) { return () => document.removeEventListener("keydown", fn); }, [hoveredMuscle]); + const handleSaveRec = async (r) => { + setSavingRec(r.name); + setSaveRecError(null); + try { + await saveLibraryExercise({ + name: r.name, + primary_muscles: r.primary || [], + secondary_muscles: r.secondary || [], + default_sets: null, + default_reps: null, + }); + setSavedRecs(prev => new Set([...prev, r.name])); + } catch (err) { + if (err?.code === "23505") { + setSavedRecs(prev => new Set([...prev, r.name])); + } else { + setSaveRecError("Kunne ikke lagre øvelsen. Prøv igjen."); + } + } finally { + setSavingRec(null); + } + }; + const getAdvice = async () => { setLoadingRecs(true); setRecs(null); @@ -501,6 +527,15 @@ export default function Report({ prefill, onPrefillConsumed }) {
Anbefalte øvelser
+ {saveRecError && ( +{r.tip}
}