import { IContentCTA, IContentData, IContentDataLink, IContentImage, IContentQuote, IDynamicContent, } from '@/models/dynamicContent'; function imageContent(data: IContentImage) { return (
{data.alt} {data.thumbTitle ? (
{data.thumbTitle}
) : ( <> )}
); } function titleContent(data: string) { return

{data}

; } function subtitleContent(data: string) { return

{data}

; } function fullContent(data: IContentData | string) { const normalizedData = typeof data === 'string' ? ({ data, } as IContentData) : data; const splittedData = normalizedData.data?.split('\n') || []; return splittedData.map((e, index) => { return (

{generateLinkedContent(e, normalizedData.links)}

); }); } function generateLinkedContent(data: string, links?: IContentDataLink[]) { const splitted = data.split(' '); const mappedLinks = {} as Record; links?.forEach((link) => { mappedLinks[link.key] = link; }); return (

{splitted.map((data) => { return mappedLinks[data] ? ( {mappedLinks[data].label} {' '} ) : ( <>{data} ); })}

); } function listContent(data: string[], type: 'bullet' | 'numberList') { return ( ); } function quoteContent(data: IContentQuote) { return (

{data.text}

{data.author ? ( — {data.author} ) : null}
); } function ctaContent(data: IContentCTA) { return ( {data.label} ); } function dividerContent() { return
; } export default function ContentGenerator({ data, className, }: { data: IDynamicContent[]; className?: string; }) { return (
{data.map((e, index) => { switch (e.type) { case 'title': return
{titleContent(e.data)}
; case 'subtitle': return
{subtitleContent(e.data)}
; case 'content': return
{fullContent(e.data)}
; case 'image': return
{imageContent(e.data)}
; case 'bullet': case 'numberList': return
{listContent(e.data, e.type)}
; case 'quote': return
{quoteContent(e.data)}
; case 'cta': return
{ctaContent(e.data)}
; case 'divider': return
{dividerContent()}
; default: return null; } })}
); }