import { useEffect, useRef, useState } from "react"; import React from "react"; import Markdown from "react-markdown"; import "../../../styles/markdown.css"; import type { components } from "../../../reflector-api"; type GetTranscript = components["schemas"]["GetTranscript"]; type GetTranscriptTopic = components["schemas"]["GetTranscriptTopic"]; import { useTranscriptUpdate } from "../../../lib/apiHooks"; import { Flex, Heading, IconButton, Button, Textarea, Spacer, } from "@chakra-ui/react"; import { LuPen } from "react-icons/lu"; import { useError } from "../../../(errors)/errorContext"; import ShareAndPrivacy from "../shareAndPrivacy"; type FinalSummaryProps = { transcriptResponse: GetTranscript; topicsResponse: GetTranscriptTopic[]; onUpdate?: (newSummary) => void; }; export default function FinalSummary(props: FinalSummaryProps) { const finalSummaryRef = useRef(null); const [isEditMode, setIsEditMode] = useState(false); const [preEditSummary, setPreEditSummary] = useState(""); const [editedSummary, setEditedSummary] = useState(""); const { setError } = useError(); const updateTranscriptMutation = useTranscriptUpdate(); useEffect(() => { setEditedSummary(props.transcriptResponse?.long_summary || ""); }, [props.transcriptResponse?.long_summary]); if (!props.topicsResponse || !props.transcriptResponse) { return null; } const updateSummary = async (newSummary: string, transcriptId: string) => { try { const updatedTranscript = await updateTranscriptMutation.mutateAsync({ params: { path: { transcript_id: transcriptId, }, }, body: { long_summary: newSummary, }, }); if (props.onUpdate) { props.onUpdate(newSummary); } console.log("Updated long summary:", updatedTranscript); } catch (err) { console.error("Failed to update long summary:", err); setError(err as Error, "Failed to update long summary."); } }; const onEditClick = () => { setPreEditSummary(editedSummary); setIsEditMode(true); }; const onDiscardClick = () => { setEditedSummary(preEditSummary); setIsEditMode(false); }; const onSaveClick = () => { updateSummary(editedSummary, props.transcriptResponse.id); setIsEditMode(false); }; const handleTextAreaKeyDown = (e: React.KeyboardEvent) => { if (e.key === "Escape") { onDiscardClick(); } if (e.key === "Enter" && e.shiftKey) { onSaveClick(); e.preventDefault(); // prevent the default action of adding a new line } }; return ( {isEditMode && ( Summary )} {!isEditMode && ( <> )} {isEditMode ? (