import { toast } from "react-toastify"; import ReactModal from 'react-modal'; import { useState } from "react"; import { workbenchStore } from "~/lib/stores/workbench"; import { getProblemsUsername, submitProblem } from "~/lib/replay/Problems"; import type { BoltProblemInput } from "~/lib/replay/Problems"; ReactModal.setAppElement('#root'); // Component for saving the current chat as a new problem. export function SaveProblem() { const [isModalOpen, setIsModalOpen] = useState(false); const [formData, setFormData] = useState({ title: '', description: '', name: '' }); const [problemId, setProblemId] = useState(null); const handleSaveProblem = () => { setIsModalOpen(true); setFormData({ title: '', description: '', name: '' }); setProblemId(null); }; const handleInputChange = (e: React.ChangeEvent) => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: value })); }; const handleSubmitProblem = async () => { // Add validation here if (!formData.title) { toast.error('Please fill in title field'); return; } const username = getProblemsUsername(); if (!username) { toast.error('Please fill in username field'); return; } toast.info("Submitting problem..."); console.log("SubmitProblem", formData); await workbenchStore.saveAllFiles(); const { contentBase64 } = await workbenchStore.generateZipBase64(); const problem: BoltProblemInput = { version: 2, title: formData.title, description: formData.description, username, repositoryContents: contentBase64, }; const problemId = await submitProblem(problem); if (problemId) { setProblemId(problemId); } } return ( <> Save Problem 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" > {problemId && ( <>
Problem Submitted: {problemId}
)} {!problemId && ( <>
Save prompts as new problems when AI results are unsatisfactory.
Problems are publicly visible and are used to improve AI performance.
Title:
Description:
)}
); }