@opengis/gis 0.2.119 → 0.2.120
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 +148 -148
- package/dist/{CardIcon-ODZgA2Pb.js → CardIcon-Dx_myDwM.js} +1 -1
- package/dist/{EntityCreatePage-Da8XgBKU.js → EntityCreatePage-Ch8NU_Yw.js} +14 -14
- package/dist/{EntityEditPage-QktKEAxz.js → EntityEditPage-CRRcW7FL.js} +27 -27
- package/dist/{EntityTablePage-UMttc2-F.js → EntityTablePage-DY9v1aWL.js} +32 -31
- package/dist/{ExtentOutlineLayer.vue_vue_type_script_setup_true_lang-DLAIOHJh.js → ExtentOutlineLayer.vue_vue_type_script_setup_true_lang-DgQHLSak.js} +1 -1
- package/dist/{HeaderActions.vue_vue_type_script_setup_true_lang-CTKkmXWD.js → HeaderActions.vue_vue_type_script_setup_true_lang-BQ32ioLC.js} +30 -30
- package/dist/{MapSettings-CbW0TfZl.js → MapSettings-CaGPr5uG.js} +33 -33
- package/dist/{RastersTablePage-CXqscX0i.js → RastersTablePage-CJyO2DoI.js} +41 -39
- package/dist/{cartocss-306ZE1Ha.js → cartocss-Bhat1m61.js} +296 -294
- package/dist/{import-utils-CHIDSKHz.js → import-utils-BxeYqcn7.js} +33 -33
- package/dist/index-Ba6SE4TN.js +10203 -0
- package/dist/index.css +1 -1
- package/dist/index.js +1 -1
- package/dist/index.umd.cjs +31 -31
- package/dist/{raster-Cn6l0xfZ.js → raster-Cbs1xR5Y.js} +120 -121
- package/dist/{register-4wblFcw2.js → register-D0AsH83v.js} +8 -8
- package/dist/{service-2uWyAfnR.js → service-C4nt_DBO.js} +10 -10
- package/dist/{vs-datatable-D_Xzh4qf.js → vs-datatable-QG5b0CCL.js} +28 -28
- package/module/cls.json +6 -6
- package/module/gis/card/gis.metadata.table/index.yml +22 -22
- package/module/gis/card/gis.metadata.table/main_info.hbs +20 -20
- package/module/gis/card/gis.metadata.table/metadata_info.hbs +27 -27
- package/module/gis/card/gis.metadata.table/other.hbs +25 -25
- package/module/gis/card/gis.rasters.table/index.yml +11 -11
- package/module/gis/card/gis.rasters.table/main_info.hbs +27 -27
- package/module/gis/card/gis.registers.table/cls.hbs +36 -36
- package/module/gis/card/gis.registers.table/columns.hbs +89 -89
- package/module/gis/card/gis.registers.table/filters.hbs +80 -80
- package/module/gis/card/gis.registers.table/index.yml +23 -23
- package/module/gis/card/gis.registers.table/main_info.hbs +35 -35
- package/module/gis/card/gis.registers.table/source.hbs +45 -45
- package/module/gis/card/gis.services.table/attributes.hbs +91 -91
- package/module/gis/card/gis.services.table/filters.hbs +83 -83
- package/module/gis/card/gis.services.table/index.yml +25 -25
- package/module/gis/card/gis.services.table/main_info.hbs +27 -27
- package/module/gis/card/gis.services.table/source.hbs +25 -25
- package/module/gis/cls/bool.yes_no.json +12 -12
- package/module/gis/cls/encoding.json +14 -14
- package/module/gis/cls/geom_type.json +14 -14
- package/module/gis/cls/gis.column_type.json +34 -34
- package/module/gis/cls/gis.column_view_type.json +26 -26
- package/module/gis/cls/gis.filter_type.json +22 -22
- package/module/gis/cls/language.json +10 -10
- package/module/gis/cls/meta.service_type.json +42 -42
- package/module/gis/cls/ogc.service.json +21 -21
- package/module/gis/cls/service_type.json +42 -42
- package/module/gis/cls/source_type.json +10 -10
- package/module/gis/cls/standarts.json +6 -6
- package/module/gis/cls/topic_category.json +106 -106
- package/module/gis/cls/update_frequency.json +29 -29
- package/module/gis/cls/view.json +21 -21
- package/module/gis/form/feedback.answer.form.json +10 -10
- package/module/gis/form/gis.cartocss.form.json +54 -54
- package/module/gis/form/gis.group_list.form.json +17 -17
- package/module/gis/form/gis.maps.form.json +61 -61
- package/module/gis/form/gis.metadata.form.json +240 -240
- package/module/gis/form/gis.metadata_new.form.json +195 -195
- package/module/gis/form/gis.ogc_service.form.json +51 -51
- package/module/gis/form/gis.rasters.form.json +76 -76
- package/module/gis/form/gis.registers.form.json +124 -124
- package/module/gis/form/gis.registers_column.form.json +84 -84
- package/module/gis/form/gis.registers_filter.form.json +65 -65
- package/module/gis/form/gis.services.form.json +111 -111
- package/module/gis/form/gis.services_attributes.form.json +75 -75
- package/module/gis/form/gis.services_filter.form.json +65 -65
- package/module/gis/menu.json +43 -43
- package/module/gis/select/admin.cls.name.sql +2 -2
- package/module/gis/select/layer_list.sql +7 -7
- package/module/gis/select/layer_list_text.sql +7 -7
- package/module/gis/select/pg.column_name.geometry.sql +12 -12
- package/module/gis/select/pg.columns.parent.sql +6 -6
- package/module/gis/select/pg.table_name.sql +17 -17
- package/module/gis/select/service_id.sql +1 -1
- package/module/gis/table/gis.cartocss.table.json +74 -74
- package/module/gis/table/gis.group_list.table.json +58 -58
- package/module/gis/table/gis.maps.table.json +110 -110
- package/module/gis/table/gis.metadata.table.json +70 -70
- package/module/gis/table/gis.metadata_new.table.json +137 -137
- package/module/gis/table/gis.ogc_service.table.json +100 -100
- package/module/gis/table/gis.rasters.table.json +101 -101
- package/module/gis/table/gis.registers.table.json +143 -143
- package/module/gis/table/gis.services.table.json +120 -120
- package/module/gis/table/site.gis.registers.table.json +88 -88
- package/module/gis/table/site.gis.services.table.json +106 -106
- package/module/gis/templates/ISO19136_2017_gml_template.xml +330 -330
- package/module/gis/tokens.yml +5 -5
- package/module/permissions/form/permissions.users.form.json +151 -151
- package/module/permissions/table/gis.permissions.table.json +97 -97
- package/module/test/cls/bp_build_type.json +37 -37
- package/module/test/cls/ts.temp_status.json +18 -18
- package/module/test/cls/ts.temp_structure.ts_class.json +49 -49
- package/module/test/cls/ts.temp_type.json +9 -9
- package/module/test/layer/bp.json +59 -59
- package/module/test/layer/bp1.yml +33 -33
- package/module/test/layer/individual.yml +53 -53
- package/module/test/layer/ts.linking_passport.yml +55 -55
- package/module/test/layer/ts.temp_structure.yml +50 -50
- package/module/test/map/addr.yml +21 -21
- package/module/test/map/bp_myo.json +43 -43
- package/module/test/map/bpf.json +43 -43
- package/module/test/map/main.json +37 -37
- package/module/test/map/mbd.json +92 -92
- package/module/test/map/ts.json +53 -53
- package/module/test/select/address_id.json +2 -2
- package/module/test/select/address_id.sql +7 -7
- package/module/test/table/data_address.street.table.json +69 -69
- package/module/test/table/data_bp_myo.bp.table.json +122 -122
- package/package.json +75 -75
- package/plugin.js +55 -55
- package/server/migrations/array_intersect.sql +13 -13
- package/server/migrations/cartocss.sql +27 -27
- package/server/migrations/group_list.sql +74 -74
- package/server/migrations/maps.sql +30 -30
- package/server/migrations/metadata.sql +415 -415
- package/server/migrations/ogc.sql +106 -106
- package/server/migrations/rasters.sql +265 -265
- package/server/migrations/services.sql +247 -247
- package/server/migrations/services_users_rel.sql +22 -22
- package/server/migrations/widgets.sql +20 -20
- package/server/plugins/crons.js +21 -21
- package/server/plugins/mapnik/funcs/checkRasterFile.js +109 -109
- package/server/plugins/mapnik/funcs/mapnik.js +146 -146
- package/server/plugins/mapnik/funcs/rootFolder.mjs +8 -8
- package/server/plugins/mapnik/map.proto +234 -234
- package/server/plugins/vite.js +74 -74
- package/server/routes/gis/cartocss/add.cartocss.js +42 -42
- package/server/routes/gis/cartocss/get.cartocss.js +50 -50
- package/server/routes/gis/checkXML.js +118 -118
- package/server/routes/gis/dashboard.js +29 -29
- package/server/routes/gis/index.mjs +87 -87
- package/server/routes/gis/metadata/editMetadata.js +34 -34
- package/server/routes/gis/metadata/metadataXML.js +13 -13
- package/server/routes/gis/ogc/map.info.point.js +124 -124
- package/server/routes/gis/registers/add.registry.js +35 -35
- package/server/routes/gis/registers/del.registry.js +14 -14
- package/server/routes/gis/registers/funcs/classifiers.js +100 -100
- package/server/routes/gis/registers/funcs/columns.js +4 -4
- package/server/routes/gis/registers/funcs/content.type.js +9 -9
- package/server/routes/gis/registers/funcs/get.info.js +89 -89
- package/server/routes/gis/registers/funcs/handleRegistryRequest.js +146 -146
- package/server/routes/gis/registers/gis.export.js +153 -153
- package/server/routes/gis/registers/gis.registry.js +64 -64
- package/server/routes/gis/registers/gis.registry.list.js +59 -59
- package/server/routes/gis/registers/insert.columns.js +107 -107
- package/server/routes/gis/registers/insert.filters.js +110 -110
- package/server/routes/gis/registers/map.registry.js +79 -79
- package/server/routes/gis/services/add.service.js +64 -64
- package/server/routes/gis/services/del.service.js +12 -12
- package/server/routes/gis/services/get.layer.geom.js +27 -27
- package/server/routes/gis/services/get.services.col.js +33 -33
- package/server/routes/gis/services/get.services.js +84 -84
- package/server/routes/gis/services/legend.auto.js +77 -77
- package/server/routes/map/controllers/clearTiles.js +34 -34
- package/server/routes/map/controllers/geojson.js +187 -187
- package/server/routes/map/controllers/jsonData.js +205 -205
- package/server/routes/map/controllers/layerList.js +102 -102
- package/server/routes/map/controllers/map.js +123 -123
- package/server/routes/map/controllers/mapCatalog.js +72 -72
- package/server/routes/map/controllers/mapCatalogAttribute.js +55 -55
- package/server/routes/map/controllers/mapFeatures.js +128 -128
- package/server/routes/map/controllers/mapFormat.js +222 -222
- package/server/routes/map/controllers/mapTiles.js +152 -152
- package/server/routes/map/controllers/maps.js +15 -15
- package/server/routes/map/controllers/marker_icon.js +43 -43
- package/server/routes/map/controllers/vtile.js +172 -172
- package/server/routes/map/index.mjs +169 -169
- package/server/routes/map/maps/add.map.js +43 -43
- package/server/routes/map/maps/del.map.js +18 -18
- package/server/routes/map/maps/get.map.js +112 -112
- package/server/routes/map/vtile1.js +179 -179
- package/server/routes/map/widgets/add.widget.js +38 -38
- package/server/routes/map/widgets/del.widget.js +22 -22
- package/server/routes/map/widgets/get.widget.js +40 -40
- package/server/routes/mapnik/controllers/clearTiles.js +106 -106
- package/server/routes/mapnik/controllers/createXml.js +67 -67
- package/server/routes/mapnik/controllers/createXmlMulti.js +76 -76
- package/server/routes/mapnik/controllers/fileSearch.js +38 -38
- package/server/routes/mapnik/controllers/fileStat.js +28 -28
- package/server/routes/mapnik/controllers/mapnikLogger.js +29 -29
- package/server/routes/mapnik/controllers/mapnikStat.js +20 -20
- package/server/routes/mapnik/controllers/rasterInfo.js +54 -54
- package/server/routes/mapnik/controllers/readDir.js +22 -22
- package/server/routes/mapnik/controllers/rtile.js +150 -150
- package/server/routes/mapnik/controllers/uploadRaster.js +157 -157
- package/server/routes/mapnik/functions/cartoBounds.js +28 -28
- package/server/routes/mapnik/functions/uploadXML.js +110 -110
- package/server/routes/mapnik/index.js +27 -27
- package/server/routes/permissions/controllers/catalog.permissions.edit.js +22 -22
- package/server/routes/permissions/controllers/catalog.permissions.js +7 -7
- package/server/routes/permissions/controllers/gis.catalog.js +80 -80
- package/server/routes/permissions/controllers/utils/get.permissions.js +59 -59
- package/server/routes/permissions/index.mjs +18 -18
- package/server/routes/root.mjs +3 -3
- package/utils.js +13 -13
- package/dist/FileEdit-GikPLv1T.js +0 -37
- package/dist/index-CbdZv1jy.js +0 -10123
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export function extractVisibleColumns(columns, mode = "table") {
|
|
2
|
-
return columns.filter((col) =>
|
|
3
|
-
mode === "card" ? col.hidden_card !== true : col.hidden_register !== true
|
|
4
|
-
);
|
|
1
|
+
export function extractVisibleColumns(columns, mode = "table") {
|
|
2
|
+
return columns.filter((col) =>
|
|
3
|
+
mode === "card" ? col.hidden_card !== true : col.hidden_register !== true
|
|
4
|
+
);
|
|
5
5
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
const ContentType = {
|
|
2
|
-
xml: 'application/xml',
|
|
3
|
-
shp: 'application/zip',
|
|
4
|
-
csv: 'text/csv',
|
|
5
|
-
geojson: 'application/vnd.geo+json',
|
|
6
|
-
json: 'application/json',
|
|
7
|
-
xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
|
8
|
-
};
|
|
9
|
-
|
|
1
|
+
const ContentType = {
|
|
2
|
+
xml: 'application/xml',
|
|
3
|
+
shp: 'application/zip',
|
|
4
|
+
csv: 'text/csv',
|
|
5
|
+
geojson: 'application/vnd.geo+json',
|
|
6
|
+
json: 'application/json',
|
|
7
|
+
xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
|
8
|
+
};
|
|
9
|
+
|
|
10
10
|
export default ContentType;
|
|
@@ -1,89 +1,89 @@
|
|
|
1
|
-
import { pgClients } from '@opengis/fastify-table/utils.js';
|
|
2
|
-
import { attachClassifiers } from '../../../gis/registers/funcs/classifiers.js';
|
|
3
|
-
const pg = pgClients.client;
|
|
4
|
-
|
|
5
|
-
export default async function getInfo({ finalInfo, format }, reply) {
|
|
6
|
-
if (!finalInfo) return { error: 'No data found' };
|
|
7
|
-
|
|
8
|
-
const table = finalInfo?.table_name;
|
|
9
|
-
const queryCondition = finalInfo?.query || '1=1';
|
|
10
|
-
const columns = finalInfo?.columns || finalInfo?.attributes || '[]';
|
|
11
|
-
const exportable = columns.filter(c => c.is_export);
|
|
12
|
-
const selectNames = exportable.map(c => `"${c.name}"`);
|
|
13
|
-
const selectSQL = `
|
|
14
|
-
SELECT ${selectNames?.length ? selectNames.join(', ') : ''} ${format === 'geojson' || format === 'shp' ? `${selectNames?.length ? ',' : ''} ST_AsGeoJSON(geom)::json as geom` : ``}
|
|
15
|
-
FROM ${table}
|
|
16
|
-
WHERE ${queryCondition} ${format === 'geojson' || format === 'shp' ? `and geom is not null` : ``}
|
|
17
|
-
`;
|
|
18
|
-
|
|
19
|
-
if (format === 'shp') {
|
|
20
|
-
const { rows: geomTypeRows } = await pg.query(`
|
|
21
|
-
SELECT DISTINCT ST_GeometryType(geom) AS geom_type
|
|
22
|
-
FROM ${table}
|
|
23
|
-
WHERE geom IS NOT NULL
|
|
24
|
-
`);
|
|
25
|
-
const geometryTypes = geomTypeRows.map(row => row.geom_type);
|
|
26
|
-
|
|
27
|
-
const sqlList = geometryTypes.map(type => {
|
|
28
|
-
return {
|
|
29
|
-
type,
|
|
30
|
-
query: `
|
|
31
|
-
SELECT ${selectNames.join(', ')} ${selectNames?.length ? ',' : ''} ST_AsGeoJSON(geom)::json as geom
|
|
32
|
-
FROM ${table}
|
|
33
|
-
WHERE ${queryCondition} AND ST_GeometryType(geom) = '${type}' AND geom IS NOT NULL
|
|
34
|
-
`,
|
|
35
|
-
};
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
const { rows: [{ srid }] } = await pg.query(`
|
|
39
|
-
SELECT ST_SRID(geom) AS srid
|
|
40
|
-
FROM ${table}
|
|
41
|
-
WHERE geom IS NOT NULL
|
|
42
|
-
LIMIT 1;
|
|
43
|
-
`);
|
|
44
|
-
|
|
45
|
-
return {
|
|
46
|
-
columns: exportable,
|
|
47
|
-
table,
|
|
48
|
-
srid: srid || 4326,
|
|
49
|
-
geomTypes: geometryTypes,
|
|
50
|
-
sqlList
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
const { rows } = await pg.query(selectSQL);
|
|
55
|
-
if (!rows?.length) {
|
|
56
|
-
return reply.status(404).send({ message: 'Немає даних, які можна експортувати', status: 404 });
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
const classifiers = exportable
|
|
60
|
-
.filter(col => col.data && ["select", "badge", "tags"].includes(col.format))
|
|
61
|
-
.map(col => ({ name: col.name, classifier: col.data }));
|
|
62
|
-
|
|
63
|
-
const rowsWithClassifiers = await attachClassifiers(rows, classifiers);
|
|
64
|
-
|
|
65
|
-
const simplifiedRows = rowsWithClassifiers.map(row => {
|
|
66
|
-
const newRow = { ...row };
|
|
67
|
-
|
|
68
|
-
for (const key of Object.keys(newRow)) {
|
|
69
|
-
if (key.endsWith('_data') && typeof newRow[key]?.text === 'string') {
|
|
70
|
-
const baseKey = key.replace(/_data$/, '');
|
|
71
|
-
newRow[baseKey] = newRow[key].text;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
if (key.endsWith('_text') && typeof newRow[key] === 'string') {
|
|
75
|
-
const baseKey = key.replace(/_text$/, '');
|
|
76
|
-
newRow[baseKey] = newRow[key];
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
return newRow;
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
return {
|
|
84
|
-
rows: simplifiedRows,
|
|
85
|
-
data: rows,
|
|
86
|
-
columns: exportable,
|
|
87
|
-
table
|
|
88
|
-
};
|
|
89
|
-
}
|
|
1
|
+
import { pgClients } from '@opengis/fastify-table/utils.js';
|
|
2
|
+
import { attachClassifiers } from '../../../gis/registers/funcs/classifiers.js';
|
|
3
|
+
const pg = pgClients.client;
|
|
4
|
+
|
|
5
|
+
export default async function getInfo({ finalInfo, format }, reply) {
|
|
6
|
+
if (!finalInfo) return { error: 'No data found' };
|
|
7
|
+
|
|
8
|
+
const table = finalInfo?.table_name;
|
|
9
|
+
const queryCondition = finalInfo?.query || '1=1';
|
|
10
|
+
const columns = finalInfo?.columns || finalInfo?.attributes || '[]';
|
|
11
|
+
const exportable = columns.filter(c => c.is_export);
|
|
12
|
+
const selectNames = exportable.map(c => `"${c.name}"`);
|
|
13
|
+
const selectSQL = `
|
|
14
|
+
SELECT ${selectNames?.length ? selectNames.join(', ') : ''} ${format === 'geojson' || format === 'shp' ? `${selectNames?.length ? ',' : ''} ST_AsGeoJSON(geom)::json as geom` : ``}
|
|
15
|
+
FROM ${table}
|
|
16
|
+
WHERE ${queryCondition} ${format === 'geojson' || format === 'shp' ? `and geom is not null` : ``}
|
|
17
|
+
`;
|
|
18
|
+
|
|
19
|
+
if (format === 'shp') {
|
|
20
|
+
const { rows: geomTypeRows } = await pg.query(`
|
|
21
|
+
SELECT DISTINCT ST_GeometryType(geom) AS geom_type
|
|
22
|
+
FROM ${table}
|
|
23
|
+
WHERE geom IS NOT NULL
|
|
24
|
+
`);
|
|
25
|
+
const geometryTypes = geomTypeRows.map(row => row.geom_type);
|
|
26
|
+
|
|
27
|
+
const sqlList = geometryTypes.map(type => {
|
|
28
|
+
return {
|
|
29
|
+
type,
|
|
30
|
+
query: `
|
|
31
|
+
SELECT ${selectNames.join(', ')} ${selectNames?.length ? ',' : ''} ST_AsGeoJSON(geom)::json as geom
|
|
32
|
+
FROM ${table}
|
|
33
|
+
WHERE ${queryCondition} AND ST_GeometryType(geom) = '${type}' AND geom IS NOT NULL
|
|
34
|
+
`,
|
|
35
|
+
};
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
const { rows: [{ srid }] } = await pg.query(`
|
|
39
|
+
SELECT ST_SRID(geom) AS srid
|
|
40
|
+
FROM ${table}
|
|
41
|
+
WHERE geom IS NOT NULL
|
|
42
|
+
LIMIT 1;
|
|
43
|
+
`);
|
|
44
|
+
|
|
45
|
+
return {
|
|
46
|
+
columns: exportable,
|
|
47
|
+
table,
|
|
48
|
+
srid: srid || 4326,
|
|
49
|
+
geomTypes: geometryTypes,
|
|
50
|
+
sqlList
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const { rows } = await pg.query(selectSQL);
|
|
55
|
+
if (!rows?.length) {
|
|
56
|
+
return reply.status(404).send({ message: 'Немає даних, які можна експортувати', status: 404 });
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const classifiers = exportable
|
|
60
|
+
.filter(col => col.data && ["select", "badge", "tags"].includes(col.format))
|
|
61
|
+
.map(col => ({ name: col.name, classifier: col.data }));
|
|
62
|
+
|
|
63
|
+
const rowsWithClassifiers = await attachClassifiers(rows, classifiers);
|
|
64
|
+
|
|
65
|
+
const simplifiedRows = rowsWithClassifiers.map(row => {
|
|
66
|
+
const newRow = { ...row };
|
|
67
|
+
|
|
68
|
+
for (const key of Object.keys(newRow)) {
|
|
69
|
+
if (key.endsWith('_data') && typeof newRow[key]?.text === 'string') {
|
|
70
|
+
const baseKey = key.replace(/_data$/, '');
|
|
71
|
+
newRow[baseKey] = newRow[key].text;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (key.endsWith('_text') && typeof newRow[key] === 'string') {
|
|
75
|
+
const baseKey = key.replace(/_text$/, '');
|
|
76
|
+
newRow[baseKey] = newRow[key];
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return newRow;
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
return {
|
|
84
|
+
rows: simplifiedRows,
|
|
85
|
+
data: rows,
|
|
86
|
+
columns: exportable,
|
|
87
|
+
table
|
|
88
|
+
};
|
|
89
|
+
}
|
|
@@ -1,146 +1,146 @@
|
|
|
1
|
-
import { getMeta, getFilterSQL, metaFormat } from "@opengis/fastify-table/utils.js";
|
|
2
|
-
import { populateFilterOptions } from './classifiers.js';
|
|
3
|
-
import { extractVisibleColumns } from './columns.js';
|
|
4
|
-
|
|
5
|
-
const columnType = {
|
|
6
|
-
text: 'text',
|
|
7
|
-
date: 'date',
|
|
8
|
-
bool: 'yes/no',
|
|
9
|
-
numeric: 'number',
|
|
10
|
-
integer: 'number',
|
|
11
|
-
'timestamp without time zone': 'date',
|
|
12
|
-
'timestamp with time zone': 'date',
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
// eslint-disable-next-line import/prefer-default-export
|
|
16
|
-
export async function handleRegistryRequest({
|
|
17
|
-
settings, query, object_id, offset = 0, limit = 16, page = 1, pg, sql,
|
|
18
|
-
}) {
|
|
19
|
-
const {
|
|
20
|
-
name, table_name, description, card, columns, filters, query: whereQuery, pk,
|
|
21
|
-
register_id, view, order, is_downloadable, register_key, is_map, is_register, service_id, is_files,
|
|
22
|
-
} = settings;
|
|
23
|
-
const parsedColumns = Array.isArray(columns) ? columns : JSON.parse(columns);
|
|
24
|
-
const parsedCardColumns = Array.isArray(card) ? card : JSON.parse(card);
|
|
25
|
-
const filtersParsed = Array.isArray(filters) ? filters : JSON.parse(filters);
|
|
26
|
-
const activeFilters = (filtersParsed || []).filter((f) => f.disabled !== true).map(el => ({
|
|
27
|
-
...el, id: el.name || el.id, type: el.type, api: `/api/suggest/${table_name}:${el.name}${el.data ? `?sel=${el.data}` : ''}`,
|
|
28
|
-
}));
|
|
29
|
-
const { columns: fields1, geom } = await getMeta({ pg, table: table_name });
|
|
30
|
-
|
|
31
|
-
const fields = fields1?.map?.(({ name, dataTypeID, title }) => ({ name, type: columnType[pg.pgType?.[dataTypeID] || 'text'] || 'text', label: title || name }));
|
|
32
|
-
|
|
33
|
-
const mode = object_id ? "card" : "table";
|
|
34
|
-
const visibleColumns = (mode === 'card' && parsedCardColumns?.length) ? parsedCardColumns : extractVisibleColumns(parsedColumns, mode);
|
|
35
|
-
const selectColumns = visibleColumns.map((col) => col.name);
|
|
36
|
-
/* const columnsInfo = visibleColumns.map((col) => ({
|
|
37
|
-
name: col.name,
|
|
38
|
-
ua: col.ua,
|
|
39
|
-
format: col.format,
|
|
40
|
-
data: col.data,
|
|
41
|
-
view_type: col.view_type
|
|
42
|
-
})); */
|
|
43
|
-
|
|
44
|
-
const classifiers = visibleColumns
|
|
45
|
-
.filter((col) => col.data && ["select", "badge", "tags"].includes(col.format))
|
|
46
|
-
.reduce((acc, curr) => ({ ...acc, [curr.name]: curr.data }), {});
|
|
47
|
-
|
|
48
|
-
if (object_id) {
|
|
49
|
-
const sql = `
|
|
50
|
-
SELECT "${pk}" as id,* ${selectColumns.length ? `, ${selectColumns.join(", ")}` : ''} ${geom ? `, st_asgeojson(${geom})::json as geom` : ''}
|
|
51
|
-
FROM ${table_name}
|
|
52
|
-
WHERE ${pk} = $1
|
|
53
|
-
`;
|
|
54
|
-
const rows = await pg.query(sql, [object_id]).then(el => el.rows || []);
|
|
55
|
-
if (!rows.length) throw new Error('Object not found');
|
|
56
|
-
|
|
57
|
-
await metaFormat({
|
|
58
|
-
rows, table: table_name, cls: classifiers, sufix: true,
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
return {
|
|
62
|
-
row: rows[0],
|
|
63
|
-
card,
|
|
64
|
-
d: 1,
|
|
65
|
-
columns: visibleColumns,
|
|
66
|
-
is_downloadable,
|
|
67
|
-
register_key,
|
|
68
|
-
register_id,
|
|
69
|
-
service_id,
|
|
70
|
-
name,
|
|
71
|
-
is_files,
|
|
72
|
-
is_map,
|
|
73
|
-
is_register,
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
const { search, filter } = query || {};
|
|
78
|
-
const { q: sqlFilter } = (filter || search)
|
|
79
|
-
? await getFilterSQL({
|
|
80
|
-
table: table_name,
|
|
81
|
-
search,
|
|
82
|
-
filter,
|
|
83
|
-
filterList: activeFilters,
|
|
84
|
-
})
|
|
85
|
-
: { q: '1=1' };
|
|
86
|
-
|
|
87
|
-
const whereConditions = [whereQuery, sqlFilter].filter(Boolean).join(' AND ');
|
|
88
|
-
|
|
89
|
-
const sqlBase = `FROM ${table_name} WHERE ${whereConditions || 'true'}`;
|
|
90
|
-
const sqlOrder = order ? `ORDER BY ${order}` : "";
|
|
91
|
-
const sqlLimit = `LIMIT $1 OFFSET $2`;
|
|
92
|
-
|
|
93
|
-
const sqlSelect = `SELECT "${pk}" as id ${selectColumns.length ? `, ${selectColumns.join(", ")}` : ''} ${geom ? `, st_asgeojson(${geom})::json as geom` : ''} ${sqlBase}`;
|
|
94
|
-
const dataQuery = `${sqlSelect} ${sqlOrder} ${sqlLimit}`;
|
|
95
|
-
|
|
96
|
-
if (sql) return dataQuery;
|
|
97
|
-
|
|
98
|
-
const rows = await pg.query(dataQuery, [limit, offset]).then(el => el.rows || []);
|
|
99
|
-
const total = await pg.query(`SELECT COUNT(*) ${sqlBase}`).then(el => +(el.rows[0]?.count || 0));
|
|
100
|
-
|
|
101
|
-
await metaFormat({
|
|
102
|
-
rows, table: table_name, cls: classifiers, sufix: true,
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
const listConfig = {};
|
|
106
|
-
|
|
107
|
-
if (parsedColumns?.length) {
|
|
108
|
-
for (const col of parsedColumns) {
|
|
109
|
-
if (col.view_type === 'title') listConfig.title = col.name;
|
|
110
|
-
if (col.view_type === 'subtitle') listConfig.subtitle = col.name;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
await populateFilterOptions({
|
|
115
|
-
pg,
|
|
116
|
-
table: table_name,
|
|
117
|
-
filters: activeFilters,
|
|
118
|
-
columns,
|
|
119
|
-
whereConditions,
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
return {
|
|
123
|
-
register_id,
|
|
124
|
-
name,
|
|
125
|
-
card,
|
|
126
|
-
table_name,
|
|
127
|
-
register_key,
|
|
128
|
-
description,
|
|
129
|
-
rows,
|
|
130
|
-
total,
|
|
131
|
-
service_id,
|
|
132
|
-
columns: visibleColumns,
|
|
133
|
-
filters: activeFilters,
|
|
134
|
-
fields,
|
|
135
|
-
limit,
|
|
136
|
-
page,
|
|
137
|
-
view,
|
|
138
|
-
is_downloadable,
|
|
139
|
-
is_map,
|
|
140
|
-
is_register,
|
|
141
|
-
is_files,
|
|
142
|
-
config: {
|
|
143
|
-
listConfig,
|
|
144
|
-
},
|
|
145
|
-
};
|
|
146
|
-
}
|
|
1
|
+
import { getMeta, getFilterSQL, metaFormat } from "@opengis/fastify-table/utils.js";
|
|
2
|
+
import { populateFilterOptions } from './classifiers.js';
|
|
3
|
+
import { extractVisibleColumns } from './columns.js';
|
|
4
|
+
|
|
5
|
+
const columnType = {
|
|
6
|
+
text: 'text',
|
|
7
|
+
date: 'date',
|
|
8
|
+
bool: 'yes/no',
|
|
9
|
+
numeric: 'number',
|
|
10
|
+
integer: 'number',
|
|
11
|
+
'timestamp without time zone': 'date',
|
|
12
|
+
'timestamp with time zone': 'date',
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
// eslint-disable-next-line import/prefer-default-export
|
|
16
|
+
export async function handleRegistryRequest({
|
|
17
|
+
settings, query, object_id, offset = 0, limit = 16, page = 1, pg, sql,
|
|
18
|
+
}) {
|
|
19
|
+
const {
|
|
20
|
+
name, table_name, description, card, columns, filters, query: whereQuery, pk,
|
|
21
|
+
register_id, view, order, is_downloadable, register_key, is_map, is_register, service_id, is_files,
|
|
22
|
+
} = settings;
|
|
23
|
+
const parsedColumns = Array.isArray(columns) ? columns : JSON.parse(columns);
|
|
24
|
+
const parsedCardColumns = Array.isArray(card) ? card : JSON.parse(card);
|
|
25
|
+
const filtersParsed = Array.isArray(filters) ? filters : JSON.parse(filters);
|
|
26
|
+
const activeFilters = (filtersParsed || []).filter((f) => f.disabled !== true).map(el => ({
|
|
27
|
+
...el, id: el.name || el.id, type: el.type, api: `/api/suggest/${table_name}:${el.name}${el.data ? `?sel=${el.data}` : ''}`,
|
|
28
|
+
}));
|
|
29
|
+
const { columns: fields1, geom } = await getMeta({ pg, table: table_name });
|
|
30
|
+
|
|
31
|
+
const fields = fields1?.map?.(({ name, dataTypeID, title }) => ({ name, type: columnType[pg.pgType?.[dataTypeID] || 'text'] || 'text', label: title || name }));
|
|
32
|
+
|
|
33
|
+
const mode = object_id ? "card" : "table";
|
|
34
|
+
const visibleColumns = (mode === 'card' && parsedCardColumns?.length) ? parsedCardColumns : extractVisibleColumns(parsedColumns, mode);
|
|
35
|
+
const selectColumns = visibleColumns.map((col) => col.name);
|
|
36
|
+
/* const columnsInfo = visibleColumns.map((col) => ({
|
|
37
|
+
name: col.name,
|
|
38
|
+
ua: col.ua,
|
|
39
|
+
format: col.format,
|
|
40
|
+
data: col.data,
|
|
41
|
+
view_type: col.view_type
|
|
42
|
+
})); */
|
|
43
|
+
|
|
44
|
+
const classifiers = visibleColumns
|
|
45
|
+
.filter((col) => col.data && ["select", "badge", "tags"].includes(col.format))
|
|
46
|
+
.reduce((acc, curr) => ({ ...acc, [curr.name]: curr.data }), {});
|
|
47
|
+
|
|
48
|
+
if (object_id) {
|
|
49
|
+
const sql = `
|
|
50
|
+
SELECT "${pk}" as id,* ${selectColumns.length ? `, ${selectColumns.join(", ")}` : ''} ${geom ? `, st_asgeojson(${geom})::json as geom` : ''}
|
|
51
|
+
FROM ${table_name}
|
|
52
|
+
WHERE ${pk} = $1
|
|
53
|
+
`;
|
|
54
|
+
const rows = await pg.query(sql, [object_id]).then(el => el.rows || []);
|
|
55
|
+
if (!rows.length) throw new Error('Object not found');
|
|
56
|
+
|
|
57
|
+
await metaFormat({
|
|
58
|
+
rows, table: table_name, cls: classifiers, sufix: true,
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
return {
|
|
62
|
+
row: rows[0],
|
|
63
|
+
card,
|
|
64
|
+
d: 1,
|
|
65
|
+
columns: visibleColumns,
|
|
66
|
+
is_downloadable,
|
|
67
|
+
register_key,
|
|
68
|
+
register_id,
|
|
69
|
+
service_id,
|
|
70
|
+
name,
|
|
71
|
+
is_files,
|
|
72
|
+
is_map,
|
|
73
|
+
is_register,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const { search, filter } = query || {};
|
|
78
|
+
const { q: sqlFilter } = (filter || search)
|
|
79
|
+
? await getFilterSQL({
|
|
80
|
+
table: table_name,
|
|
81
|
+
search,
|
|
82
|
+
filter,
|
|
83
|
+
filterList: activeFilters,
|
|
84
|
+
})
|
|
85
|
+
: { q: '1=1' };
|
|
86
|
+
|
|
87
|
+
const whereConditions = [whereQuery, sqlFilter].filter(Boolean).join(' AND ');
|
|
88
|
+
|
|
89
|
+
const sqlBase = `FROM ${table_name} WHERE ${whereConditions || 'true'}`;
|
|
90
|
+
const sqlOrder = order ? `ORDER BY ${order}` : "";
|
|
91
|
+
const sqlLimit = `LIMIT $1 OFFSET $2`;
|
|
92
|
+
|
|
93
|
+
const sqlSelect = `SELECT "${pk}" as id ${selectColumns.length ? `, ${selectColumns.join(", ")}` : ''} ${geom ? `, st_asgeojson(${geom})::json as geom` : ''} ${sqlBase}`;
|
|
94
|
+
const dataQuery = `${sqlSelect} ${sqlOrder} ${sqlLimit}`;
|
|
95
|
+
|
|
96
|
+
if (sql) return dataQuery;
|
|
97
|
+
|
|
98
|
+
const rows = await pg.query(dataQuery, [limit, offset]).then(el => el.rows || []);
|
|
99
|
+
const total = await pg.query(`SELECT COUNT(*) ${sqlBase}`).then(el => +(el.rows[0]?.count || 0));
|
|
100
|
+
|
|
101
|
+
await metaFormat({
|
|
102
|
+
rows, table: table_name, cls: classifiers, sufix: true,
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
const listConfig = {};
|
|
106
|
+
|
|
107
|
+
if (parsedColumns?.length) {
|
|
108
|
+
for (const col of parsedColumns) {
|
|
109
|
+
if (col.view_type === 'title') listConfig.title = col.name;
|
|
110
|
+
if (col.view_type === 'subtitle') listConfig.subtitle = col.name;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
await populateFilterOptions({
|
|
115
|
+
pg,
|
|
116
|
+
table: table_name,
|
|
117
|
+
filters: activeFilters,
|
|
118
|
+
columns,
|
|
119
|
+
whereConditions,
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
return {
|
|
123
|
+
register_id,
|
|
124
|
+
name,
|
|
125
|
+
card,
|
|
126
|
+
table_name,
|
|
127
|
+
register_key,
|
|
128
|
+
description,
|
|
129
|
+
rows,
|
|
130
|
+
total,
|
|
131
|
+
service_id,
|
|
132
|
+
columns: visibleColumns,
|
|
133
|
+
filters: activeFilters,
|
|
134
|
+
fields,
|
|
135
|
+
limit,
|
|
136
|
+
page,
|
|
137
|
+
view,
|
|
138
|
+
is_downloadable,
|
|
139
|
+
is_map,
|
|
140
|
+
is_register,
|
|
141
|
+
is_files,
|
|
142
|
+
config: {
|
|
143
|
+
listConfig,
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
}
|