import React from 'react'
import { ImageUploadField } from '../ImageUploadField'
import { t } from '@/lib/i18n'
import type { SeriesDraft } from './createSeriesModalTypes'
import type { CreateSeriesModalController } from './useCreateSeriesModalController'
export function CreateSeriesModalView({ ctrl }: { ctrl: CreateSeriesModalController }): React.ReactElement {
return (
{!ctrl.canPublish ? : null}
)
}
function CreateSeriesModalHeader({ loading, onClose }: { loading: boolean; onClose: () => void }): React.ReactElement {
return (
{t('series.create.title')}
✕
)
}
function NotAuthorWarning(): React.ReactElement {
return (
{t('series.create.error.notAuthor')}
)
}
function CreateSeriesForm({ ctrl }: { ctrl: CreateSeriesModalController }): React.ReactElement {
return (
)
}
function SeriesTextFields(params: {
draft: SeriesDraft
setDraft: (draft: SeriesDraft) => void
loading: boolean
canPublish: boolean
}): React.ReactElement {
const disabled = params.loading || !params.canPublish
return (
<>
params.setDraft({ ...params.draft, title: value })}
/>
params.setDraft({ ...params.draft, description: value })}
/>
params.setDraft({ ...params.draft, preview: value })}
/>
>
)
}
function SeriesCategoryField(params: {
draft: SeriesDraft
setDraft: (draft: SeriesDraft) => void
loading: boolean
canPublish: boolean
}): React.ReactElement {
const disabled = params.loading || !params.canPublish
return (
{t('series.create.field.category')}
params.setDraft({ ...params.draft, category: e.target.value as SeriesDraft['category'] })}
className="w-full px-3 py-2 bg-cyber-darker border border-cyber-accent/30 rounded text-cyber-light focus:border-neon-cyan focus:outline-none"
required
disabled={disabled}
>
{t('category.science-fiction')}
{t('category.scientific-research')}
)
}
function SeriesCoverField({ draft, setDraft }: { draft: SeriesDraft; setDraft: (draft: SeriesDraft) => void }): React.ReactElement {
return (
setDraft({ ...draft, coverUrl: url })}
helpText={t('series.create.field.cover.help')}
/>
)
}
function SeriesError({ error }: { error: string | null }): React.ReactElement | null {
if (!error) {
return null
}
return (
)
}
function SeriesActions(params: { loading: boolean; canPublish: boolean; onClose: () => void }): React.ReactElement {
return (
{t('common.cancel')}
{params.loading ? t('common.loading') : t('series.create.submit')}
)
}
function TextField(params: {
id: string
label: string
value: string
disabled: boolean
required: boolean
onChange: (value: string) => void
}): React.ReactElement {
return (
{params.label}
params.onChange(e.target.value)}
className="w-full px-3 py-2 bg-cyber-darker border border-cyber-accent/30 rounded text-cyber-light focus:border-neon-cyan focus:outline-none"
required={params.required}
disabled={params.disabled}
/>
)
}
function TextAreaField(params: {
id: string
label: string
value: string
disabled: boolean
required: boolean
rows: number
helpText?: string
onChange: (value: string) => void
}): React.ReactElement {
return (
)
}