import { useState } from 'react' import type { MediaRef, Page } from '@/types/nostr' import { uploadNip95Media } from '@/lib/nip95' import { t } from '@/lib/i18n' interface MarkdownEditorTwoColumnsProps { value: string onChange: (value: string) => void pages?: Page[] onPagesChange?: (pages: Page[]) => void onMediaAdd?: (media: MediaRef) => void onBannerChange?: (url: string) => void } export function MarkdownEditorTwoColumns({ value, onChange, pages = [], onPagesChange, onMediaAdd, onBannerChange, }: MarkdownEditorTwoColumnsProps): React.ReactElement { const [uploading, setUploading] = useState(false) const [error, setError] = useState(null) const handleAddPage = (type: 'markdown' | 'image'): void => { if (!onPagesChange) { return } const newPage: Page = { number: pages.length + 1, type, content: type === 'markdown' ? '' : '', } onPagesChange([...pages, newPage]) } const handlePageContentChange = (pageNumber: number, content: string): void => { if (!onPagesChange) { return } const updatedPages = pages.map((p) => (p.number === pageNumber ? { ...p, content } : p)) onPagesChange(updatedPages) } const handlePageTypeChange = (pageNumber: number, type: 'markdown' | 'image'): void => { if (!onPagesChange) { return } const updatedPages = pages.map((p) => (p.number === pageNumber ? { ...p, type, content: '' } : p)) onPagesChange(updatedPages) } const handleRemovePage = (pageNumber: number): void => { if (!onPagesChange) { return } const updatedPages = pages .filter((p) => p.number !== pageNumber) .map((p, index) => ({ ...p, number: index + 1 })) onPagesChange(updatedPages) } const handleImageUpload = async (file: File, pageNumber?: number): Promise => { setError(null) setUploading(true) try { const media = await uploadNip95Media(file) if (media.type === 'image') { if (pageNumber !== undefined && onPagesChange) { handlePageContentChange(pageNumber, media.url) } else { onBannerChange?.(media.url) } onMediaAdd?.(media) } } catch (e) { setError(e instanceof Error ? e.message : t('upload.error.failed')) } finally { setUploading(false) } } return (
{ void handleImageUpload(file) }} uploading={uploading} error={error} onAddPage={onPagesChange ? handleAddPage : undefined} />