import TemplateService from "../service/configuration/templateService"; import { PermissionModule } from "../type/permissionTypes"; import TemplateUsageService from "../service/configuration/templateUsageService"; import Handlebars, { template } from "handlebars"; import { FileSystemHelper } from "./fileSystemHelper"; export abstract class TemplateHelper { static getTemplateFromFile(template: string) { return FileSystemHelper.readTemplateFile(`/src/templates/${template}.template.html`); } static async getTemplateFromStore(templateId: number): Promise { return (await TemplateService.getById(templateId)).html; } static applyDataToTemplate(template: string, data: any): string { const normalizedTemplate = this.normalizeTemplate(template); const templateCompiled = Handlebars.compile(normalizedTemplate); return templateCompiled(data); } static normalizeTemplate(template: string): string { template = template.replace(/.*?<\/listend>/g, "{{/each}}"); template = template.replace(/]*>(WDH Start: )?/g, "{{#each "); template = template.replace(/<\/liststart>/g, "}}"); return template; } static async renderFileForModule({ module, title = "pdf-export Mitgliederverwaltung", headerData = {}, bodyData = {}, footerData = {}, }: { module: `${PermissionModule}` | `${PermissionModule}.${string}`; title?: string; headerData?: any; bodyData?: any; footerData?: any; }): Promise<{ header: string; body: string; footer: string; headerMargin?: number; footerMargin?: number }> { const moduleTemplate = await TemplateUsageService.getByScope(module); let header = `

${title}

`; let footer = ""; let body = ""; if (moduleTemplate.headerId) { header = await this.getTemplateFromStore(moduleTemplate.headerId); header = this.applyDataToTemplate(header, { title, ...headerData }); } if (moduleTemplate.footerId) { footer = await this.getTemplateFromStore(moduleTemplate.footerId); } else { footer = this.getTemplateFromFile(module + ".footer"); } footer = this.applyDataToTemplate(footer, footerData); if (moduleTemplate.bodyId) { body = await this.getTemplateFromStore(moduleTemplate.bodyId); } else { body = this.getTemplateFromFile(module + ".body"); } body = this.applyDataToTemplate(body, bodyData); return { header, footer, body, headerMargin: moduleTemplate.headerHeight, footerMargin: moduleTemplate.footerHeight, }; } }