@opengis/fastify-table
Version:
core-plugins
43 lines (34 loc) • 1.6 kB
JavaScript
import { applyHook, getTemplate } from '../../../../utils.js';
const sql = `select property_key as key, property_json as json, property_int as int,
property_text as text from admin.properties where 1=1`;
async function getSettings({ pg }) {
const { rows = [] } = await pg.query(sql);
const data = rows.reduce((acc, curr) => Object.assign(acc, { [curr.key]: curr.json || curr.int || curr.text }), {});
return data;
}
export default async function formFunction(req) {
const time = Date.now();
const { pg, params, user } = req;
const hookData = await applyHook('preForm', { form: params?.form, user });
if (hookData?.message && hookData?.status) {
return { message: hookData?.message, status: hookData?.status };
}
const form = await getTemplate('form', hookData?.form || params?.form);
if (!form) { return { status: 404, message: 'not found' }; }
// replace settings
const arr = JSON.stringify(form).match(/{{settings.([^}]*)}}/g);
if (arr?.length) {
const string = JSON.stringify(form);
const settings = await getSettings({ pg });
const match = arr.reduce((acc, curr) => Object.assign(acc, { [curr]: settings[curr.replace(/^{{settings./g, '').replace(/}}$/, '')] }), {});
const res = Object.keys(match).reduce((s, m) => s.replace(m, match[m]), string);
return { time: Date.now() - time, form: JSON.parse(res) };
}
const res = { time: Date.now() - time, form };
const res1 = await applyHook('afterForm', {
form: hookData?.form || params?.form,
payload: res,
user,
});
return res1 || { time: Date.now() - time, form };
}