import { useState } from 'react'; import { Button, Intent } from '@blueprintjs/core'; import ClientDetailsStep from './ClientDetailsStep'; import DeploymentConfigStep from './DeploymentConfigStep'; import ReviewStep from './ReviewStep'; import DeploymentLiveStep from './DeploymentLiveStep'; import { submitProvisioningJob } from '../../api/tenantApi'; import { defaultStackConfig } from '../../types/provisioning'; import type { ProvisioningRequest } from '../../types/provisioning'; const EMPTY: ProvisioningRequest = { clientName: '', stateCode: '', subdomain: '', adminEmail: '', siteCode: '', environment: 'fdev', tier: 'Shared', stackConfig: defaultStackConfig('Shared'), }; const STEP_LABELS = ['Client Details', 'Deployment Config', 'Review', 'Deploying']; interface Props { onClose: () => void; } export default function DeployWizard({ onClose }: Props) { const [activeStep, setActiveStep] = useState(0); const [formData, setFormData] = useState(EMPTY); const [step0Valid, setStep0Valid] = useState(false); const [step1Valid, setStep1Valid] = useState(true); // tier has a default const [jobId, setJobId] = useState(null); const [submitting, setSubmitting] = useState(false); const [submitError, setSubmitError] = useState(null); const handleChange = (u: Partial) => setFormData((p) => ({ ...p, ...u })); const handleDeploy = async () => { setSubmitting(true); setSubmitError(null); try { const id = await submitProvisioningJob(formData); setJobId(id); setActiveStep(3); } catch (e: unknown) { setSubmitError(e instanceof Error ? e.message : 'Deployment failed. Please try again.'); } finally { setSubmitting(false); } }; const canGoBack = activeStep > 0 && !jobId; const isLastFormStep = activeStep === 2; return (
{/* Header */}

Deploy New Client

Provision a new Clarity tenant from scratch.

{!jobId && (
{/* Step progress */}
{STEP_LABELS.map((label, i) => (
{i < activeStep ? '✓' : i + 1}
{label}
))}
{/* Step content */}
{activeStep === 0 && ( setStep0Valid(isValid)} /> )} {activeStep === 1 && ( setStep1Valid(isValid)} /> )} {activeStep === 2 && ( {}} /> )} {activeStep === 3 && jobId && ( )} {submitError && (

{submitError}

)}
{/* Footer nav */} {activeStep < 3 && (
{canGoBack && (
)}
); }