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'; import { getRepositoryContents } from '~/lib/replay/Repository'; 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); const repositoryId = workbenchStore.repositoryId.get(); if (!repositoryId) { toast.error('No repository ID found'); return; } const repositoryContents = await getRepositoryContents(repositoryId); const problem: BoltProblemInput = { version: 2, title: formData.title, description: formData.description, username, repositoryContents, }; 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:
)}
); }