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 (

{t('common.loading')}

) } if (error || !series) { return (

{error ?? 'Série introuvable'}

) } if (!isAuthor) { return (

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

) } const handlePublishSuccess = (): void => { setTimeout(() => { void router.push(`/series/${seriesId}`) }, 2000) } return ( <>

zapwall4Science

{ void router.push(`/series/${seriesId}`) }} seriesOptions={[{ id: series.id, title: series.title }]} onSelectSeries={() => { // Series is already selected and cannot be changed }} defaultSeriesId={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 } }