@opengis/admin 0.1.52 → 0.1.54

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/dist/style.css CHANGED
@@ -1 +1 @@
1
- .map-popup__vertical[data-v-3f5a9aff]{overflow:auto;max-height:300px}.map-popup__vertical[data-v-3f5a9aff]::-webkit-scrollbar{width:6px;height:6px;background-color:#f5f5f5}.map-popup__vertical[data-v-3f5a9aff]::-webkit-scrollbar-thumb{border-radius:5px;background-color:#dedede}.map-popup__vertical[data-v-3f5a9aff]::-webkit-scrollbar-track{background-color:#f5f5f5}.map__popup-body[data-v-3f5a9aff]{table-layout:fixed;width:100%}.map__popup-body-item[data-v-3f5a9aff]:not(:last-child){border-bottom:1px solid #eeeeee}.map__popup-body-item td[data-v-3f5a9aff]{width:50%;word-wrap:break-word;text-align:start}.map__popup-body-item td[data-v-3f5a9aff]:first-child{font-weight:600}.popup-image[data-v-deb51e0a]{max-width:100%;max-height:220px;margin-bottom:10px;-o-object-fit:contain;object-fit:contain}.maplibregl-ctrl-bottom-right,.maplibregl-popup-close-button{display:none}.widget-file .vs-button{background-color:#2563eb;color:#fff;font-size:.875rem;line-height:1.25rem;font-weight:600}.ui-dialog__modal div.flex.justify-between.items-center.py-3.px-4.border-b{border-bottom-width:0px;--tw-text-opacity: 1;color:#1f2937;font-weight:500;font-size:1.125rem;line-height:1.75rem;padding-bottom:0rem}.ui-dialog__modal .ui-dialog__content .p-4{padding-top:0rem}.widget-images__item-desc span:first-child:after{content:"";width:2px;height:2px;border-radius:50%;display:flex;align-items:center;background:#676a6c;margin:0 5px}.disabled{cursor:not-allowed!important}.item__text-content,.item{transition:all .5s cubic-bezier(.4,0,.2,1)}.item:hover .item__text-content{opacity:.8}.vs-widget-images .vs-button{background-color:#2563eb;color:#fff;font-size:.875rem;line-height:1.25rem;font-weight:600}.ProseMirror-focused{outline:none}.editor-toolbar{background-color:#f9fafb}.editor-content{min-height:160px}button{transition:background-color .2s ease;outline:none}button:focus{outline:none}.editor-content ul{margin-left:20px}.editor-content ul>li{list-style:disc}.editor-content ol{list-style-type:decimal;margin-left:20px}.editor-content pre{background-color:#e7e7e7;border-radius:4px;padding:0 2px}.mention-popup{background-color:#fafafa;padding:10px;border-radius:10px;box-shadow:0 4px 6px #0000001a;max-width:200px;overflow-y:auto;width:auto}.mention{padding:2px 4px;border-radius:8px;background-color:#e7e7e7}.mention-option{padding:5px 10px;cursor:pointer;transition:background-color .2s;border-radius:8px}.mention-option:hover{background-color:#f0f0f0}.border-top:not(:first-child){--tw-border-opacity: 1;border-color:#e5e7eb;border-top-width:1px}.widget-comment-form .vs-button{padding:.625rem 1rem;font-size:.75rem;line-height:1rem;font-weight:500}.widget-comment-form .vs-button:focus{border:transparent;--tw-ring-opacity: 1;--tw-ring-color: rgb(191 219 254);--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 rgba(0, 0, 0, 0))}li[data-v-95b2773a]{cursor:move}.grid[data-v-9b7dd8fb]{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:1rem}.admin-wrapper[data-v-e777119e]{display:flex;height:100vh;align-items:start}.vs-popover__content>div{padding:.25rem}.hs-accordion-heading[data-v-4139bc00]{display:flex;align-items:center}.hs-accordion-toggle[data-v-4139bc00]{cursor:pointer}.hs-accordion-content[data-v-4139bc00]{padding-left:1.5rem}.table-info-card .editor-container{min-width:200px;width:270px}.slide-fade-enter-active[data-v-bbbe9039],.slide-fade-leave-active[data-v-bbbe9039]{transition:all .3s linear}.slide-fade-enter-from[data-v-bbbe9039],.slide-fade-leave-to[data-v-bbbe9039]{transform:translate(20px);opacity:0}
1
+ .vs-popover>div{text-align:start}.map-popup__vertical[data-v-3f5a9aff]{overflow:auto;max-height:300px}.map-popup__vertical[data-v-3f5a9aff]::-webkit-scrollbar{width:6px;height:6px;background-color:#f5f5f5}.map-popup__vertical[data-v-3f5a9aff]::-webkit-scrollbar-thumb{border-radius:5px;background-color:#dedede}.map-popup__vertical[data-v-3f5a9aff]::-webkit-scrollbar-track{background-color:#f5f5f5}.map__popup-body[data-v-3f5a9aff]{table-layout:fixed;width:100%}.map__popup-body-item[data-v-3f5a9aff]:not(:last-child){border-bottom:1px solid #eeeeee}.map__popup-body-item td[data-v-3f5a9aff]{width:50%;word-wrap:break-word;text-align:start}.map__popup-body-item td[data-v-3f5a9aff]:first-child{font-weight:600}.popup-image[data-v-deb51e0a]{max-width:100%;max-height:220px;margin-bottom:10px;-o-object-fit:contain;object-fit:contain}.maplibregl-ctrl-bottom-right,.maplibregl-popup-close-button{display:none}.widget-file .vs-button{background-color:#2563eb;color:#fff;font-size:.875rem;line-height:1.25rem;font-weight:600}.ui-dialog__modal div.flex.justify-between.items-center.py-3.px-4.border-b{border-bottom-width:0px;--tw-text-opacity: 1;color:#1f2937;font-weight:500;font-size:1.125rem;line-height:1.75rem;padding-bottom:0rem}.ui-dialog__modal .ui-dialog__content .p-4{padding-top:0rem}.widget-images__item-desc span:first-child:after{content:"";width:2px;height:2px;border-radius:50%;display:flex;align-items:center;background:#676a6c;margin:0 5px}.disabled{cursor:not-allowed!important}.item__text-content,.item{transition:all .5s cubic-bezier(.4,0,.2,1)}.item:hover .item__text-content{opacity:.8}.vs-widget-images .vs-button{background-color:#2563eb;color:#fff;font-size:.875rem;line-height:1.25rem;font-weight:600}.ProseMirror-focused{outline:none}.editor-toolbar{background-color:#f9fafb}.editor-content{min-height:160px}button{transition:background-color .2s ease;outline:none}button:focus{outline:none}.editor-content ul{margin-left:20px}.editor-content ul>li{list-style:disc}.editor-content ol{list-style-type:decimal;margin-left:20px}.editor-content pre{background-color:#e7e7e7;border-radius:4px;padding:0 2px}.mention-popup{background-color:#fafafa;padding:10px;border-radius:10px;box-shadow:0 4px 6px #0000001a;max-width:200px;overflow-y:auto;width:auto}.mention{padding:2px 4px;border-radius:8px;background-color:#e7e7e7}.mention-option{padding:5px 10px;cursor:pointer;transition:background-color .2s;border-radius:8px}.mention-option:hover{background-color:#f0f0f0}.border-top:not(:first-child){--tw-border-opacity: 1;border-color:#e5e7eb;border-top-width:1px}.widget-comment-form .vs-button{padding:.625rem 1rem;font-size:.75rem;line-height:1rem;font-weight:500}.widget-comment-form .vs-button:focus{border:transparent;--tw-ring-opacity: 1;--tw-ring-color: rgb(191 219 254);--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 rgba(0, 0, 0, 0))}li[data-v-95b2773a]{cursor:move}.grid[data-v-ed2cfe89]{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:1rem}.admin-wrapper[data-v-e777119e]{display:flex;height:100vh;align-items:start}.vs-popover__content>div{padding:.25rem}.hs-accordion-heading[data-v-4139bc00]{display:flex;align-items:center}.hs-accordion-toggle[data-v-4139bc00]{cursor:pointer}.hs-accordion-content[data-v-4139bc00]{padding-left:1.5rem}.table-info-card .editor-container{min-width:200px;width:270px}.slide-fade-enter-active[data-v-bbbe9039],.slide-fade-leave-active[data-v-bbbe9039]{transition:all .3s linear}.slide-fade-enter-from[data-v-bbbe9039],.slide-fade-leave-to[data-v-bbbe9039]{transform:translate(20px);opacity:0}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengis/admin",
3
- "version": "0.1.52",
3
+ "version": "0.1.54",
4
4
  "description": "This project Softpro Admin",
5
5
  "main": "dist/admin.js",
6
6
  "type": "module",
package/plugin.js CHANGED
@@ -2,7 +2,6 @@ import fp from 'fastify-plugin';
2
2
  import path from 'node:path';
3
3
 
4
4
  import { addHook, getTemplatePath, getTemplate, pgClients } from '@opengis/fastify-table/utils.js';
5
- // import { addHook, getTemplatePath, getTemplate, pgClients } from './utils.js'; // test!
6
5
 
7
6
  import config from './config.js';
8
7
  import getMenu from './server/routes/menu/controllers/getMenu.js';
@@ -154,6 +153,7 @@ async function plugin(fastify, opts = config) {
154
153
  // API
155
154
 
156
155
  fastify.register(import('./server/routes/properties/index.mjs'), opts);
156
+ fastify.register(import('./server/routes/calendar/index.mjs'), opts);
157
157
  fastify.register(import('./server/routes/notifications/index.mjs'), opts);
158
158
  fastify.register(import('./server/routes/templates/index.mjs'), opts);
159
159
  fastify.register(import('./server/routes/menu/index.mjs'), opts);
@@ -0,0 +1,89 @@
1
+ import { /* getSelectVal, */ getMeta, getTemplate } from '@opengis/fastify-table/utils.js';
2
+
3
+ export default async function calendarData({
4
+ pg, funcs, params = {}, query = {}, session = {},
5
+ }) {
6
+ const { name } = params;
7
+ const { uid } = session.passport?.user || {};
8
+ if (!name) {
9
+ return { message: 'not enough params: name', status: 400 };
10
+ }
11
+ const { date, sql } = query;
12
+
13
+ try {
14
+ const body = await getTemplate('calendar', name);
15
+
16
+ if (!body) {
17
+ return { message: `calendar not found: ${name}`, status: 404 };
18
+ }
19
+
20
+ const {
21
+ title,
22
+ table,
23
+ query: query1 = '1=1',
24
+ meta = {},
25
+ filter = [],
26
+ } = body;
27
+
28
+ if (!table) {
29
+ return { message: 'not enough calendar params: table', status: 404 };
30
+ }
31
+ if (!pg.pk?.[table]) {
32
+ return { message: `table pkey not found: ${table}`, status: 404 };
33
+ }
34
+
35
+ const filterWhere = filter?.length && query.filter?.length
36
+ ? filter.filter((el) => (Object.hasOwn(el, 'enabled') ? el?.enabled : true))
37
+ .map((el) => {
38
+ const val = query.filter.split(',').find((e) => e?.split('=')?.shift()?.includes(el.column || el.name))?.split('=')?.pop();
39
+ if (val) return el.column && val ? `(${[`${el.column}::text='${val.replace(/'/g,"''")}'::text`, el.query].filter((el) => el).join(' and ')})` : el.query;
40
+ }).filter((el) => el).join(' and ')
41
+ : undefined;
42
+ // console.log(filterWhere);
43
+
44
+ const queryWhere = await funcs.handlebars.compile(query1)({ uid });
45
+ const filterDate = date ? `date_trunc('month', "${meta?.date || meta?.start}"::date)='${date}'::date` : undefined;
46
+ const where = [queryWhere, filterDate, filterWhere].filter((el) => el).join(' and ');
47
+
48
+ const filtersByColumn = filter.filter((el) => (Object.hasOwn(el, 'enabled') ? el?.enabled : true) && el?.column);
49
+
50
+ const filters = [];
51
+ if (filtersByColumn?.length) {
52
+ await Promise.all(filtersByColumn.map(async (el) => {
53
+ const { rows: filterData = [] } = await pg.query(`select "${el.column}" as id, count(*) from ${table}
54
+ where ${el.query || '1=1'} and ${filterWhere || '1=1'} group by "${el.column}"`);
55
+ if (!filterData?.length) return;
56
+
57
+ // const clsData = await getSelectVal({ pg, name: el.cls, values: filterData.map((el) => el.id) });
58
+ const clsData = el.cls ? await getTemplate(['cls', 'select'], el.cls) : undefined;
59
+
60
+ if (!el.cls) {
61
+ filterData.forEach((el1) => filters.push(el1));
62
+ return;
63
+ }
64
+
65
+ filterData.forEach((el1) => {
66
+ const cls = clsData.find((item) => item.id === el1.id.toString());
67
+ Object.assign(el1, { title: cls?.text, color: cls?.color });
68
+ filters.push(el1);
69
+ });
70
+ }));
71
+ }
72
+
73
+ const tableMeta = await getMeta({ pg, table });
74
+ const columnList = tableMeta?.columns?.map((el) => el?.name);
75
+ const columns = Object.keys(meta).filter((el) => ['date', 'start','end','title','status'].includes(el) && columnList.includes(meta[el])).map((el) => `"${meta[el]}" as ${el}`);
76
+
77
+ if (!columns?.length) {
78
+ return { message: `calendar param meta is invalid: invalid/empty keys`, status: 404 };
79
+ }
80
+
81
+ const q = `select ${columns.join(',')} from ${table} where ${where}`;
82
+ if (sql) return q;
83
+
84
+ const { rows = [] } = await pg.query(q);
85
+ return { title, filters, rows };
86
+ } catch (err) {
87
+ return { error: err.toString(), status: 500 };
88
+ }
89
+ }
@@ -0,0 +1,17 @@
1
+ import calendarData from "./controllers/calendar.data.js";
2
+
3
+ const schema = {
4
+ query: {
5
+ type: 'object',
6
+ properties: {
7
+ date: {
8
+ type: 'string',
9
+ format: 'date',
10
+ },
11
+ },
12
+ },
13
+ };
14
+
15
+ export default async function route(fastify) {
16
+ fastify.get('/calendar/:name', { schema }, calendarData);
17
+ }
@@ -2,10 +2,6 @@ import {
2
2
  getMeta, getAccess, getTemplate, metaFormat, getSelectVal, gisIRColumn,
3
3
  } from "@opengis/fastify-table/utils.js";
4
4
 
5
- // import {
6
- // getMeta, getAccess, getTemplate, metaFormat, getSelectVal, gisIRColumn,
7
- // } from '../../../../utils.js'; // test!
8
-
9
5
  import getFilterSQL from "./funcs/getFilterSQL/index.js";
10
6
 
11
7
  import assignTokens from './utils/assignTokens.js';
@@ -3,6 +3,5 @@ const tableDataSchema = {
3
3
  limit: { type: 'integer' },
4
4
  }
5
5
  };
