diff --git a/web-next/app/[locale]/content-creators/page.tsx b/web-next/app/[locale]/content-creators/page.tsx new file mode 100644 index 0000000..356e037 --- /dev/null +++ b/web-next/app/[locale]/content-creators/page.tsx @@ -0,0 +1,106 @@ +import type { Metadata } from 'next' +import { getTranslations, setRequestLocale } from 'next-intl/server' +import { getContentCreator } from '@/lib/content-creator' +import { cleanPostHtml } from '@/lib/forum-sanitize' + +export const dynamic = 'force-dynamic' + +export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise { + const { locale } = await params + const t = await getTranslations({ locale, namespace: 'Misc' }) + return { title: t('creators.pageTitle') } +} + +/** + * Creadores de contenido (el menú VIDEOS) — réplica del partial Django + * `partials/videos.html`. Enseña el primer creador de `home_contentcreator`, y + * si no hay ninguno, el mismo aviso que Django. + */ +export default async function ContentCreatorsPage({ params }: { params: Promise<{ locale: string }> }) { + const { locale } = await params + setRequestLocale(locale) + const t = await getTranslations('Misc') + const cc = await getContentCreator() + + return ( +
+
+
+ {/* El título va SIEMPRE, haya creadores o no: Django lo metía dentro + del `if` y sin datos la página quedaba con un

suelto, sin + cabecera ni caja. Sin creador se usa el título de la sección. */} +

+

{cc ? cc.title : t('creators.pageTitle')}

+
+ {!cc ? ( +
+
+
+

{t('creators.empty')}

+
+
+
+ ) : ( + <> +
+
+ {/* La descripción es HTML de CKEditor (lo edita un admin): se + sanea con la misma allowlist que los mensajes del foro. */} +
+
+
+ + {(cc.youtubeVideoUrl || cc.avatarImageUrl) && ( +
+
+ {cc.avatarImageUrl && ( + // eslint-disable-next-line @next/next/no-img-element + Avatar + )} + {cc.youtubeVideoUrl && ( +