import React from 'react'; import { useParams, Link } from 'react-router-dom'; import { SlideEditorErrorBoundary } from './SlideEditorErrorBoundary.tsx'; import { LoadingState } from './LoadingState.tsx'; import { ErrorState } from './ErrorState.tsx'; import { LayoutSelection } from './LayoutSelection.tsx'; import { ContentEditor } from './ContentEditor.tsx'; import { SlidePreviewModal } from './SlidePreviewModal.tsx'; import { useSlideEditor } from './useSlideEditor.ts'; import './SlideEditor.css'; export const SlideEditor: React.FC = () => { const { presentationId, slideId } = useParams<{ presentationId: string; slideId: string; }>(); const { // Data presentation, theme, selectedLayout, slideContent, slideNotes, currentStep, // States loading, error, saving, showPreview, // Computed isEditingExisting, // Actions updateSlotContent, setSlideNotes, setShowPreview, selectLayout, saveSlide, cancelEditing, } = useSlideEditor({ presentationId, slideId }); if (loading) { return ; } if (error) { return ; } if (!presentation || !theme) { return ; } return (
← Back to Presentation

{isEditingExisting ? 'Edit Slide' : 'New Slide'}

in "{presentation.metadata.name}"
{currentStep === 'content' && selectedLayout && ( )}
{currentStep === 'layout' && ( )} {currentStep === 'content' && selectedLayout && ( )}
{/* Preview Modal */} {selectedLayout && presentation && ( setShowPreview(false)} layout={selectedLayout} content={slideContent} aspectRatio={presentation.metadata.aspectRatio || '16:9'} themeName={theme?.name || 'Unknown Theme'} /> )}
); };