@opengis/fastify-table 1.1.92 → 1.1.93

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengis/fastify-table",
3
- "version": "1.1.92",
3
+ "version": "1.1.93",
4
4
  "type": "module",
5
5
  "description": "core-plugins",
6
6
  "main": "index.js",
@@ -1,12 +1,22 @@
1
+ import pgClients from '../../pg/pgClients.js';
1
2
  import getTemplate from './getTemplate.js';
2
3
 
3
4
  const loadCls = {};
4
5
 
5
- export default async function getSelect(name) {
6
+ const sqls = {
7
+ sql: 'select data from admin.cls where name=$1',
8
+ json: 'select json_agg(json_build_object(\'id\', code, \'text\', name, \'icon\', icon, \'color\', color)) as data from admin.cls where parent=$1',
9
+ };
10
+
11
+ export default async function getSelect(name, pg = pgClients.client) {
6
12
  if (loadCls[name]) return loadCls[name];
7
13
 
8
- const clsData = await getTemplate(['cls', 'select'], name);
9
- if (!clsData) { return null; }
14
+ const clsDataGIT = await getTemplate(['cls', 'select'], name);
15
+ const { type } = !clsDataGIT && pg.pk?.['admin.cls'] ? await pg.query('select type from admin.cls where parent is null and name=$1 limit 1', [name]).then(el => el.rows?.[0] || {}) : {};
16
+ const q = !clsDataGIT && type && ['sql', 'json'].includes(type) ? sqls[type] : undefined;
17
+ const clsDataDB = q ? await pg.query(q, [name]).then(el => el.rows?.[0]?.data) : {};
18
+ const clsData = clsDataGIT || clsDataDB;
19
+ if (!clsData) return null;
10
20
 
11
21
  // console.log(clsData);
12
22
  if (clsData && Array.isArray(clsData)) {
@@ -10,7 +10,7 @@ const selectMeta = {};
10
10
  export default async function getSelectMeta({ name, pg = pgClients.client, nocache }) {
11
11
  if (selectMeta[name] && !nocache) return selectMeta[name];
12
12
 
13
- const cls = await getSelect(name);
13
+ const cls = await getSelect(name, pg);
14
14
 
15
15
  if (!cls) return null;
16
16
  if (cls.arr) return cls;
@@ -4,13 +4,14 @@ import getFilterSQL from './getFilterSQL/index.js';
4
4
  import getTemplate from './getTemplate.js';
5
5
  import pgClients from '../../pg/pgClients.js';
6
6
  import config from '../../../../config.js';
7
+ import getSelectVal from './metaFormat/getSelectVal.js';
7
8
 
8
9
  export default async function gisIRColumn({
9
10
  pg = pgClients.client, layer, column, sql, query = '1=1', filter, state, search, custom,
10
11
  }) {
11
12
  const time = Date.now();
12
13
 
13
- const sel = await getSelect(query.cls || column);
14
+ const sel = await getSelect(query.cls || column, pg);
14
15
 
15
16
  const body = await getTemplate('table', layer);
16
17
  const fData = await getFilterSQL({
@@ -58,7 +59,9 @@ export default async function gisIRColumn({
58
59
 
59
60
  const { rows } = await pg.query(q);
60
61
  const cls = query.cls || body?.columns?.find((el) => el.name === column)?.data || col.data || col.option;
61
- const select = await getSelect(cls, { val: rows.map((el) => el.id), ar: 1 });
62
+ const select = await getSelectVal({
63
+ pg, name: cls, values: rows.map((el) => el.id), ar: 1,
64
+ });
62
65
  rows.forEach((el) => {
63
66
  const data = select?.arr ? select.arr?.find((item) => item.id?.toString() === el.id?.toString()) : undefined;
64
67
  Object.assign(el, data || {});
@@ -6,7 +6,7 @@ const selectIds = {};
6
6
  export default async function getSelectVal({ pg = pgClients.client, name, values: valuesOrigin }) {
7
7
  if (!valuesOrigin?.length) return null;
8
8
  const values = valuesOrigin.map(el => el.toString());
9
- const cls = await getSelect(name);
9
+ const cls = await getSelect(name, pg);
10
10
 
11
11
  // === array ===
12
12
  if (cls?.arr && Array.isArray(cls?.arr)) {
@@ -27,7 +27,7 @@ export default async function filterAPI(req) {
27
27
 
28
28
  const filters = loadTable?.filters || loadTable?.filterList || [];
29
29
  await Promise.all(filters.filter((el) => el.data).map(async (el) => {
30
- const cls = await getSelect(el.data);
30
+ const cls = await getSelect(el.data, req.pg);
31
31
  if (!cls?.arr || !loadTable.table) return;
32
32
  const { dataTypeID } = columns.find((item) => item.name === el.id) || {};
33
33
  const countArr = req.pg.pgType[dataTypeID]?.includes('[]')