import Mustache from "mustache"; import {stripHtml} from "../../helpers"; import {getContext} from "svelte"; export function previewTitle(record) { const channel = getContext("channel"); let schema = channel.schemas.find((aSchema) => aSchema.name === record.record?.schema); if (!schema?.titleTemplate) { return noTemplate(schema, record.record); } let recordData = record.record.data; let template = Mustache.parse(schema.titleTemplate); let referencePreviews = template .filter(segment => segment[0] === "name") // keep only template tags .map((segment) => segment[1]) // map to fieldNames .filter(fieldName => { // keep only references let schemaField = schema.fields.find(f => f.name === fieldName) return schemaField?.info.name === "reference"; }).reduce((carry, fieldName) => { // map to records let child = record._children[fieldName].find(c => c.record.id === record.record.id); carry[field] = previewTitle(child); return carry; }, {}); recordData = {...recordData, ...referencePreviews} let render = Mustache.render(schema.titleTemplate, recordData); if (!render || render === "") { return noTemplate(schema, record.record); } return stripHtml(render.slice(0, 300)); } function noTemplate(schema, record) { if (schema?.type === "files") { return record._file.path; } let title = stripHtml( record?.data[schema.fields.filter((f) => f.info.name === "text")[0]?.name] ).slice(0, 300); if (title === "") { return "Untitled"; } return title; }