@opengis/gis 0.2.176 → 0.2.178

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.
Files changed (164) hide show
  1. package/README.md +181 -181
  2. package/dist/{CardIcon-c1Q2M3wQ.js → CardIcon-CMRD1LLh.js} +1 -1
  3. package/dist/{EntityTablePage-B5gpkH4S.js → EntityTablePage-XNNCltAN.js} +2 -2
  4. package/dist/{ExtentOutlineLayer.vue_vue_type_script_setup_true_lang-DnGSvmMU.js → ExtentOutlineLayer.vue_vue_type_script_setup_true_lang-BqUjKTDY.js} +1 -1
  5. package/dist/{HeaderActions.vue_vue_type_script_setup_true_lang-C2B61JP6.js → HeaderActions.vue_vue_type_script_setup_true_lang-BXQ3hKwa.js} +1 -1
  6. package/dist/{MapSettings-6-Xru5Q8.js → MapSettings-P3h-vHn3.js} +2 -2
  7. package/dist/{RastersTablePage-CXNOcTy-.js → RastersTablePage-DnhGZLiH.js} +2 -2
  8. package/dist/{cartocss-BFVqWvfP.js → cartocss-BkrOeQg4.js} +6 -6
  9. package/dist/{import-utils-uxk4LdUJ.js → import-utils-BCATsbB5.js} +1 -1
  10. package/dist/{index-CahlV-Xs.js → index-cUagVqgA.js} +39 -39
  11. package/dist/index.css +1 -1
  12. package/dist/index.js +1 -1
  13. package/dist/index.umd.cjs +5 -5
  14. package/dist/{raster-CEi56f0P.js → raster-CP0tUp3j.js} +3 -3
  15. package/dist/{register-NFAGBNa3.js → register-Cr-uQcby.js} +3 -3
  16. package/dist/{service-BYspag8U.js → service-DwJaKrOd.js} +6 -6
  17. package/dist/{vs-datatable-CHcBr6zy.js → vs-datatable-B9WoVk-b.js} +2 -2
  18. package/module/gis/cls/service_type.json +42 -42
  19. package/module/gis/form/gis.registers.form.json +127 -127
  20. package/module/test/map/addr.json +302 -302
  21. package/module/test/map/addr1.yml +23 -23
  22. package/module/test/select/address.str_id.sql +3 -3
  23. package/package.json +77 -77
  24. package/plugin.js +64 -64
  25. package/server/migrations/array_intersect.sql +13 -13
  26. package/server/migrations/cartocss.sql +27 -27
  27. package/server/migrations/group_list.sql +74 -74
  28. package/server/migrations/maps.sql +30 -30
  29. package/server/migrations/metadata.sql +415 -415
  30. package/server/migrations/ogc.sql +106 -106
  31. package/server/migrations/rasters.sql +265 -265
  32. package/server/migrations/services.sql +247 -247
  33. package/server/migrations/services_users_rel.sql +22 -22
  34. package/server/migrations/widgets.sql +20 -20
  35. package/server/plugins/crons.js +21 -21
  36. package/server/plugins/mapnik/funcs/checkRasterFile.js +107 -107
  37. package/server/plugins/mapnik/funcs/mapnik.js +151 -151
  38. package/server/plugins/mapnik/funcs/rootFolder.mjs +8 -8
  39. package/server/plugins/mapnik/map.proto +437 -437
  40. package/server/plugins/vite.js +74 -74
  41. package/server/routes/cartocss/cartocss.route.js +31 -31
  42. package/server/routes/cartocss/cartocss.route.test.js +78 -78
  43. package/server/routes/cartocss/cartocss.schema.js +73 -73
  44. package/server/routes/cartocss/functions/add.cartocss.js +39 -39
  45. package/server/routes/cartocss/functions/get.cartocss.js +57 -57
  46. package/server/routes/gis/functions/checkXML.js +107 -107
  47. package/server/routes/gis/functions/dashboard.js +24 -24
  48. package/server/routes/gis/gis.route.js +26 -26
  49. package/server/routes/gis/gis.route.test.js +33 -33
  50. package/server/routes/map/functions/clearTiles.js +35 -35
  51. package/server/routes/map/functions/geojson.js +187 -187
  52. package/server/routes/map/functions/gis.convert.js +65 -65
  53. package/server/routes/map/functions/gis.icon.js +220 -220
  54. package/server/routes/map/functions/jsonData.js +206 -206
  55. package/server/routes/map/functions/layerList.js +102 -102
  56. package/server/routes/map/functions/map.js +122 -122
  57. package/server/routes/map/functions/mapCatalog.js +72 -72
  58. package/server/routes/map/functions/mapCatalogAttribute.js +53 -53
  59. package/server/routes/map/functions/mapFeatures.js +133 -133
  60. package/server/routes/map/functions/mapFormat.js +232 -232
  61. package/server/routes/map/functions/mapTiles.js +162 -162
  62. package/server/routes/map/functions/maps.js +15 -15
  63. package/server/routes/map/functions/marker_icon.js +43 -43
  64. package/server/routes/map/functions/parseGeoFile.js +85 -85
  65. package/server/routes/map/functions/pointHeight.js +51 -51
  66. package/server/routes/map/functions/vtile.js +174 -174
  67. package/server/routes/map/functions/vtile1.js +185 -185
  68. package/server/routes/map/map.route.js +280 -280
  69. package/server/routes/map/map.route.test.js +503 -503
  70. package/server/routes/map/map.schema.js +356 -356
  71. package/server/routes/map/pin/circle1.svg +76 -76
  72. package/server/routes/map/pin/circle2.svg +18 -18
  73. package/server/routes/map/pin/none.svg +12 -12
  74. package/server/routes/map/pin/pin.svg +14 -14
  75. package/server/routes/map/pin/pin1.svg +16 -16
  76. package/server/routes/map/pin/pin2.svg +7 -7
  77. package/server/routes/map/pin/pin3.svg +34 -34
  78. package/server/routes/map/pin/pin4.svg +14 -14
  79. package/server/routes/map/pin/pin5.svg +7 -7
  80. package/server/routes/map/pin/pin6.svg +12 -12
  81. package/server/routes/map/pin/pin7.svg +12 -12
  82. package/server/routes/mapnik/functions/cartoBounds.js +32 -32
  83. package/server/routes/mapnik/functions/clearTiles.js +103 -103
  84. package/server/routes/mapnik/functions/convertBoundToTile.js +27 -27
  85. package/server/routes/mapnik/functions/createXml.js +76 -76
  86. package/server/routes/mapnik/functions/createXmlMulti.js +72 -72
  87. package/server/routes/mapnik/functions/fileSearch.js +35 -35
  88. package/server/routes/mapnik/functions/fileStat.js +28 -28
  89. package/server/routes/mapnik/functions/pretile.js +138 -138
  90. package/server/routes/mapnik/functions/rasterInfo.js +66 -66
  91. package/server/routes/mapnik/functions/readDir.js +22 -22
  92. package/server/routes/mapnik/functions/rtile.js +164 -164
  93. package/server/routes/mapnik/functions/uploadRaster.js +152 -152
  94. package/server/routes/mapnik/functions/uploadXML.js +140 -140
  95. package/server/routes/mapnik/mapnik.route.js +102 -102
  96. package/server/routes/mapnik/mapnik.route.test.js +370 -370
  97. package/server/routes/mapnik/mapnik.schema.mjs +195 -195
  98. package/server/routes/mapnik.prefixless/functions/mapnikLogger.js +31 -31
  99. package/server/routes/mapnik.prefixless/functions/mapnikStat.js +21 -21
  100. package/server/routes/mapnik.prefixless/mapnik.prefixless.route.js +20 -20
  101. package/server/routes/mapnik.prefixless/mapnik.prefixless.route.test.js +91 -91
  102. package/server/routes/mapnik.prefixless/mapnik.prefixless.schema.mjs +27 -27
  103. package/server/routes/maps/functions/add.map.js +42 -42
  104. package/server/routes/maps/functions/del.map.js +17 -17
  105. package/server/routes/maps/functions/get.map.js +119 -119
  106. package/server/routes/maps/maps.route.js +58 -58
  107. package/server/routes/maps/maps.route.test.js +231 -231
  108. package/server/routes/maps/maps.schema.js +9 -9
  109. package/server/routes/metadata/functions/editMetadata.js +35 -35
  110. package/server/routes/metadata/functions/metadataXML.js +19 -19
  111. package/server/routes/metadata/metadata.route.js +26 -26
  112. package/server/routes/metadata/metadata.route.test.js +46 -46
  113. package/server/routes/metadata/metadata.schema.js +53 -53
  114. package/server/routes/ogc/functions/map.info.point.js +117 -117
  115. package/server/routes/ogc/ogc.route.js +21 -21
  116. package/server/routes/ogc/ogc.route.test.js +53 -53
  117. package/server/routes/ogc/ogc.schema.js +16 -16
  118. package/server/routes/permissions/functions/catalog.permissions.edit.js +20 -20
  119. package/server/routes/permissions/functions/catalog.permissions.js +12 -12
  120. package/server/routes/permissions/functions/get.permissions.js +59 -59
  121. package/server/routes/permissions/functions/gis.catalog.js +80 -80
  122. package/server/routes/permissions/permissions.route.js +35 -35
  123. package/server/routes/permissions/permissions.route.test.js +35 -35
  124. package/server/routes/permissions/permissions.schema.js +43 -43
  125. package/server/routes/registers/functions/add.registry.js +37 -37
  126. package/server/routes/registers/functions/classifiers.js +100 -100
  127. package/server/routes/registers/functions/columns.js +3 -3
  128. package/server/routes/registers/functions/content.type.js +9 -9
  129. package/server/routes/registers/functions/del.registry.js +14 -14
  130. package/server/routes/registers/functions/get.info.js +93 -93
  131. package/server/routes/registers/functions/getFilterSQLParametrized/formatValue.js +312 -0
  132. package/server/routes/registers/functions/getFilterSQLParametrized/getFilterQuery.js +126 -0
  133. package/server/routes/registers/functions/getFilterSQLParametrized/getRangeQuery.js +353 -0
  134. package/server/routes/registers/functions/getFilterSQLParametrized/index.js +81 -0
  135. package/server/routes/registers/functions/getTableColumnMeta.js +125 -0
  136. package/server/routes/registers/functions/gis.export.js +159 -159
  137. package/server/routes/registers/functions/gis.registry.js +71 -71
  138. package/server/routes/registers/functions/gis.registry.list.js +61 -61
  139. package/server/routes/registers/functions/gis.suggest.js +275 -0
  140. package/server/routes/registers/functions/handleRegistryRequest.js +175 -147
  141. package/server/routes/registers/functions/map.registry.js +87 -87
  142. package/server/routes/registers/registers.route.js +91 -80
  143. package/server/routes/registers/registers.route.test.js +173 -144
  144. package/server/routes/registers/registers.schema.js +275 -246
  145. package/server/routes/root.mjs +3 -3
  146. package/server/routes/services/functions/add.service.js +62 -62
  147. package/server/routes/services/functions/create.route.js +93 -93
  148. package/server/routes/services/functions/del.service.js +12 -12
  149. package/server/routes/services/functions/get.layer.geom.js +27 -27
  150. package/server/routes/services/functions/get.service.users.js +76 -76
  151. package/server/routes/services/functions/get.services.col.js +34 -34
  152. package/server/routes/services/functions/get.services.js +89 -89
  153. package/server/routes/services/functions/legend.auto.js +77 -77
  154. package/server/routes/services/services.route.js +76 -76
  155. package/server/routes/services/services.route.test.js +167 -167
  156. package/server/routes/services/services.schema.js +285 -278
  157. package/server/routes/widgets/functions/add.widget.js +38 -38
  158. package/server/routes/widgets/functions/del.widget.js +17 -17
  159. package/server/routes/widgets/functions/get.widget.js +41 -41
  160. package/server/routes/widgets/widgets.route.js +61 -61
  161. package/server/routes/widgets/widgets.route.test.js +144 -144
  162. package/server/routes/widgets/widgets.schema.js +24 -24
  163. package/server/shared/listFiles.js +14 -14
  164. package/utils.js +13 -13
