@opengis/fastify-table
Version:
core-plugins
69 lines (68 loc) • 2.37 kB
JavaScript
/* eslint-disable no-param-reassign */
import { config, applyHook, getTemplate, getToken, setToken, handlebarsSync, } from "../../../../utils.js";
function formatSchema(schema, user, opt) {
function parseDataTables(obj) {
if (obj?.add) {
const obj1 = obj.add?.obj?.includes("{{") && opt
? handlebarsSync.compile(obj.add.obj)(opt)
: obj.add?.obj;
if (obj.add?.obj)
obj.add.obj = obj1;
const [token] = setToken({
ids: [
JSON.stringify({
...obj.add,
table: obj.add?.table || obj.add?.model,
}),
],
uid: user.uid,
array: 1,
});
Object.assign(obj.add, {
token,
api: `${config.prefix || "/api"}/table/${token}`,
});
}
else if (obj?.type === "DataTable" && obj.colModel?.length) {
obj.colModel.forEach(parseDataTables);
}
}
Object.keys(schema || {})
.map((key) => ({ key, ...schema[key] }))
.forEach(parseDataTables);
}
export default async function getTemplateApi(req) {
const { user } = req || {};
const { params = {} } = req;
const { type, name } = params;
const tokenData = (await getToken({ token: name, uid: user?.uid, json: 1 })) || {};
const hookData = (await applyHook("preTemplate", {
name: tokenData.name || name,
type,
user,
}));
if (hookData?.message && hookData?.status)
return hookData;
const data = await getTemplate(type, hookData?.name || tokenData.form || name);
if (data && tokenData.obj) {
const obj = tokenData.obj.split("#").reduce((p, el) => ({
...p,
[el.split("=")[0] || ""]: el.split("=")[1],
}), {});
Object.assign(data, { obj });
}
if (type === "form" && user?.uid) {
const schema = data?.schema || data;
formatSchema(schema, user, data?.obj);
}
await applyHook("afterTemplate", {
name,
type,
data,
user,
});
if (type === "form" && data && !data?.schema) {
return { schema: data };
}
return data?.html || data || `template not found "${tokenData.form || name}"`;
}