import { useEffect, useState } from "react"; import { asWorkspaceApiError, publishWorkspace, validateWorkspace, type PublishWorkspaceRequest, type WorkspaceRevision, } from "../api/workspaces"; import { Button } from "../components/ui/button"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "../components/ui/dialog"; export interface WorkspacePublishDialogProps { open: boolean; request: PublishWorkspaceRequest; onOpenChange: (open: boolean) => void; onPublished: (revision: WorkspaceRevision | undefined) => void; } function RevisionSummary({ request }: { request: PublishWorkspaceRequest }) { return

New workspace · base {request.baseCommit.slice(0, 12)}

; } export function WorkspacePublishDialog({ open, request, onOpenChange, onPublished }: WorkspacePublishDialogProps) { const [validatedRequest, setValidatedRequest] = useState(); const [confirming, setConfirming] = useState(false); const [message, setMessage] = useState(); const [publishing, setPublishing] = useState(false); useEffect(() => { if (!open) return; setValidatedRequest(undefined); setConfirming(false); setMessage(undefined); setPublishing(false); }, [open, request]); async function validateDraft() { setMessage(undefined); try { const result = await validateWorkspace(request.workspace); setValidatedRequest({ ...request, workspace: result.workspace }); setMessage("Workspace definition is valid."); } catch (error) { const safe = asWorkspaceApiError(error); setMessage(safe ? `${safe.code}: ${safe.message}` : "workspace_invalid: Validation could not be completed"); } } async function createWorkspace() { if (!validatedRequest) return; setPublishing(true); setMessage(undefined); try { const result = await publishWorkspace(validatedRequest); onPublished(result?.revision); onOpenChange(false); } catch (error) { const safe = asWorkspaceApiError(error); setMessage(safe ? `${safe.code}: ${safe.message}` : "workspace_invalid: Publication could not be completed"); setConfirming(false); } finally { setPublishing(false); } } return ( {confirming ? "Confirm workspace creation" : "Create workspace"} {confirming ? "This creates the validated workspace definition in the shared Git registry." : "Validation and an explicit confirmation are required before this shared definition is created."}
{message &&

{message}

} {confirming ? ( ) : (
)}
); }