@opengis/fastify-table
Version:
core-plugins
52 lines (43 loc) • 2.01 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,
});
return data?.html || data || `template not found "${tokenData.form || name}"`;
}