@opengis/fastify-table
Version:
core-plugins
47 lines (46 loc) • 1.98 kB
JavaScript
import { applyHook, getTemplate, pgClients } from "../../../../utils.js";
const q = `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 = pg?.pk?.["admin.properties"]
? await pg.query(q).then((el) => el.rows || [])
: [];
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, reply) {
const time = Date.now();
const { pg = pgClients.client, params, user } = req;
const hookData = (await applyHook("preForm", {
form: params?.name,
user,
}));
if (hookData?.message && hookData?.status) {
const response = hookData.status >= 400
? { error: hookData.message, code: hookData.status }
: hookData.message;
return reply.status(hookData.status).send(response);
}
const form = await getTemplate("form", hookData?.form || params?.name);
if (!form) {
return reply.status(404).send({ error: "form not found", code: 404 });
}
// 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?.name,
payload: res,
user,
});
return res1 || { time: Date.now() - time, form };
}