import React, { useMemo, useRef } from 'react'; import { Sparkles, ArrowRight, ArrowLeft } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { motion, AnimatePresence } from 'framer-motion'; import UploadStep from '@/components/upload/UploadStep'; import ProductSelector from '@/components/products/ProductSelector'; import PromptEditor from '@/components/prompts/PromptEditor'; import SequenceViewer from '@/components/sequences/SequenceViewer'; import { apiFetch } from '@/lib/api'; import { useGeneratorWorkflow } from '@/context/GeneratorWorkflowContext'; export default function EmailGeneratorTab() { const { step, setStep, uploadedFile, setUploadedFile, selectedProducts, setSelectedProducts, prompts, setPrompts, linkedinPrompts, setLinkedinPrompts, includeLinkedin, setIncludeLinkedin, isGenerating, generationComplete, beginGeneration, } = useGeneratorWorkflow(); const generateButtonRef = useRef(null); const canProceedToStep2 = uploadedFile && selectedProducts.length > 0; const canProceedToStep3 = useMemo(() => { const emailOk = selectedProducts.length > 0 && selectedProducts.every((p) => (prompts[p.name] || '').trim()); if (!emailOk) return false; if (!includeLinkedin) return true; return selectedProducts.every((p) => (linkedinPrompts[p.name] || '').trim()); }, [selectedProducts, prompts, linkedinPrompts, includeLinkedin]); const scrollToGenerateButton = () => { if (generateButtonRef.current) { generateButtonRef.current.scrollIntoView({ behavior: 'smooth', block: 'center' }); } }; const handleGenerate = async () => { if (!uploadedFile?.fileId || !canProceedToStep3) { alert('Please complete all steps before generating sequences.'); return; } try { const res = await apiFetch('/api/save-prompts', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ file_id: uploadedFile.fileId, prompts, products: selectedProducts.map((p) => p.name), linkedin_prompts: includeLinkedin ? linkedinPrompts : {}, }), }); if (!res.ok) { const err = await res.json().catch(() => ({})); throw new Error(err.detail || res.statusText); } } catch (error) { console.error('Error saving prompts:', error); alert('Failed to save templates. Please try again.'); return; } setStep(3); beginGeneration(true); }; return (
Import your Apollo CSV and select products for your campaign
Edit templates before generation.
{generationComplete ? 'Review and export below.' : 'You can navigate away; generation continues in background.'}