@opengis/admin 0.4.27 → 0.4.29
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/README.md +97 -97
- package/dist/{add-page-sde7JqiX.js → add-page-VsKeXogR.js} +4 -4
- package/dist/{admin-interface-Dhqli6Vu.js → admin-interface-CRxPKyYw.js} +20 -23
- package/dist/{admin-view-BoHHzowt.js → admin-view-ulbtCtj1.js} +17 -22
- package/dist/admin.js +1 -1
- package/dist/admin.umd.cjs +59 -59
- package/dist/assets/logo.svg +41 -41
- package/dist/{card-view-Cf1C7sZW.js → card-view-DibuO4qO.js} +3 -3
- package/dist/{edit-page-Cpp4ig3I.js → edit-page-DTvgV6IT.js} +8 -8
- package/dist/{import-file-A4o0SJpP.js → import-file-BCkV-vfK.js} +11193 -11248
- package/dist/{profile-page-C2xnBGUM.js → profile-page-pFO4XMgi.js} +2 -2
- package/dist/style.css +1 -1
- package/module/settings/card/admin.accounts.table/index.yml +7 -7
- package/module/settings/card/admin.accounts.table/rules.hbs +18 -18
- package/module/settings/card/admin.accounts.table/users.hbs +13 -13
- package/module/settings/card/admin.routes.table/groups.hbs +11 -11
- package/module/settings/card/admin.routes.table/users.hbs +16 -16
- package/module/settings/cls/core.actions.json +17 -17
- package/module/settings/cls/core.scope.json +13 -13
- package/module/settings/cls/properties.site_status.json +13 -13
- package/module/settings/cls/properties.widget_status.json +13 -13
- package/module/settings/cls/yes_no.json +11 -11
- package/module/settings/form/admin.accounts.form.json +13 -13
- package/module/settings/form/admin.properties.form.json +15 -15
- package/module/settings/form/admin.roles.form.json +21 -21
- package/module/settings/form/admin.user_properties.form.json +15 -15
- package/module/settings/form/admin.user_roles_card.form.json +13 -13
- package/module/settings/interface/admin.properties.json +4 -4
- package/module/settings/interface/admin.roles.json +4 -4
- package/module/settings/interface/admin.routes.json +4 -4
- package/module/settings/interface/admin.users.json +4 -4
- package/module/settings/select/core.routes.sql +1 -1
- package/module/settings/select/core.user_mentioned.sql +1 -1
- package/module/settings/select/core.user_uid.sql +1 -1
- package/module/settings/table/admin.properties.table.json +39 -39
- package/module/settings/table/admin.user_properties.table.json +34 -34
- package/package.json +82 -82
- package/server/helpers/core/coalesce.js +7 -7
- package/server/helpers/core/select.js +48 -48
- package/server/helpers/core/token.js +18 -18
- package/server/helpers/list/buttonHelper.js +21 -21
- package/server/helpers/temp/contentList.js +58 -58
- package/server/helpers/temp/ifCond.js +101 -101
- package/server/helpers/utils/button.js +5 -5
- package/server/helpers/utils/mdToHTML.js +17 -17
- package/server/plugins/cron.js +10 -10
- package/server/plugins/docs.js +28 -28
- package/server/routes/calendar/controllers/calendar.data.js +124 -124
- package/server/routes/calendar/index.mjs +7 -7
- package/server/routes/notifications/controllers/readNotifications.js +18 -18
- package/server/routes/notifications/controllers/testEmail.js +35 -35
- package/server/routes/notifications/controllers/userNotifications.js +53 -53
- package/server/routes/notifications/hook/onWidgetSet.js +56 -56
- package/server/routes/notifications/index.mjs +26 -26
- package/server/routes/root.mjs +3 -3
- package/server/routes/user/controllers/user.cls.id.js +14 -14
- package/server/routes/user/controllers/user.cls.js +72 -72
- package/server/routes/user/controllers/user.info.js +17 -17
- package/server/templates/cls/itree.recrzone_category.json +73 -73
- package/server/templates/cls/test.json +9 -9
- package/server/templates/form/admin.user_cls.data.form.json +49 -49
- package/server/templates/form/admin.user_group_rel.form.json +21 -21
- package/server/templates/form/form-user-pass.json +10 -10
- package/server/templates/form/form-user_group.json +39 -39
- package/server/templates/form/form-users.json +156 -156
- package/server/templates/form/user_group_access.form.json +22 -22
- package/server/templates/select/account_id.json +2 -2
- package/server/templates/table/gis.dataset.table.json +43 -43
- package/server/templates/table/management.user_group.table.json +112 -112
- package/server/templates/table/management.users.table.json +126 -126
- package/server/utils/addNotification.js +21 -21
- package/server/utils/sendNotification.js +89 -89
package/package.json
CHANGED
@@ -1,82 +1,82 @@
|
|
1
|
-
{
|
2
|
-
"name": "@opengis/admin",
|
3
|
-
"version": "0.4.
|
4
|
-
"description": "This project Softpro Admin",
|
5
|
-
"main": "dist/admin.js",
|
6
|
-
"type": "module",
|
7
|
-
"directories": {
|
8
|
-
"test": "test"
|
9
|
-
},
|
10
|
-
"files": [
|
11
|
-
"dist/*",
|
12
|
-
"module/*",
|
13
|
-
"server/*",
|
14
|
-
"plugin.js",
|
15
|
-
"utils.js",
|
16
|
-
"config.js"
|
17
|
-
],
|
18
|
-
"scripts": {
|
19
|
-
"patch": "npm run build && npm version patch && git push && npm publish",
|
20
|
-
"prepublishOnly": "npm run build",
|
21
|
-
"test": "node --test",
|
22
|
-
"lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore",
|
23
|
-
"build": "vite build",
|
24
|
-
"build-app": "cross-env APP=true vite build",
|
25
|
-
"admin": "cross-env NODE_ENV=admin npm run start",
|
26
|
-
"prod": "cross-env NODE_ENV=production npm run start",
|
27
|
-
"debug": "node --watch-path=server server",
|
28
|
-
"start": "node server",
|
29
|
-
"start-env": "node --env-file=.env server",
|
30
|
-
"docs:i": "npm install --prefix ./docs",
|
31
|
-
"docs:dev": "npm run --prefix ./docs docs:dev",
|
32
|
-
"docs:build": "npm run --prefix ./docs docs:build",
|
33
|
-
"docs:preview": "npm run --prefix ./docs docs:preview"
|
34
|
-
},
|
35
|
-
"keywords": [
|
36
|
-
"admin",
|
37
|
-
"database",
|
38
|
-
"fastify",
|
39
|
-
"vue",
|
40
|
-
"vite",
|
41
|
-
"opengis"
|
42
|
-
],
|
43
|
-
"author": "Softpro",
|
44
|
-
"license": "ISC",
|
45
|
-
"dependencies": {
|
46
|
-
"@fancyapps/ui": "^5.0.36",
|
47
|
-
"@fullcalendar/core": "^6.1.15",
|
48
|
-
"@fullcalendar/daygrid": "^6.1.15",
|
49
|
-
"@fullcalendar/interaction": "^6.1.15",
|
50
|
-
"@fullcalendar/list": "^6.1.15",
|
51
|
-
"@fullcalendar/timegrid": "^6.1.15",
|
52
|
-
"@fullcalendar/vue3": "^6.1.15",
|
53
|
-
"@opengis/v3-core": "^0.3.213",
|
54
|
-
"@opengis/v3-filter": "0.1.30",
|
55
|
-
"@turf/turf": "^7.1.0",
|
56
|
-
"@vitejs/plugin-vue": "^5.0.4",
|
57
|
-
"@vueuse/core": "^13.0.0",
|
58
|
-
"close-with-grace": "^1.3.0",
|
59
|
-
"cross-env": "^7.0.3",
|
60
|
-
"date-fns": "^4.1.0",
|
61
|
-
"maplibre-gl": "^4.7.0",
|
62
|
-
"markdown-it": "14.1.0",
|
63
|
-
"moment": "^2.30.1",
|
64
|
-
"nodemailer": "^6.5.0",
|
65
|
-
"qrcode": "^1.5.4",
|
66
|
-
"vite": "^5.1.4",
|
67
|
-
"vue": "^3.4.21",
|
68
|
-
"vue-router": "^4.3.0",
|
69
|
-
"vuedraggable": "^4.1.0"
|
70
|
-
},
|
71
|
-
"devDependencies": {
|
72
|
-
"@opengis/fastify-auth": "1.1.x",
|
73
|
-
"@opengis/fastify-table": "1.4.x",
|
74
|
-
"@opengis/table-builder": "^1.1.1",
|
75
|
-
"@vue/eslint-config-typescript": "^12.0.0",
|
76
|
-
"eslint": "^8.49.0",
|
77
|
-
"eslint-config-airbnb": "^19.0.4",
|
78
|
-
"eslint-plugin-import": "^2.25.3",
|
79
|
-
"eslint-plugin-vue": "^9.17.0",
|
80
|
-
"sass-embedded": "1.89.2"
|
81
|
-
}
|
82
|
-
}
|
1
|
+
{
|
2
|
+
"name": "@opengis/admin",
|
3
|
+
"version": "0.4.29",
|
4
|
+
"description": "This project Softpro Admin",
|
5
|
+
"main": "dist/admin.js",
|
6
|
+
"type": "module",
|
7
|
+
"directories": {
|
8
|
+
"test": "test"
|
9
|
+
},
|
10
|
+
"files": [
|
11
|
+
"dist/*",
|
12
|
+
"module/*",
|
13
|
+
"server/*",
|
14
|
+
"plugin.js",
|
15
|
+
"utils.js",
|
16
|
+
"config.js"
|
17
|
+
],
|
18
|
+
"scripts": {
|
19
|
+
"patch": "npm run build && npm version patch && git push && npm publish",
|
20
|
+
"prepublishOnly": "npm run build",
|
21
|
+
"test": "node --test",
|
22
|
+
"lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore",
|
23
|
+
"build": "vite build",
|
24
|
+
"build-app": "cross-env APP=true vite build",
|
25
|
+
"admin": "cross-env NODE_ENV=admin npm run start",
|
26
|
+
"prod": "cross-env NODE_ENV=production npm run start",
|
27
|
+
"debug": "node --watch-path=server server",
|
28
|
+
"start": "node server",
|
29
|
+
"start-env": "node --env-file=.env server",
|
30
|
+
"docs:i": "npm install --prefix ./docs",
|
31
|
+
"docs:dev": "npm run --prefix ./docs docs:dev",
|
32
|
+
"docs:build": "npm run --prefix ./docs docs:build",
|
33
|
+
"docs:preview": "npm run --prefix ./docs docs:preview"
|
34
|
+
},
|
35
|
+
"keywords": [
|
36
|
+
"admin",
|
37
|
+
"database",
|
38
|
+
"fastify",
|
39
|
+
"vue",
|
40
|
+
"vite",
|
41
|
+
"opengis"
|
42
|
+
],
|
43
|
+
"author": "Softpro",
|
44
|
+
"license": "ISC",
|
45
|
+
"dependencies": {
|
46
|
+
"@fancyapps/ui": "^5.0.36",
|
47
|
+
"@fullcalendar/core": "^6.1.15",
|
48
|
+
"@fullcalendar/daygrid": "^6.1.15",
|
49
|
+
"@fullcalendar/interaction": "^6.1.15",
|
50
|
+
"@fullcalendar/list": "^6.1.15",
|
51
|
+
"@fullcalendar/timegrid": "^6.1.15",
|
52
|
+
"@fullcalendar/vue3": "^6.1.15",
|
53
|
+
"@opengis/v3-core": "^0.3.213",
|
54
|
+
"@opengis/v3-filter": "0.1.30",
|
55
|
+
"@turf/turf": "^7.1.0",
|
56
|
+
"@vitejs/plugin-vue": "^5.0.4",
|
57
|
+
"@vueuse/core": "^13.0.0",
|
58
|
+
"close-with-grace": "^1.3.0",
|
59
|
+
"cross-env": "^7.0.3",
|
60
|
+
"date-fns": "^4.1.0",
|
61
|
+
"maplibre-gl": "^4.7.0",
|
62
|
+
"markdown-it": "14.1.0",
|
63
|
+
"moment": "^2.30.1",
|
64
|
+
"nodemailer": "^6.5.0",
|
65
|
+
"qrcode": "^1.5.4",
|
66
|
+
"vite": "^5.1.4",
|
67
|
+
"vue": "^3.4.21",
|
68
|
+
"vue-router": "^4.3.0",
|
69
|
+
"vuedraggable": "^4.1.0"
|
70
|
+
},
|
71
|
+
"devDependencies": {
|
72
|
+
"@opengis/fastify-auth": "1.1.x",
|
73
|
+
"@opengis/fastify-table": "1.4.x",
|
74
|
+
"@opengis/table-builder": "^1.1.1",
|
75
|
+
"@vue/eslint-config-typescript": "^12.0.0",
|
76
|
+
"eslint": "^8.49.0",
|
77
|
+
"eslint-config-airbnb": "^19.0.4",
|
78
|
+
"eslint-plugin-import": "^2.25.3",
|
79
|
+
"eslint-plugin-vue": "^9.17.0",
|
80
|
+
"sass-embedded": "1.89.2"
|
81
|
+
}
|
82
|
+
}
|
@@ -1,8 +1,8 @@
|
|
1
|
-
export default function coalesce() {
|
2
|
-
for (let i = 0; i < arguments.length - 1; i += 1) {
|
3
|
-
if (arguments[i] || arguments[i] === 0) {
|
4
|
-
return arguments[i];
|
5
|
-
}
|
6
|
-
}
|
7
|
-
return null;
|
1
|
+
export default function coalesce() {
|
2
|
+
for (let i = 0; i < arguments.length - 1; i += 1) {
|
3
|
+
if (arguments[i] || arguments[i] === 0) {
|
4
|
+
return arguments[i];
|
5
|
+
}
|
6
|
+
}
|
7
|
+
return null;
|
8
8
|
}
|
@@ -1,48 +1,48 @@
|
|
1
|
-
import { getPG, getSelect } from "@opengis/fastify-table/utils.js";
|
2
|
-
const pg = getPG();
|
3
|
-
|
4
|
-
export default async function select(ids, options) {
|
5
|
-
if (!ids || (Array.isArray(ids) && ids.length === 0) || ids === '') {
|
6
|
-
return '';
|
7
|
-
}
|
8
|
-
|
9
|
-
const data = options.hash?.data;
|
10
|
-
if (!data && data !== false && data !== 0) return '';
|
11
|
-
try {
|
12
|
-
const idsArray = Array.isArray(ids) ? ids : [ids];
|
13
|
-
|
14
|
-
const classifier = await getSelect(data);
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
if (!classifier) return `Не знайдено класифікатор ${data}`;
|
19
|
-
|
20
|
-
const arr = classifier.arr || []
|
21
|
-
if (classifier.sql && typeof classifier.sql === 'string') {
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
const metaQuery = `SELECT * FROM (${classifier.sql})q LIMIT 0`;
|
26
|
-
const meta = await pg.query(metaQuery);
|
27
|
-
const idColumn = meta.fields[0].name;
|
28
|
-
const textColumn = meta.fields[1].name;
|
29
|
-
|
30
|
-
const q = `SELECT "${idColumn}" AS id, "${textColumn}" AS text FROM (${classifier.sql}) q WHERE "${idColumn}"::text = ANY($1::text[])`;
|
31
|
-
const values = [idsArray.map(id => String(id))];
|
32
|
-
|
33
|
-
const { rows } = await pg.query(q, values);
|
34
|
-
Object.assign(arr, rows);
|
35
|
-
|
36
|
-
}
|
37
|
-
if (!arr.length) return idsArray;
|
38
|
-
|
39
|
-
const results = idsArray.map(id => {
|
40
|
-
const result = arr.find(el => String(el.id) == String(id));
|
41
|
-
return result ? result.text : '';
|
42
|
-
});
|
43
|
-
|
44
|
-
return results.filter(Boolean).join(', ');
|
45
|
-
} catch (err) {
|
46
|
-
return `Сталася помилка.<!-- err: ${err.toString()} -->`;
|
47
|
-
}
|
48
|
-
}
|
1
|
+
import { getPG, getSelect } from "@opengis/fastify-table/utils.js";
|
2
|
+
const pg = getPG();
|
3
|
+
|
4
|
+
export default async function select(ids, options) {
|
5
|
+
if (!ids || (Array.isArray(ids) && ids.length === 0) || ids === '') {
|
6
|
+
return '';
|
7
|
+
}
|
8
|
+
|
9
|
+
const data = options.hash?.data;
|
10
|
+
if (!data && data !== false && data !== 0) return '';
|
11
|
+
try {
|
12
|
+
const idsArray = Array.isArray(ids) ? ids : [ids];
|
13
|
+
|
14
|
+
const classifier = await getSelect(data);
|
15
|
+
|
16
|
+
|
17
|
+
|
18
|
+
if (!classifier) return `Не знайдено класифікатор ${data}`;
|
19
|
+
|
20
|
+
const arr = classifier.arr || []
|
21
|
+
if (classifier.sql && typeof classifier.sql === 'string') {
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
const metaQuery = `SELECT * FROM (${classifier.sql})q LIMIT 0`;
|
26
|
+
const meta = await pg.query(metaQuery);
|
27
|
+
const idColumn = meta.fields[0].name;
|
28
|
+
const textColumn = meta.fields[1].name;
|
29
|
+
|
30
|
+
const q = `SELECT "${idColumn}" AS id, "${textColumn}" AS text FROM (${classifier.sql}) q WHERE "${idColumn}"::text = ANY($1::text[])`;
|
31
|
+
const values = [idsArray.map(id => String(id))];
|
32
|
+
|
33
|
+
const { rows } = await pg.query(q, values);
|
34
|
+
Object.assign(arr, rows);
|
35
|
+
|
36
|
+
}
|
37
|
+
if (!arr.length) return idsArray;
|
38
|
+
|
39
|
+
const results = idsArray.map(id => {
|
40
|
+
const result = arr.find(el => String(el.id) == String(id));
|
41
|
+
return result ? result.text : '';
|
42
|
+
});
|
43
|
+
|
44
|
+
return results.filter(Boolean).join(', ');
|
45
|
+
} catch (err) {
|
46
|
+
return `Сталася помилка.<!-- err: ${err.toString()} -->`;
|
47
|
+
}
|
48
|
+
}
|
@@ -1,19 +1,19 @@
|
|
1
|
-
import { setToken } from "@opengis/fastify-table/utils.js";
|
2
|
-
|
3
|
-
export default function token(params) {
|
4
|
-
|
5
|
-
const { data, hash } = params;
|
6
|
-
|
7
|
-
if (!data?.root?.user?.uid && !hash.uid) return '-';
|
8
|
-
if (!hash || typeof hash !== 'object') return '-';
|
9
|
-
|
10
|
-
// const id = hash?.edit ? hash?.id : data?.root?.id;
|
11
|
-
// console.log(hash)
|
12
|
-
const [token] = setToken({
|
13
|
-
ids: [JSON.stringify(hash)],
|
14
|
-
|
15
|
-
uid: data?.root?.user?.uid || hash.uid,
|
16
|
-
array: 1,
|
17
|
-
});
|
18
|
-
return token;
|
1
|
+
import { setToken } from "@opengis/fastify-table/utils.js";
|
2
|
+
|
3
|
+
export default function token(params) {
|
4
|
+
|
5
|
+
const { data, hash } = params;
|
6
|
+
|
7
|
+
if (!data?.root?.user?.uid && !hash.uid) return '-';
|
8
|
+
if (!hash || typeof hash !== 'object') return '-';
|
9
|
+
|
10
|
+
// const id = hash?.edit ? hash?.id : data?.root?.id;
|
11
|
+
// console.log(hash)
|
12
|
+
const [token] = setToken({
|
13
|
+
ids: [JSON.stringify(hash)],
|
14
|
+
|
15
|
+
uid: data?.root?.user?.uid || hash.uid,
|
16
|
+
array: 1,
|
17
|
+
});
|
18
|
+
return token;
|
19
19
|
}
|
@@ -1,21 +1,21 @@
|
|
1
|
-
import buttonAdd from "../utils/buttonAdd.js";
|
2
|
-
import buttonDel from "../utils/buttonDel.js";
|
3
|
-
import buttonEdit from "../utils/buttonEdit.js";
|
4
|
-
import button from "../utils/button.js";
|
5
|
-
export default function buttonHelper(data, opt) {
|
6
|
-
const { hash } = opt;
|
7
|
-
|
8
|
-
// console.log(params)
|
9
|
-
|
10
|
-
if (!hash.token) return "token empty";
|
11
|
-
if (hash.add) {
|
12
|
-
return buttonAdd(hash.token, hash.title);
|
13
|
-
}
|
14
|
-
if (hash.del) {
|
15
|
-
return buttonDel(hash.token, hash.title);
|
16
|
-
}
|
17
|
-
if (hash.edit) {
|
18
|
-
return buttonEdit(hash.token, hash.title);
|
19
|
-
}
|
20
|
-
return button(hash.token, hash.title);
|
21
|
-
}
|
1
|
+
import buttonAdd from "../utils/buttonAdd.js";
|
2
|
+
import buttonDel from "../utils/buttonDel.js";
|
3
|
+
import buttonEdit from "../utils/buttonEdit.js";
|
4
|
+
import button from "../utils/button.js";
|
5
|
+
export default function buttonHelper(data, opt) {
|
6
|
+
const { hash } = opt;
|
7
|
+
|
8
|
+
// console.log(params)
|
9
|
+
|
10
|
+
if (!hash.token) return "token empty";
|
11
|
+
if (hash.add) {
|
12
|
+
return buttonAdd(hash.token, hash.title);
|
13
|
+
}
|
14
|
+
if (hash.del) {
|
15
|
+
return buttonDel(hash.token, hash.title);
|
16
|
+
}
|
17
|
+
if (hash.edit) {
|
18
|
+
return buttonEdit(hash.token, hash.title);
|
19
|
+
}
|
20
|
+
return button(hash.token, hash.title);
|
21
|
+
}
|
@@ -1,58 +1,58 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
import { getPG, handlebars } from '@opengis/fastify-table/utils.js';
|
4
|
-
|
5
|
-
const maxLimit = 100;
|
6
|
-
|
7
|
-
/**
|
8
|
-
* Відображення даних з таблиці або запиту до БД на сторінці. За запитом отримуємо масив json із рядків бази даних.
|
9
|
-
* Є можливість застосування синтаксису sql у змінній query для формування запиту до БД.
|
10
|
-
*
|
11
|
-
* @summary Відображення контенту на сторінці. Є можливість застосування синтаксису sql у змінній query.
|
12
|
-
* @priority 5
|
13
|
-
* @type helper
|
14
|
-
* @alias contentList
|
15
|
-
* @example
|
16
|
-
* {{#contentList table="help.doc_function" query="type='api'" sql1=1 limit=1}}{{#each rows}}{{{JSON 2 this}}}{{/each}}{{/contentList}}
|
17
|
-
* @example
|
18
|
-
* {{#contentList table="help.doc_function" sql1=1 query="name like '%form%'" limit=1}}{{#each rows}}{{{JSON 2 this}}}{{/each}}{{/contentList}}
|
19
|
-
* @example
|
20
|
-
* {{#contentList table="help.article" sql=1 query="module='CORE'" limit=1}}{{#each rows}}{{{JSON 2 this}}}{{/each}}{{/contentList}}
|
21
|
-
* @param {String} table Таблиця в базі або конфіг таблиця
|
22
|
-
* @param {String} query Запит до бази
|
23
|
-
* @param {Number} limit Кількість рядків на сторінці
|
24
|
-
* @param {String} sql Вивід sql запиту
|
25
|
-
* @returns {String} Returns HTML
|
26
|
-
*/
|
27
|
-
export default async function contentList(options) {
|
28
|
-
const { table, limit, query, order, sql, debug } = options.hash;
|
29
|
-
if (!table) { return 'Table undefined'; }
|
30
|
-
|
31
|
-
try {
|
32
|
-
const pg = getPG();
|
33
|
-
|
34
|
-
const hasBrackets = table.trim().startsWith('(') && table.trim().endsWith(')');
|
35
|
-
|
36
|
-
const where = `where ${query ? query : '1=1'}`;
|
37
|
-
const _limit = limit !== undefined && limit !== null ? Math.min(maxLimit, +limit) : 15;
|
38
|
-
const _order = order ? `order by ${order}` : '';
|
39
|
-
|
40
|
-
const SQL = `select *,${pg.pk[table] || '1'}::text from ${hasBrackets ? table + ' t' : table} ${where} ${_order} limit ${_limit}`;
|
41
|
-
const compiledSQL = SQL.includes('{{') ? await handlebars.compile(SQL)({ ...options.data.root, hash: options.hash, opt: options.hash }) : SQL;
|
42
|
-
|
43
|
-
if (sql) {
|
44
|
-
return compiledSQL.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>').replaceAll('"', '"')
|
45
|
-
.replaceAll("'", ''');
|
46
|
-
}
|
47
|
-
const { rows } = await pg.query(compiledSQL);
|
48
|
-
const data = { rows, total: rows.length, ...options.data?.root };
|
49
|
-
|
50
|
-
if (debug) {
|
51
|
-
return JSON.stringify(data, null, 2);
|
52
|
-
}
|
53
|
-
|
54
|
-
return options.fn(data);
|
55
|
-
} catch (err) {
|
56
|
-
return `Сталася помилка, зверніться до відділу підтримки.<!-- err: ${err.toString()} -->`;
|
57
|
-
}
|
58
|
-
};
|
1
|
+
|
2
|
+
|
3
|
+
import { getPG, handlebars } from '@opengis/fastify-table/utils.js';
|
4
|
+
|
5
|
+
const maxLimit = 100;
|
6
|
+
|
7
|
+
/**
|
8
|
+
* Відображення даних з таблиці або запиту до БД на сторінці. За запитом отримуємо масив json із рядків бази даних.
|
9
|
+
* Є можливість застосування синтаксису sql у змінній query для формування запиту до БД.
|
10
|
+
*
|
11
|
+
* @summary Відображення контенту на сторінці. Є можливість застосування синтаксису sql у змінній query.
|
12
|
+
* @priority 5
|
13
|
+
* @type helper
|
14
|
+
* @alias contentList
|
15
|
+
* @example
|
16
|
+
* {{#contentList table="help.doc_function" query="type='api'" sql1=1 limit=1}}{{#each rows}}{{{JSON 2 this}}}{{/each}}{{/contentList}}
|
17
|
+
* @example
|
18
|
+
* {{#contentList table="help.doc_function" sql1=1 query="name like '%form%'" limit=1}}{{#each rows}}{{{JSON 2 this}}}{{/each}}{{/contentList}}
|
19
|
+
* @example
|
20
|
+
* {{#contentList table="help.article" sql=1 query="module='CORE'" limit=1}}{{#each rows}}{{{JSON 2 this}}}{{/each}}{{/contentList}}
|
21
|
+
* @param {String} table Таблиця в базі або конфіг таблиця
|
22
|
+
* @param {String} query Запит до бази
|
23
|
+
* @param {Number} limit Кількість рядків на сторінці
|
24
|
+
* @param {String} sql Вивід sql запиту
|
25
|
+
* @returns {String} Returns HTML
|
26
|
+
*/
|
27
|
+
export default async function contentList(options) {
|
28
|
+
const { table, limit, query, order, sql, debug } = options.hash;
|
29
|
+
if (!table) { return 'Table undefined'; }
|
30
|
+
|
31
|
+
try {
|
32
|
+
const pg = getPG();
|
33
|
+
|
34
|
+
const hasBrackets = table.trim().startsWith('(') && table.trim().endsWith(')');
|
35
|
+
|
36
|
+
const where = `where ${query ? query : '1=1'}`;
|
37
|
+
const _limit = limit !== undefined && limit !== null ? Math.min(maxLimit, +limit) : 15;
|
38
|
+
const _order = order ? `order by ${order}` : '';
|
39
|
+
|
40
|
+
const SQL = `select *,${pg.pk[table] || '1'}::text from ${hasBrackets ? table + ' t' : table} ${where} ${_order} limit ${_limit}`;
|
41
|
+
const compiledSQL = SQL.includes('{{') ? await handlebars.compile(SQL)({ ...options.data.root, hash: options.hash, opt: options.hash }) : SQL;
|
42
|
+
|
43
|
+
if (sql) {
|
44
|
+
return compiledSQL.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>').replaceAll('"', '"')
|
45
|
+
.replaceAll("'", ''');
|
46
|
+
}
|
47
|
+
const { rows } = await pg.query(compiledSQL);
|
48
|
+
const data = { rows, total: rows.length, ...options.data?.root };
|
49
|
+
|
50
|
+
if (debug) {
|
51
|
+
return JSON.stringify(data, null, 2);
|
52
|
+
}
|
53
|
+
|
54
|
+
return options.fn(data);
|
55
|
+
} catch (err) {
|
56
|
+
return `Сталася помилка, зверніться до відділу підтримки.<!-- err: ${err.toString()} -->`;
|
57
|
+
}
|
58
|
+
};
|