import React from 'react'
import type { ArticleDraft } from '@/lib/articlePublisher'
import type { MediaRef } from '@/types/nostr'
import { ArticleField } from './ArticleField'
import { MarkdownEditor } from './MarkdownEditor'
import { MarkdownEditorTwoColumns } from './MarkdownEditorTwoColumns'
import { t } from '@/lib/i18n'
interface ArticleFieldsRightProps {
draft: ArticleDraft
onDraftChange: (draft: ArticleDraft) => void
}
export function ArticleFieldsRight({ draft, onDraftChange }: ArticleFieldsRightProps): React.ReactElement {
return (
)
}
function ContentEditorSection({
draft,
onDraftChange,
}: {
draft: ArticleDraft
onDraftChange: (draft: ArticleDraft) => void
}): React.ReactElement {
const useTwoColumns = draft.seriesId !== undefined
return (
{t('article.editor.content.label')}
{t('article.editor.content.help')}
)
}
function ContentEditor({
draft,
onDraftChange,
useTwoColumns,
}: {
draft: ArticleDraft
onDraftChange: (draft: ArticleDraft) => void
useTwoColumns: boolean
}): React.ReactElement {
const onMediaAdd = buildMediaAddHandler({ draft, onDraftChange })
const onBannerChange = buildBannerChangeHandler({ draft, onDraftChange })
const onContentChange = (value: string): void => onDraftChange({ ...draft, content: value })
if (useTwoColumns) {
return (
onDraftChange({ ...draft, pages })}
onMediaAdd={onMediaAdd}
onBannerChange={onBannerChange}
/>
)
}
return (
)
}
interface BuildMediaAddHandlerParams {
draft: ArticleDraft
onDraftChange: (draft: ArticleDraft) => void
}
function buildMediaAddHandler(params: BuildMediaAddHandlerParams): (media: MediaRef) => void {
return (media): void => {
const nextMedia = [...(params.draft.media ?? []), media]
params.onDraftChange({ ...params.draft, media: nextMedia })
}
}
interface BuildBannerChangeHandlerParams {
draft: ArticleDraft
onDraftChange: (draft: ArticleDraft) => void
}
function buildBannerChangeHandler(params: BuildBannerChangeHandlerParams): (url: string) => void {
return (url): void => {
params.onDraftChange({ ...params.draft, bannerUrl: url })
}
}
function ZapAmountField({
draft,
onDraftChange,
}: {
draft: ArticleDraft
onDraftChange: (draft: ArticleDraft) => void
}): React.ReactElement {
return (
onDraftChange({ ...draft, zapAmount: value as number })}
required
type="number"
min={1}
helpText={t('article.editor.sponsoring.help')}
/>
)
}