import { toast } from "react-toastify"; import ReactModal from 'react-modal'; import { useState } from "react"; import { workbenchStore } from "~/lib/stores/workbench"; import { BoltProblemStatus, updateProblem } from "~/lib/replay/Problems"; import type { BoltProblemInput } from "~/lib/replay/Problems"; import { getLastLoadedProblem } from "../chat/LoadProblemButton"; import { getLastUserSimulationData, getLastChatMessages } from "~/lib/replay/SimulationPrompt"; ReactModal.setAppElement('#root'); // Component for saving input simulation and prompt information for // the problem the current chat was loaded from. export function SaveSolution() { const [isModalOpen, setIsModalOpen] = useState(false); const [formData, setFormData] = useState({ evaluator: '' }); const [savedSolution, setSavedSolution] = useState(false); const handleSaveSolution = () => { setIsModalOpen(true); setFormData({ evaluator: '', }); setSavedSolution(false); }; const handleInputChange = (e: React.ChangeEvent) => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: value })); }; const handleSubmitSolution = async () => { const savedProblem = getLastLoadedProblem(); if (!savedProblem) { toast.error('No problem loaded'); return; } const simulationData = getLastUserSimulationData(); if (!simulationData) { toast.error('No simulation data found'); return; } const messages = getLastChatMessages(); if (!messages) { toast.error('No user prompt found'); return; } toast.info("Submitting solution..."); console.log("SubmitSolution", formData); // The evaluator is only present when the problem has been solved. // We still create a "solution" object even if it hasn't been // solved quite yet, which is used for working on the problem. const evaluator = formData.evaluator.length ? formData.evaluator : undefined; const problem: BoltProblemInput = { version: 2, title: savedProblem.title, description: savedProblem.description, username: savedProblem.username, repositoryContents: savedProblem.repositoryContents, status: evaluator ? BoltProblemStatus.Solved : BoltProblemStatus.Unsolved, solution: { simulationData, messages, evaluator, }, }; await updateProblem(savedProblem.problemId, problem); setSavedSolution(true); } return ( <> Save Solution setIsModalOpen(false)} className="absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 bg-white rounded-lg p-6 max-w-2xl w-full z-50" overlayClassName="fixed inset-0 bg-black bg-opacity-50 z-40" > {savedSolution && ( <>
Solution Saved
)} {!savedSolution && ( <>
Save solution for loaded problem from last prompt and recording.
Evaluator describes a condition the explanation must satisfy.
Leave the evaluator blank if the API explanation is not right and the problem isn't solved yet.
Evaluator:
)}
); }