import { useRef, useState } from "react"; import * as Api from "./api"; import { NavigationDialog } from "./navigation-dialog"; import { beginResearchSubmission, editResearchSubmission } from "./research-workspace-model"; import type { Research } from "@chopin/protocol"; import type { NavigationDialogMotion } from "./navigation-dialog"; import type { ResearchSubmission } from "./research-workspace-model"; export function NewResearchDialog( { channel, motion, onCreated, onDismiss, }: { channel: Api.Channel; motion: NavigationDialogMotion; onCreated: (workspace: Research.WorkspaceSummary) => void; onDismiss: () => void; }, ) { let input = useRef(null); let [submission, setSubmission] = useState({ text: "" }); let [creating, setCreating] = useState(false); let [error, setError] = useState(); let create = async () => { if (creating || !submission.text.trim()) return; let next = beginResearchSubmission(submission, "create"); setSubmission(next); setCreating(true); setError(undefined); try { let created = await Api.createResearchWorkspace( channel.id, next.submittedText, next.requestId, ); onCreated(created.workspace); } catch (reason) { setError(reason); setCreating(false); } }; return ( {} : onDismiss} title={`New research in ${channel.title}`} >
{ event.preventDefault(); void create(); }} >