'use client'; import React, { useState } from 'react'; import { Project } from '@/lib/vfs/types'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; interface CreateDeploymentModalProps { projects: Project[]; isOpen: boolean; onClose: () => void; onCreate: (data: { projectId: string; name: string; slug?: string }) => Promise; } export function CreateDeploymentModal({ projects, isOpen, onClose, onCreate, }: CreateDeploymentModalProps) { const [projectId, setProjectId] = useState(''); const [name, setName] = useState(''); const [slug, setSlug] = useState(''); const [isCreating, setIsCreating] = useState(false); const [error, setError] = useState(''); const handleCreate = async () => { if (!projectId || !name) { setError('Project and deployment name are required'); return; } setIsCreating(true); setError(''); try { await onCreate({ projectId, name, slug: slug || undefined, }); // Reset form setProjectId(''); setName(''); setSlug(''); } catch (err) { setError(err instanceof Error ? err.message : 'Failed to create deployment'); } finally { setIsCreating(false); } }; const handleClose = () => { if (!isCreating) { setProjectId(''); setName(''); setSlug(''); setError(''); onClose(); } }; // Auto-generate deployment name from selected project const handleProjectChange = (value: string) => { setProjectId(value); if (!name) { const project = projects.find(p => p.id === value); if (project) { setName(project.name); } } }; return ( Create New Deployment Create a new deployment to publish a project. Deployments let you manage publish settings independently from your project workspace.
{/* Project Selection */}

Choose which project to publish

{/* Deployment Name */}
setName(e.target.value)} placeholder="My Awesome Deployment" />

Display name for this published deployment

{/* Slug (Optional) */}
setSlug(e.target.value)} placeholder="my-awesome-deployment" />

URL-friendly identifier for this deployment

{/* Error Message */} {error && (
{error}
)}
); }