6
-
6
+ export { tableDataSchema }
7
7
  export default null;
8
- export { tableDataSchema }
@@ -1,7 +1,6 @@
1
1
 
2
2
  import { join } from 'path';
3
3
  import { userTemplateDir } from '@opengis/fastify-table/utils.js';
4
- // import { userTemplateDir } from '../../../../utils.js'; // test!
5
4
 
6
5
  import { existsSync, readdirSync, readFileSync } from 'fs';
7
6
  const menuCache = [];
package/utils.js CHANGED
@@ -1,50 +1,21 @@
1
+ import yamlSafe from 'js-yaml';
2
+
1
3
  import getSettings from './server/routes/properties/funcs/getSettings.js';
2
4
  import setSettings from './server/routes/properties/funcs/setSettings.js';
3
5
 
4
- import {
5
- addHook,
6
- getTemplatePath,
7
- pgClients,
8
- applyHook,
9
- userTemplateDir,
10
- addTemplateDir,
11
- getMeta,
12
- getAccess,
13
- getTemplate,
14
- metaFormat,
15
- getSelectVal,
16
- gisIRColumn,
17
- } from '@opengis/fastify-table/utils.js';
6
+ function loadSafe (yml) {
7
+ try {
8
+ return yamlSafe.load(yml);
9
+ } catch (err) {
10
+ return { error: err.toString() };
11
+ }
12
+ };
18
13
 
19
- // import {
20
- // addHook,
21
- // getTemplatePath,
22
- // pgClients,
23
- // applyHook,
24
- // userTemplateDir,
25
- // addTemplateDir,
26
- // getMeta,
27
- // getAccess,
28
- // getTemplate,
29
- // metaFormat,
30
- // getSelectVal,
31
- // gisIRColumn,
32
- // } from '../fastify-table/utils.js'; // test!
14
+ Object.assign(yamlSafe, { loadSafe });
33
15
 
34
16
  export default null;
35
17
  export {
36
- addHook,
37
- getTemplatePath,
38
- pgClients,
39
- applyHook,
18
+ yamlSafe,
40
19
  getSettings,
41
20
  setSettings,
42
- userTemplateDir,
43
- addTemplateDir,
44
- getMeta,
45
- getAccess,
46
- getTemplate,
47
- metaFormat,
48
- getSelectVal,
49
- gisIRColumn,
50
21
  };