@opengis/admin 0.2.123 → 0.2.124

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/admin",
3
- "version": "0.2.123",
3
+ "version": "0.2.124",
4
4
  "description": "This project Softpro Admin",
5
5
  "main": "dist/admin.js",
6
6
  "type": "module",
@@ -1,118 +1,123 @@
1
- import path from 'node:path';
2
-
3
- import { getAccess, handlebars, setOpt, setToken, getTemplate, handlebarsSync, applyHook } from "@opengis/fastify-table/utils.js";
4
- //import { setOpt, setToken } from "../../../../../fastify-table/utils.js";
5
- // import yaml from 'js-yaml';
6
- import getTableData from "./tableData.js";
7
- import conditions from './utils/conditions.js';
8
-
9
- const components = {
10
- 'vs-widget-file': `select 'vs-widget-file' as component, count(*) from crm.files where entity_id=$1 and file_status<>3`,
11
- 'vs-widget-comments': `select 'vs-widget-comments' as component, count(*) from crm.communications where entity_id=$1`
12
- };
13
-
14
- export default async function getCardData(req) {
15
-
16
- const {
17
- pg, params = {}, session = {}, user
18
- } = req;
19
- const { table, id } = params;
20
- const uid = session.passport?.user?.uid;
21
-
22
- const res = await applyHook('cardData', { table, id, user });
23
- if (res) return res;
24
-
25
-
26
- const time = Date.now();
27
-
28
- const template = await getTemplate('card', table);
29
- const access = await getAccess({ table, user });
30
-
31
- const tableTemplate = await getTemplate('table', table);
32
-
33
- const index = template?.find(el => el[0] === 'index.yml')?.[1] || {};
34
-
35
- const { message, rows = [] } = index.table && index.query ? await pg.query(`select * from ${index.table} where ${handlebarsSync.compile(index.query)({ uid, user })}`) :
36
- await getTableData({ pg, params: { table, id }, session, user });
37
-
38
- if (message) return { message };
39
-
40
- // conditions
41
- index.panels?.filter(el => el.items).forEach(el => {
42
- el.items = el.items?.filter(el => conditions(el.conditions, rows[0]));
43
- })
44
-
45
- // title, count
46
- index.panels?.filter(el => el.items).forEach(async el => {
47
- const filtered = el.items.filter(el => el.count?.toLowerCase?.().includes('select'));
48
- const data = await Promise.all(filtered.map(el => pg.query(el.count).then(el => el.rows[0] || {})))
49
- filtered.forEach((el, i) => {
50
- Object.assign(el, data[i] || {}, data[i].count ? {} : { count: undefined })
51
- });
52
- const q = el.items.map((el) => el.component ? components[el.component] : null).filter(el => el).join(' union all ');
53
- const counts = q && id
54
- ? await pg.query(q, [id])
55
- .then(e => e.rows.reduce((acc, curr) => Object.assign(acc, { [curr.component]: curr.count }), {}))
56
- : {};
57
- el.items?.filter?.(item => item.component)?.forEach(item => Object.assign(item, { count: counts?.[item.component] }));
58
- })
59
-
60
-
61
- // tokens result
62
- const tokens = {};
63
- if (access.actions?.includes?.('edit') && index?.tokens && typeof index?.tokens === 'object' && !Array.isArray(index?.tokens)) {
64
- for (let key in index?.tokens) {
65
- const item = index?.tokens[key];
66
- Object.keys(item).filter(el => item[el]?.includes?.('{{')).forEach(el => {
67
- item[el] = handlebarsSync.compile(item[el])({ user, uid: user?.uid, id, data: rows[0] });
68
- });
69
-
70
- const token = item.form && item.table ? setToken({
71
- ids: [JSON.stringify(item)],
72
- uid,
73
- array: 1,
74
- })[0] : setOpt(item, user.uid);
75
- tokens[key] = token;
76
- }
77
- }
78
-
79
- // vue result
80
- const vue = template?.filter((el) => el[0].endsWith('.vue'))
81
- .reduce((acc, curr) => Object.assign(acc, { [path.parse(curr[0]).name]: curr[1].match(/<template[^>]*>([\s\S]*?)<\/template>/)[1].trim() }), {});
82
-
83
- // data result
84
- const data = {};
85
- if (index?.data && index?.data?.[0]?.name) {
86
- await Promise.all(index.data.filter((el) => el?.name && el?.sql).map(async (el) => {
87
- const q = handlebarsSync.compile(el.sql)({ data: rows[0], user, uid: user?.uid, id });
88
- const { rows: sqlData } = await pg.query(q);
89
- data[el.name] = sqlData;
90
- }));
91
- }
92
-
93
-
94
-
95
- // html result
96
- const html = {};
97
- if (template) {
98
- await Promise.all(template.filter(el => el[0].includes('.hbs')).map(async (el) => {
99
- const htmlContent = await handlebars.compile(el[1])({ ...rows[0], user, data, tokens });
100
- const name = el[0].substring(0, el[0].lastIndexOf('.'))
101
- html[name] = htmlContent;
102
- }));
103
- }
104
-
105
- return {
106
- time: Date.now() - time,
107
- ...index,
108
- tokens,
109
- vue,
110
- data,
111
- html,
112
- rows,
113
- columns: tableTemplate?.columns || tableTemplate?.colModel,
114
- table: undefined,
115
- query: undefined,
116
- };
117
-
1
+ import path from 'node:path';
2
+
3
+ import { getAccess, handlebars, setOpt, setToken, getTemplate, handlebarsSync, applyHook } from "@opengis/fastify-table/utils.js";
4
+ //import { setOpt, setToken } from "../../../../../fastify-table/utils.js";
5
+ // import yaml from 'js-yaml';
6
+ import getTableData from "./tableData.js";
7
+ import conditions from './utils/conditions.js';
8
+
9
+ const components = {
10
+ 'vs-widget-file': `select 'vs-widget-file' as component, count(*) from crm.files where entity_id=$1 and file_status<>3`,
11
+ 'vs-widget-comments': `select 'vs-widget-comments' as component, count(*) from crm.communications where entity_id=$1`
12
+ };
13
+
14
+ export default async function getCardData(req) {
15
+
16
+ const {
17
+ pg, params = {}, session = {}, user
18
+ } = req;
19
+ const { table, id } = params;
20
+ const uid = session.passport?.user?.uid;
21
+
22
+ const res = await applyHook('cardData', { table, id, user });
23
+ if (res) return res;
24
+
25
+
26
+ const time = Date.now();
27
+
28
+ const template = await getTemplate('card', table);
29
+ const access = await getAccess({ table, user });
30
+
31
+ const tableTemplate = await getTemplate('table', table);
32
+
33
+ const index = template?.find(el => el[0] === 'index.yml')?.[1] || {};
34
+
35
+ const { message, rows = [] } = index.table && index.query ? await pg.query(`select * from ${index.table} where ${handlebarsSync.compile(index.query)({ uid, user })}`) :
36
+ await getTableData({ pg, params: { table, id }, session, user });
37
+
38
+ if (message) return { message };
39
+
40
+ // conditions
41
+ index.panels?.filter(el => el.items).forEach(el => {
42
+ el.items = el.items?.filter(el => conditions(el.conditions, rows[0]));
43
+ })
44
+
45
+ // title, count
46
+ index.panels?.filter(el => el.items).forEach(async el => {
47
+ const filtered = el.items.filter(el => el.count?.toLowerCase?.().includes('select'));
48
+ const data = await Promise.all(filtered.map(el => pg.query(el.count).then(el => el.rows[0] || {})))
49
+ filtered.forEach((el, i) => {
50
+ Object.assign(el, data[i] || {}, data[i].count ? {} : { count: undefined })
51
+ });
52
+ const q = el.items.map((el) => el.component ? components[el.component] : null).filter(el => el).join(' union all ');
53
+ const counts = q && id
54
+ ? await pg.query(q, [id])
55
+ .then(e => e.rows.reduce((acc, curr) => Object.assign(acc, { [curr.component]: curr.count }), {}))
56
+ : {};
57
+ el.items?.filter?.(item => item.component)?.forEach(item => Object.assign(item, { count: counts?.[item.component] }));
58
+ })
59
+
60
+
61
+ // tokens result
62
+ const tokens = {};
63
+ if (index?.tokens && typeof index?.tokens === 'object' && !Array.isArray(index?.tokens)) {
64
+ Object.keys(index.tokens || {})
65
+ .filter(key => index?.tokens[key]?.public
66
+ || access.actions?.includes?.('edit')
67
+ || access.actions?.includes?.('add')
68
+ )
69
+ .forEach(key => {
70
+ const item = index?.tokens[key];
71
+ Object.keys(item).filter(el => item[el]?.includes?.('{{')).forEach(el => {
72
+ item[el] = handlebarsSync.compile(item[el])({ user, uid: user?.uid, id, data: rows[0] });
73
+ });
74
+
75
+ const token = item.form && item.table ? setToken({
76
+ ids: [JSON.stringify(item)],
77
+ uid,
78
+ array: 1,
79
+ })[0] : setOpt(item, user.uid);
80
+ tokens[key] = token;
81
+ });
82
+ }
83
+
84
+ // vue result
85
+ const vue = template?.filter((el) => el[0].endsWith('.vue'))
86
+ .reduce((acc, curr) => Object.assign(acc, { [path.parse(curr[0]).name]: curr[1].match(/<template[^>]*>([\s\S]*?)<\/template>/)[1].trim() }), {});
87
+
88
+ // data result
89
+ const data = {};
90
+ if (index?.data && index?.data?.[0]?.name) {
91
+ await Promise.all(index.data.filter((el) => el?.name && el?.sql).map(async (el) => {
92
+ const q = handlebarsSync.compile(el.sql)({ data: rows[0], user, uid: user?.uid, id });
93
+ const { rows: sqlData } = await pg.query(q);
94
+ data[el.name] = sqlData;
95
+ }));
96
+ }
97
+
98
+
99
+
100
+ // html result
101
+ const html = {};
102
+ if (template) {
103
+ await Promise.all(template.filter(el => el[0].includes('.hbs')).map(async (el) => {
104
+ const htmlContent = await handlebars.compile(el[1])({ ...rows[0], user, data, tokens });
105
+ const name = el[0].substring(0, el[0].lastIndexOf('.'))
106
+ html[name] = htmlContent;
107
+ }));
108
+ }
109
+
110
+ return {
111
+ time: Date.now() - time,
112
+ ...index,
113
+ tokens,
114
+ vue,
115
+ data,
116
+ html,
117
+ rows,
118
+ columns: tableTemplate?.columns || tableTemplate?.colModel,
119
+ table: undefined,
120
+ query: undefined,
121
+ };
122
+
118
123
  }