@opengis/fastify-table 2.1.10 → 2.1.12

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.
@@ -30,7 +30,7 @@ export default function getFilterSQL({ table, filter, pg, search, searchColumn:
30
30
  q: string;
31
31
  optimizedSQL: string;
32
32
  sqlTable: any;
33
- extraSqlColumns: any;
33
+ extraSqlColumns: string | undefined;
34
34
  tableCount: string;
35
35
  table: any;
36
36
  searchQuery: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../server/plugins/table/funcs/getFilterSQL/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAsC5D,wBAA8B,YAAY,CAAC,EACzC,KAAK,EACL,MAAM,EACN,EAAqB,EACrB,MAAM,EACN,YAAY,EAAE,aAAa,EAC3B,UAAU,EACV,KAAK,EACL,MAAM,EACN,KAAK,EACL,GAAG,EACH,QAAQ,EACR,KAAK,GACN,EAAE;IACD,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,UAAU,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;;;;;;;;;;;;;;;;;;;;;;;;GAsPA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../server/plugins/table/funcs/getFilterSQL/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAuC5D,wBAA8B,YAAY,CAAC,EACzC,KAAK,EACL,MAAM,EACN,EAAqB,EACrB,MAAM,EACN,YAAY,EAAE,aAAa,EAC3B,UAAU,EACV,KAAK,EACL,MAAM,EACN,KAAK,EACL,GAAG,EACH,QAAQ,EACR,KAAK,GACN,EAAE;IACD,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,UAAU,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;;;;;;;;;;;;;;;;;;;;;;;;GAwRA"}
@@ -5,8 +5,10 @@ import config from "../../../../../config.js";
5
5
  // filter util
6
6
  import getTableSql from "./util/getTableSql.js";
7
7
  import getFilterQuery from "./util/getFilterQuery.js";
8
+ import { getTableColumnMeta } from "../../../../routes/table/controllers/suggest.js";
8
9
  import getOptimizedQuery from "./util/getOptimizedQuery.js";
9
10
  import getFilter from "../getFilter.js";
11
+ import getMeta from "../../../pg/funcs/getMeta.js";
10
12
  const checkInline = {};
11
13
  const defaultTable = "crm.extra_data";
12
14
  function getExtraQuery(mainColumns, schema, table, pk) {
@@ -105,11 +107,11 @@ export default async function getFilterSQL({ table, filter, pg = pgClients.clien
105
107
  })
106
108
  .join(" or ")} )`
107
109
  : "";
108
- const filterResponse = (await getFilter({
110
+ const filterResponse = await getFilter({
109
111
  pg,
110
112
  table,
111
113
  user: { uid },
112
- }, null));
114
+ }, null);
113
115
  const filterList1 = await Promise.all((filterList || [])
114
116
  .concat(filterResponse?.inline || [])
115
117
  .concat(filterResponse?.custom || [])
@@ -118,8 +120,7 @@ export default async function getFilterSQL({ table, filter, pg = pgClients.clien
118
120
  ?.filter((el) => el.id || el.name)
119
121
  ?.map(async (el) => {
120
122
  Object.assign(el, { name: el.name || el.id });
121
- if (el.name &&
122
- extraColumns.find((item) => item?.name === el?.name)) {
123
+ if (el.name && extraColumns.find((item) => item?.name === el?.name)) {
123
124
  Object.assign(el, {
124
125
  extra: {
125
126
  table: extraDataTable,
@@ -128,6 +129,38 @@ export default async function getFilterSQL({ table, filter, pg = pgClients.clien
128
129
  },
129
130
  });
130
131
  }
132
+ if (el.api?.split?.("/")?.[2] === "suggest" &&
133
+ el.api?.split?.("/")?.[3]?.split?.(":")?.length === 2 &&
134
+ !el.api.includes("?") // skip /suggest/table:column?sel=selectName
135
+ ) {
136
+ const [table, column] = el.api.split("/")[3].split(":");
137
+ const body = await getTemplate("table", table);
138
+ const columns = await getMeta({ pg, table }).then((el) => el?.columns || []);
139
+ const { arr, original } = columns?.find((el) => el.name === column)
140
+ ? (await getTableColumnMeta({
141
+ table: body?.table || table,
142
+ template: body ? table : undefined,
143
+ column: column?.split?.("?")?.shift?.(),
144
+ selectName: body?.columns?.find?.((el) => el.name === column)
145
+ ?.data ||
146
+ body?.meta?.cls?.[column] ||
147
+ column?.split?.("?")?.pop?.(),
148
+ pg,
149
+ })) || {}
150
+ : {};
151
+ const arr1 = arr ||
152
+ (original && pg?.queryCache
153
+ ? await pg
154
+ .queryCache(original, { table: body?.table || table })
155
+ .catch((err) => console.error("getFilterSQL error", err.toString()))
156
+ .then((el) => el?.rows || [])
157
+ : undefined);
158
+ Object.assign(el, {
159
+ optionsFromColumns: true,
160
+ options: arr1,
161
+ select: original,
162
+ });
163
+ }
131
164
  if (!el?.data)
132
165
  return el;
133
166
  // const cls = await getTemplate(['cls', 'select'], el.data); // only git cls
@@ -174,7 +207,7 @@ export default async function getFilterSQL({ table, filter, pg = pgClients.clien
174
207
  stateQuery,
175
208
  customQuery,
176
209
  ]
177
- .filter((el) => el)
210
+ .filter(Boolean)
178
211
  .join(" and ");
179
212
  // table
180
213
  const obj = {
@@ -1 +1 @@
1
- {"version":3,"file":"formatValue.d.ts","sourceRoot":"","sources":["../../../../../../../server/plugins/table/funcs/getFilterSQL/util/formatValue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAe/D,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,EAAE,EACF,KAAK,EACL,MAAW,EACX,IAAI,EACJ,KAAK,EACL,UAAU,EACV,GAAO,EACP,QAAQ,GACT,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB,OAmLA"}
1
+ {"version":3,"file":"formatValue.d.ts","sourceRoot":"","sources":["../../../../../../../server/plugins/table/funcs/getFilterSQL/util/formatValue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAe/D,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,EAAE,EACF,KAAK,EACL,MAAW,EACX,IAAI,EACJ,KAAK,EACL,UAAU,EACV,GAAO,EACP,QAAQ,GACT,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB,OAqMA"}
@@ -10,7 +10,7 @@ const selectFilterTypes = [
10
10
  "button",
11
11
  ];
12
12
  export default function formatValue({ pg, table, filter = {}, name, value, dataTypeID, uid = 1, optimize, }) {
13
- const { extra, sql, select, strict, options /* default: defaultValue, */ } = filter;
13
+ const { extra, sql, select, strict, options, optionsFromColumns /* default: defaultValue, */, } = filter;
14
14
  const pk = pg?.pk && table ? pg.pk[table] : undefined;
15
15
  const filterType = filter.type?.toLowerCase?.() || "text";
16
16
  if (filterType === "text" && value && filter?.columns) {
@@ -132,6 +132,17 @@ export default function formatValue({ pg, table, filter = {}, name, value, dataT
132
132
  const query = `${pk} in (select object_id from ${extra.table} where property_key='${name}' and value_text ${matchNull || `='${value}'`} )`;
133
133
  return { op: "=", query };
134
134
  }
135
+ // if pseudo-suggest column contain commas
136
+ if (optionsFromColumns && options?.length) {
137
+ const optionValues = options.map((e) => e.id);
138
+ const vals = optionValues.filter((e) => value.includes(e));
139
+ return {
140
+ op: "=",
141
+ query: `${name}::text=any('{${vals
142
+ .map((v) => `"${v}"`)
143
+ .join(",")}}'::text[])`,
144
+ };
145
+ }
135
146
  // nullable + default
