Files
lucent-laravel/front/js/svelte/records/Preview.js
T

52 lines
1.6 KiB
JavaScript
Raw Normal View History

2023-10-02 23:10:49 +03:00
import Mustache from "mustache";
import {stripHtml} from "../../helpers";
2024-03-21 22:33:41 +02:00
import {getContext} from "svelte";
2023-10-02 23:10:49 +03:00
2024-03-24 13:46:34 +02:00
export function previewTitle(record) {
2024-03-21 22:33:41 +02:00
const channel = getContext("channel");
2024-03-24 13:46:34 +02:00
let schema = channel.schemas.find((aSchema) => aSchema.name === record.record?.schema);
2023-10-02 23:10:49 +03:00
if (!schema?.titleTemplate) {
2024-03-24 13:46:34 +02:00
return noTemplate(schema, record.record);
2023-10-02 23:10:49 +03:00
}
2024-03-24 13:46:34 +02:00
let recordData = record.record.data;
2023-10-02 23:10:49 +03:00
let template = Mustache.parse(schema.titleTemplate);
let referencePreviews = template
2023-10-26 17:45:23 +03:00
.filter(segment => segment[0] === "name") // keep only template tags
2023-10-02 23:10:49 +03:00
.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";
2024-03-24 13:46:34 +02:00
}).reduce((carry, fieldName) => { // map to records
let child = record._children[fieldName].find(c => c.record.id === record.record.id);
carry[field] = previewTitle(child);
2023-10-02 23:10:49 +03:00
return carry;
}, {});
recordData = {...recordData, ...referencePreviews}
let render = Mustache.render(schema.titleTemplate, recordData);
if (!render || render === "") {
2024-03-24 13:46:34 +02:00
return noTemplate(schema, record.record);
2023-10-02 23:10:49 +03:00
}
return stripHtml(render.slice(0, 300));
}
function noTemplate(schema, record) {
if (schema?.type === "files") {
return record._file.path;
}
2023-10-26 17:45:23 +03:00
2024-03-24 13:46:34 +02:00
let title = stripHtml(
2023-10-02 23:10:49 +03:00
record?.data[schema.fields.filter((f) => f.info.name === "text")[0]?.name]
).slice(0, 300);
2023-10-26 17:45:23 +03:00
2024-03-24 13:46:34 +02:00
if (title === "") {
2023-10-26 17:45:23 +03:00
return "Untitled";
}
return title;
2023-10-02 23:10:49 +03:00
}