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(props: MarkdownEditorTwoColumnsProps): React.ReactElement { const [uploading, setUploading] = useState(false) const [error, setError] = useState(null) const pages = props.pages ?? [] const pagesHandlers = createPagesHandlers({ pages, onPagesChange: props.onPagesChange }) const handleImageUpload = createImageUploadHandler({ setError, setUploading, onMediaAdd: props.onMediaAdd, onBannerChange: props.onBannerChange, onSetPageImageUrl: pagesHandlers.setPageContent, }) return (
{ void handleImageUpload({ file }) }} uploading={uploading} error={error} {...(props.onPagesChange ? { onAddPage: pagesHandlers.addPage } : {})} />
{props.onPagesChange && ( { await handleImageUpload({ file, pageNumber }) }} /> )}
) } function MarkdownToolbar({ onFileSelected, uploading, error, onAddPage, }: { onFileSelected: (file: File) => void uploading: boolean error: string | null onAddPage?: (type: 'markdown' | 'image') => void }): React.ReactElement { return (
) } function MarkdownPreview({ value }: { value: string }): React.ReactElement { return (
{value || {t('markdown.preview.empty')}}
) } function PagesManager({ pages, onPageContentChange, onPageTypeChange, onRemovePage, onImageUpload, }: { pages: Page[] onPageContentChange: (pageNumber: number, content: string) => void onPageTypeChange: (pageNumber: number, type: 'markdown' | 'image') => void onRemovePage: (pageNumber: number) => void onImageUpload: (file: File, pageNumber: number) => Promise }): React.ReactElement { if (pages.length === 0) { return
{t('page.empty')}
} return (

{t('page.title')}

{pages.map((page) => ( onPageContentChange(page.number, content)} onTypeChange={(type) => onPageTypeChange(page.number, type)} onRemove={() => onRemovePage(page.number)} onImageUpload={async (file) => { await onImageUpload(file, page.number) }} /> ))}
) } function PageEditor({ page, onContentChange, onTypeChange, onRemove, onImageUpload, }: { page: Page onContentChange: (content: string) => void onTypeChange: (type: 'markdown' | 'image') => void onRemove: () => void onImageUpload: (file: File) => Promise }): React.ReactElement { return (
) } function EditorColumn(params: { value: string; onChange: (value: string) => void }): React.ReactElement { return (