136
147
  const query = `${name} ${match}`;
137
148
  return { op: "=", query };
@@ -1 +1 @@
1
- {"version":3,"file":"getFilterQuery.d.ts","sourceRoot":"","sources":["../../../../../../../server/plugins/table/funcs/getFilterSQL/util/getFilterQuery.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAK/D;;;;GAIG;AAEH,iBAAS,cAAc,CAAC,EACtB,EAAqB,EACrB,MAAM,EAAE,SAAc,EACtB,KAAU,EACV,QAAa,EACb,MAAM,EACN,UAAU,EACV,GAAG,EACH,QAAQ,GACT,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,GAAG,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,OAgGA;AAED,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"getFilterQuery.d.ts","sourceRoot":"","sources":["../../../../../../../server/plugins/table/funcs/getFilterSQL/util/getFilterQuery.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAK/D;;;;GAIG;AAEH,iBAAS,cAAc,CAAC,EACtB,EAAqB,EACrB,MAAM,EAAE,SAAc,EACtB,KAAU,EACV,QAAa,EACb,MAAM,EACN,UAAU,EACV,GAAG,EACH,QAAQ,GACT,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,GAAG,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,OA8FA;AAED,eAAe,cAAc,CAAC"}
@@ -25,9 +25,7 @@ function getFilterQuery({ pg = pgClients.client, filter: filterStr = "", table =
25
25
  ?.map?.((el) => `${el.name}=${el.default}`) || []
26
26
  : [];
27
27
  // concat default + request filters
28
- const arr = filterQueryArray
29
- .concat(filterDefaultQueryArray)
30
- .filter((el) => el);
28
+ const arr = filterQueryArray.concat(filterDefaultQueryArray).filter(Boolean);
31
29
  const resultList = [];
32
30
  for (let i = 0; i < arr.length; i += 1) {
33
31
  const item = arr[i];
@@ -1,2 +1,18 @@
1
+ import { ExtendedPG } from "../../../types/core.js";
2
+ export declare function getTableColumnMeta({ table, template, column, selectName, filtered, startsWith, key, pg, }: {
3
+ table: string;
4
+ template?: string;
5
+ column: any;
6
+ selectName?: string;
7
+ filtered?: any;
8
+ startsWith?: boolean;
9
+ key?: string;
10
+ pg?: ExtendedPG;
11
+ }): Promise<{
12
+ arr: any;
13
+ original: string;
14
+ searchQuery: string;
15
+ pk: string;
16
+ } | null>;
1
17
  export default function suggest(req: any, reply: any): Promise<any>;
2
18
  //# sourceMappingURL=suggest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/controllers/suggest.ts"],"names":[],"mappings":"AA0HA,wBAA8B,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,gBA6WzD"}
1
+ {"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/controllers/suggest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAuBpD,wBAAsB,kBAAkB,CAAC,EACvC,KAAK,EACL,QAAQ,EACR,MAAM,EACN,UAAU,EACV,QAAQ,EACR,UAAU,EACV,GAAG,EACH,EAAqB,GACtB,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,GAAG,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,UAAU,CAAC;CACjB;;;;;UA+EA;AAED,wBAA8B,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,gBA6WzD"}
@@ -2,7 +2,7 @@ import path from "node:path";
2
2
  import { existsSync, readFileSync } from "node:fs";
3
3
  import { config, getPGAsync, getTemplate, getSelectMeta, getMeta, applyHook, getSelectVal, logger, getSelect, metaFormat, getColumnCLS, pgClients, getFilter, } from "../../../../utils.js";
4
4
  const defaultLimit = 50;
5
- async function getTableColumnMeta({ table, template, column, selectName, filtered, startsWith, key, pg = pgClients.client, }) {
5
+ export async function getTableColumnMeta({ table, template, column, selectName, filtered, startsWith, key, pg = pgClients.client, }) {
6
6
  if (!table || !column) {
7
7
  return null;
8
8
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengis/fastify-table",
3
- "version": "2.1.10",
3
+ "version": "2.1.12",
4
4
  "type": "module",
5
5
  "description": "core-plugins",
6
6
  "keywords": [