import Head from 'next/head' import { useRouter } from 'next/router' import { useEffect, useState } from 'react' import { ArticleEditor } from '@/components/ArticleEditor' import { useNostrAuth } from '@/hooks/useNostrAuth' import { getSeriesById } from '@/lib/seriesQueries' import type { Series } from '@/types/nostr' import { t } from '@/lib/i18n' import Image from 'next/image' function PublishHeader({ series }: { series: Series }): React.ReactElement { return ( {t('series.publish.title', { series: series.title })} - zapwall.fr ) } function SeriesHeader({ series }: { series: Series }): React.ReactElement { return (
{series.coverUrl && (
{series.title}
)}

{series.title}

{t('series.publish.subtitle')}

) } export default function SeriesPublishPage(): React.ReactElement | null { const router = useRouter() const { id } = router.query const seriesId = typeof id === 'string' ? id : '' const { pubkey } = useNostrAuth() const { series, loading, error, isAuthor } = useSeriesPublishPageData(seriesId, pubkey ?? null) if (!seriesId) { return null } if (loading) { return } if (error || !series) { return { void router.back() }} /> } if (!isAuthor) { return { void router.push(`/series/${seriesId}`) }} /> } return { void router.push(`/series/${seriesId}`) }} onAfterPublish={() => { void router.push(`/series/${seriesId}`) }} /> } function SeriesPublishLoading(): React.ReactElement { return (

{t('common.loading')}

) } function SeriesPublishError(params: { error: string | null; onBack: () => void }): React.ReactElement { return (

{params.error ?? 'Série introuvable'}

) } function SeriesPublishNotAuthor(params: { onBack: () => void }): React.ReactElement { return (

{t('series.publish.error.notAuthor')}

) } function SeriesPublishEditorView(params: { series: Series; seriesId: string; onBack: () => void; onAfterPublish: () => void }): React.ReactElement { const handlePublishSuccess = (): void => { setTimeout(() => { params.onAfterPublish() }, 2000) } return ( <>

zapwall4Science

{ // Series is already selected and cannot be changed }} defaultSeriesId={params.series.id} />
) } function useSeriesPublishPageData( seriesId: string, userPubkey: string | null ): { series: Series | null loading: boolean error: string | null isAuthor: boolean } { const [series, setSeries] = useState(null) const [loading, setLoading] = useState(true) const [error, setError] = useState(null) useEffect(() => { if (!seriesId) { return } const load = async (): Promise => { setLoading(true) setError(null) try { const s = await getSeriesById(seriesId) if (!s) { setError('Série introuvable') setLoading(false) return } setSeries(s) } catch (e) { setError(e instanceof Error ? e.message : 'Erreur lors du chargement de la série') } finally { setLoading(false) } } void load() }, [seriesId]) const isAuthor = series !== null && userPubkey !== null && series.pubkey === userPubkey return { series, loading, error, isAuthor } }