@@ -0,0 +1,312 @@
1
+ import { pgClients } from "@opengis/fastify-table/utils.js";
2
+
3
+ import getRangeQuery from "./getRangeQuery.js";
4
+
5
+ const selectFilterTypes = [
6
+ "check",
7
+ "autocomplete",
8
+ "tags",
9
+ "avatar",
10
+ "radio",
11
+ "select",
12
+ "button",
13
+ ];
14
+ const matchNullObj = {
15
+ null: "is null",
16
+ notnull: "is not null",
17
+ };
18
+
19
+ export default function formatValue(
20
+ {
21
+ table,
22
+ filter = {},
23
+ name,
24
+ value,
25
+ dataTypeID,
26
+ uid = "2",
27
+ args: argsParams,
28
+ },
29
+ pg = pgClients.client
30
+ ) {
31
+ const { sql, select, strict, options, optionsFromColumns, api } = filter;
32
+
33
+ const filterType = filter.type?.toLowerCase?.() || "text";
34
+
35
+ const args = Array.from(argsParams || []);
36
+
37
+ const sval =
38
+ typeof value === "string"
39
+ ? `%${decodeURIComponent(value.replace(/%/g, "%25")).replace(
40
+ /%/g,
41
+ "\\%"
42
+ )}%`
43
+ : undefined;
44
+
45
+ if (filterType === "text" && typeof value === "string" && filter?.columns) {
46
+ args.push(sval);
47
+ const columns = filter.columns.split(",");
48
+
49
+ const query = `(${columns
50
+ .map((el) => `"${el}"::text ilike $${args.length}`)
51
+ .join(" or ")})`;
52
+ return { op: "~", query, values: [sval] };
53
+ }
54
+
55
+ const fieldType =
56
+ pg?.pgType?.[dataTypeID] ||
57
+ pg?.pgType?.[{ date: 1114 }[filterType] || 25];
58
+
59
+ if (
60
+ !name ||
61
+ !value ||
62
+ (!dataTypeID && !sql && !options) ||
63
+ (!selectFilterTypes.includes(filterType) &&
64
+ options?.find?.((el) => el?.sql))
65
+ ) {
66
+ return {};
67
+ }
68
+
69
+ // my rows
70
+ if (value === "me" && uid) {
71
+ args.push(uid);
72
+ return { op: "=", query: `${name}::text = $${args.length}`, values: [uid] };
73
+ }
74
+
75
+ const matchNull = matchNullObj[value];
76
+
77
+ const includesNull =
78
+ !matchNull &&
79
+ value &&
80
+ value.includes(",") &&
81
+ (value.startsWith("null") ||
82
+ value.includes(",null") ||
83
+ value.startsWith("notnull") ||
84
+ value.includes(",notnull"));
85
+
86
+ const includesNull1 = includesNull
87
+ ? value
88
+ .split(",")
89
+ .map((el) => matchNullObj[el])
90
+ .filter(Boolean)
91
+ : undefined;
92
+
93
+ // skip if requested both: is null and not null
94
+ const includesNullQuery =
95
+ includesNull1 && includesNull1.length > 1 ? undefined : includesNull1?.[0];
96
+
97
+ // geometry
98
+ if (["geometry"].includes(fieldType || "")) {
99
+ if (matchNull) {
100
+ return { op: "nullable", query: `${name} ${matchNull}` };
101
+ }
102
+
103
+ const bbox = value?.[0]?.split?.("_");
104
+
105
+ if (bbox?.length !== 4) {
106
+ return {};
107
+ }
108
+
109
+ const query = ` ${name} && 'box(${bbox[0]} ${bbox[1]},${bbox[2]} ${bbox[3]})'::box2d `;
110
+ return { op: "&&", query };
111
+ }
112
+
113
+ const op = filterType === "text" && !strict ? "~" : "=";
114
+ // text
115
+ if (["text"].includes(filterType)) {
116
+ // with sql subquery
117
+ if (typeof sql === "string") {
118
+ args.push(value);
119
+ const querysql = sql
120
+ .replace(/= ?any\(\$1\)/g, `::text=any($${args.length}::text[])`)
121
+ .replace(/\$1/g, `$${args.length}`);
122
+ return { op: "=", query: querysql, values: [[value]] };
123
+ }
124
+
125
+ // default
126
+ if (!select) {
127
+ const value1 = op === "~" ? `%${value}%` : value;
128
+ args.push(value1);
129
+ const query = `${name}::text ${op === "~" ? "ilike" : "="} $${args.length
130
+ }`;
131
+ return {
132
+ op,
133
+ query,
134
+ values: [value1],
135
+ };
136
+ }
137
+ }
138
+
139
+ // nullable
140
+ if (matchNull) {
141
+ const query = `${name} ${matchNull}`;
142
+ return { op, query };
143
+ }
144
+
145
+ // boolean
146
+ if (fieldType === "boolean" && ["true", "false"].includes(value)) {
147
+ const query = `${name} IS ${value === "true" ? "TRUE" : "FALSE"}`;
148
+ return { op, query };
149
+ }
150
+
151
+ // boolean + nullable
152
+ const value1 = ["true", "false"].find((el) => value.includes(el));
153
+ const values = ["true", "false"].filter((el) => value.includes(el));
154
+
155
+ // boolean: true, false and null => skip
156
+ if (fieldType === "boolean" && values.length === 2 && !!includesNullQuery) {
157
+ return { op, query: "3=3" };
158
+ }
159
+
160
+ // boolean: both true and false => not null
161
+ if (fieldType === "boolean" && values.length === 2) {
162
+ return { op, query: `${name} is not null` };
163
+ }
164
+
165
+ // boolean: not null over any value
166
+ if (
167
+ fieldType === "boolean" &&
168
+ value1 &&
169
+ includesNullQuery === "is not null"
170
+ ) {
171
+ const query = `${name} ${includesNullQuery}`;
172
+ return { op, query };
173
+ }
174
+
175
+ // boolean: true or null
176
+ if (
177
+ fieldType === "boolean" &&
178
+ value1 &&
179
+ includesNullQuery === "is null" &&
180
+ value1 === "true"
181
+ ) {
182
+ return { op, query: `${name} IS NOT FALSE` };
183
+ }
184
+
185
+ // boolean: false or null
186
+ if (
187
+ fieldType === "boolean" &&
188
+ value1 &&
189
+ includesNullQuery === "is null" &&
190
+ value1 === "false"
191
+ ) {
192
+ return { op, query: `${name} IS NOT TRUE` };
193
+ }
194
+
195
+ // select / cls - any filter type w/ out sql subquery
196
+ if (
197
+ value &&
198
+ select &&
199
+ Array.isArray(options) &&
200
+ !options.find((el) => el?.sql)
201
+ ) {
202
+ const value1 = value.split(",");
203
+ // by id (checkbox)
204
+ if (options.find((el) => el?.id && value1.includes(el.id))) {
205
+ args.push(value1);
206
+ if (fieldType && fieldType.endsWith("[]")) {
207
+ const query = `EXISTS ( SELECT 1 FROM unnest(${name}) AS elem WHERE elem in (with q(id, name) as (${select}) select id from q where id = any($${args.length}) ) )`;
208
+ return {
209
+ op,
210
+ query,
211
+ values: [value1],
212
+ };
213
+ }
214
+
215
+ const query = `${name}::text in ( ( with q(id,name) as (${select}) select id from q where id = any($${args.length}) ) )`;
216
+ return {
217
+ op,
218
+ query,
219
+ values: [value1],
220
+ };
221
+ }
222
+ // by text
223
+ args.push(`%${value1[0]}%`);
224
+ return {
225
+ op,
226
+ query: `${name}::text in ( ( with q(id,name) as (${select}) select id from q where name::text ilike $${args.length} ) )`,
227
+ values: [`%${value1[0]}%`],
228
+ };
229
+ }
230
+
231
+ // date: 01.01.2024-31.12.2024 / number range: 100-500
232
+ if (["date", "datepicker", "range"].includes(filterType)) {
233
+ const { query, values } = getRangeQuery({
234
+ value,
235
+ name,
236
+ fieldType,
237
+ filterType,
238
+ sql,
239
+ args,
240
+ });
241
+ return { op: "between", query, values };
242
+ }
243
+
244
+ /* select query - from admin.cls / filter options */
245
+ if (selectFilterTypes.includes(filterType)) {
246
+ // multiple checks with predefined query
247
+ if (options?.find?.((el) => el?.sql)) {
248
+ const query =
249
+ options
250
+ .filter((el) => value.split(",").includes(el.id?.toString?.()))
251
+ .map((el) => el.sql || "false")
252
+ .join(" and ") || "false";
253
+ return { op: "=", query };
254
+ }
255
+
256
+ // with sql subquery
257
+ if (sql) {
258
+ args.push(value);
259
+ const querysql = sql
260
+ .replace(/= ?any\(\$1\)/g, `::text=any($${args.length}::text[])`)
261
+ .replace(/\$1/g, `$${args.length}`);
262
+ return { op: "=", query: querysql, values: [[value]] };
263
+ }
264
+
265
+ // if pseudo-suggest column contain commas
266
+ if (optionsFromColumns && options?.length) {
267
+ const optionValues = options.map((e) => e.id);
268
+ const vals = optionValues.filter((e) => value.includes(e));
269
+ args.push(vals);
270
+ return {
271
+ op: "=",
272
+ query: `${name}::text=any($${args.length}::text[])`,
273
+ values: vals,
274
+ };
275
+ }
276
+
277
+ // default
278
+ args.push(value);
279
+
280
+ if (fieldType?.includes("[]")) {
281
+ const query = `${name}::text[] && $${args.length}::text[]`;
282
+
283
+ return {
284
+ op: "=",
285
+ query,
286
+ values: [value.split(",")],
287
+ };
288
+ }
289
+
290
+ if (api && api.startsWith('/api/gis-suggest/')) {
291
+ const query = fieldType?.includes("[]") ? `EXISTS (
292
+ SELECT 1
293
+ FROM unnest(${name}) AS value
294
+ WHERE rtrim(
295
+ replace(replace(replace(encode(value::bytea, 'base64'), '+', ''), '-', ''), '/', ''),
296
+ '='
297
+ ) = ANY($${args.length})
298
+ )`
299
+ : `rtrim( replace( replace( replace( encode(${name}::bytea, 'base64'), '+', '' ), '-', '' ), '/', '' ), '=' )=any($${args.length})`;
300
+
301
+ return {
302
+ op: "=",
303
+ query,
304
+ values: [value.split(",")],
305
+ };
306
+ }
307
+
308
+ const query = `${name}::text=any($${args.length})`;
309
+ return { op: "=", query, values: [value.split(",")] };
310
+ }
311
+ return {};
312
+ }
@@ -0,0 +1,126 @@
1
+ /* eslint-disable no-continue */
2
+
3
+ import { pgClients } from "@opengis/fastify-table/utils.js";
4
+
5
+ import formatValue from "./formatValue.js";
6
+
7
+ /**
8
+ * @param {Number} opt.json - (1|0) 1 - Результат - Object, 0 - String
9
+ * @param {String} opt.query - запит до таблиці
10
+ * @param {String} opt.hash - інформація з хешу по запиту
11
+ */
12
+
13
+ function getFilterQuery(
14
+ {
15
+ filter: filterStr = "",
16
+ table = "",
17
+ tableSQL = [],
18
+ fields,
19
+ filterList,
20
+ uid,
21
+ objectId,
22
+ args,
23
+ },
24
+ pg = pgClients.client
25
+ ) {
26
+ // if (!filterStr) return null; // filter list API
27
+ const mainOperators = ["=", "~", ">", "<"];
28
+ const filterQueryArray =
29
+ decodeURIComponent(
30
+ filterStr
31
+ ?.replace?.(/%/g, "%25")
32
+ ?.replace?.(/%/g, "\\%")
33
+ ?.replace?.(/(^,)|(,$)/g, "")
34
+ )
35
+ ?.replace?.(/'/g, "''")
36
+ ?.split?.(/[;|]/) || [];
37
+ // default filter value form checkboxes, autocomplete or sql-defined only - if not called from card
38
+ const filterDefaultQueryArray = !objectId
39
+ ? filterList
40
+ ?.filter?.(
41
+ (el) =>
42
+ el.name &&
43
+ !filterStr?.includes?.(`${el.name}=`) &&
44
+ el.default &&
45
+ (el.options || el.sql)
46
+ )
47
+ ?.map?.((el) => `${el.name}=${el.default}`) || []
48
+ : [];
49
+
50
+ // concat default + request filters
51
+ const arr = filterQueryArray.concat(filterDefaultQueryArray).filter(Boolean);
52
+
53
+ const resultList = [];
54
+
55
+ for (let i = 0; i < arr.length; i += 1) {
56
+ const item = arr[i];
57
+ if (!item) {
58
+ continue;
59
+ }
60
+ const splitby = mainOperators?.find((el) => item.indexOf(el) !== -1) || "=";
61
+ const [name] = item.split(splitby);
62
+
63
+ // skip already added filter
64
+ if (resultList.find((el) => el.name === name)) {
65
+ continue;
66
+ }
67
+
68
+ // filter
69
+ const filter = filterList?.find?.((el) => el.type && el.name === name) || {
70
+ type: "text",
71
+ };
72
+
73
+ // find all value
74
+ const value = arr
75
+ .filter((el) => el.split(splitby)?.[0] === name)
76
+ .map((el) => el.substring((name?.length || 0) + 1))
77
+ .join(",");
78
+
79
+ // find field and skip not exists
80
+ const { dataTypeID } =
81
+ fields?.find((el) => el.name === name) ||
82
+ {};
83
+
84
+ // format query
85
+ const {
86
+ op,
87
+ query,
88
+ values: filterValues,
89
+ } = formatValue(
90
+ {
91
+ table,
92
+ filter,
93
+ name,
94
+ value,
95
+ dataTypeID,
96
+ uid,
97
+ args,
98
+ },
99
+ pg
100
+ ) || {};
101
+
102
+ if (!query) {
103
+ continue;
104
+ }
105
+
106
+ if (
107
+ args &&
108
+ filterValues &&
109
+ Array.isArray(filterValues) &&
110
+ filterValues.length
111
+ ) {
112
+ filterValues.forEach((val) => args.push(val));
113
+ }
114
+
115
+ resultList.push({
116
+ name,
117
+ value,
118
+ values: filterValues,
119
+ query,
120
+ operator: op,
121
+ });
122
+ }
123
+ return resultList;
124
+ }
125
+
126
+ export default getFilterQuery;