import React, { useState } from 'react'; import { Button, CircularProgress } from '@mui/material'; import { mediumBlogApi } from '../../services/blogWriterApi'; import { BlogOutlineSection, BlogResearchResponse } from '../../services/blogWriterApi'; interface ManualContentButtonProps { /** * The confirmed outline sections */ outline: BlogOutlineSection[]; /** * The research data */ research: BlogResearchResponse; /** * Blog title (optional) */ blogTitle?: string; /** * Existing sections content (optional) */ sections?: Record; /** * Callback when content generation starts */ onGenerationStart?: (taskId: string) => void; } /** * Manual content generation button that works independently of CopilotKit * Triggers medium blog generation via mediumBlogApi */ export const ManualContentButton: React.FC = ({ outline, research, blogTitle, sections, onGenerationStart, }) => { const [isGenerating, setIsGenerating] = useState(false); const [error, setError] = useState(null); const handleGenerate = async () => { if (!outline || outline.length === 0) { alert('Please confirm an outline first before generating content.'); return; } if (!research) { alert('Research data is required for content generation.'); return; } setIsGenerating(true); setError(null); try { const payload = { outline, research, title: blogTitle || outline[0]?.heading || 'Blog Post', existing_sections: sections || {}, }; const { task_id } = await mediumBlogApi.startMediumGeneration(payload as any); if (task_id) { onGenerationStart?.(task_id); } else { throw new Error('Failed to start content generation - no task ID returned'); } } catch (error) { const errorMessage = error instanceof Error ? error.message : 'Unknown error'; setError(errorMessage); alert(`Content generation failed: ${errorMessage}`); setIsGenerating(false); } }; return (

Generate Blog Content

Generate full content for all sections in your confirmed outline.

{error && (

{error}

)}
); }; export default ManualContentButton;