import predefinedNewsletterElements from 'src/utils/predefinedNewsletterElements' export default function renderNewsletter (state) { const newsletterData = JSON.parse(JSON.stringify(state.newsletter)) // Create a deep copy of the newsletter data // Filter out sections with no elements newsletterData.sections = newsletterData.sections.filter(section => section.elements.length > 0) if (newsletterData.sections.length === 0) return '' // Function to render newsletter for a given language and layout (desktop or mobile) const renderForLanguageAndLayout = (language, layoutType) => { let newsletterHtml = '' // Choose the appropriate header, navigation, footer, and section title methods based on layout type const predefinedHeader = layoutType === 'desktop' ? predefinedNewsletterElements.headerDesktop : predefinedNewsletterElements.headerMobile const predefinedNav = layoutType === 'desktop' ? predefinedNewsletterElements.navDesktop : predefinedNewsletterElements.navMobile const predefinedFooter = layoutType === 'desktop' ? predefinedNewsletterElements.footerDesktop : predefinedNewsletterElements.footerMobile const predefinedSectionTitle = layoutType === 'desktop' ? predefinedNewsletterElements.sectionTitle : predefinedNewsletterElements.mobileSectionTitle const predefinedSpacer = layoutType === 'desktop' ? state.elements.spacer.renderDesktop : state.elements.spacer.renderMobile // Render header, navigation, and sections newsletterHtml += predefinedHeader(language) newsletterHtml += predefinedNav(newsletterData, language) // Loop through sections and render elements within each section newsletterData.sections.forEach(section => { // Only render section title if it's not named "preface" if (section.name.toLowerCase() !== 'preface' && section.name.toLowerCase() !== 'outro') { newsletterHtml += predefinedSectionTitle(section.name, language) } section.elements.forEach(element => { // Render each element based on its type (desktop or mobile) newsletterHtml += state.elements[element.type][layoutType === 'desktop' ? 'renderDesktop' : 'renderMobile'](element, language) }) }) // Render footer and spacer newsletterHtml += predefinedFooter(language) newsletterHtml += predefinedSpacer({ data: { height: 1000 } }) return newsletterHtml } // Initialize the final newsletter HTML by rendering for both languages and layouts let newsletterHtml = ''; ['german', 'english'].forEach(language => { ['desktop', 'mobile'].forEach(layoutType => { // Render newsletter for each language and layout combination newsletterHtml += renderForLanguageAndLayout(language, layoutType) }) }) // Return the final HTML wrapped in a document structure return predefinedNewsletterElements.document(newsletterHtml) }