@saltcorn/data 0.7.2-beta.0 → 0.7.2-beta.2
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/app-locales/en.json +6 -0
- package/dist/app-locales/public/da.json +3 -0
- package/dist/app-locales/public/tlh.json +3 -0
- package/dist/base-plugin/actions.d.ts.map +1 -1
- package/dist/base-plugin/actions.js +4 -1
- package/dist/base-plugin/actions.js.map +1 -1
- package/dist/base-plugin/fieldviews.d.ts +24 -0
- package/dist/base-plugin/fieldviews.d.ts.map +1 -1
- package/dist/base-plugin/fieldviews.js +57 -5
- package/dist/base-plugin/fieldviews.js.map +1 -1
- package/dist/base-plugin/index.d.ts +292 -75
- package/dist/base-plugin/index.d.ts.map +1 -1
- package/dist/base-plugin/types.d.ts +114 -73
- package/dist/base-plugin/types.d.ts.map +1 -1
- package/dist/base-plugin/types.js +141 -37
- package/dist/base-plugin/types.js.map +1 -1
- package/dist/base-plugin/viewtemplates/edit.d.ts +47 -3
- package/dist/base-plugin/viewtemplates/edit.d.ts.map +1 -1
- package/dist/base-plugin/viewtemplates/edit.js +204 -85
- package/dist/base-plugin/viewtemplates/edit.js.map +1 -1
- package/dist/base-plugin/viewtemplates/feed.d.ts +14 -1
- package/dist/base-plugin/viewtemplates/feed.d.ts.map +1 -1
- package/dist/base-plugin/viewtemplates/feed.js +20 -8
- package/dist/base-plugin/viewtemplates/feed.js.map +1 -1
- package/dist/base-plugin/viewtemplates/filter.d.ts +17 -1
- package/dist/base-plugin/viewtemplates/filter.d.ts.map +1 -1
- package/dist/base-plugin/viewtemplates/filter.js +64 -45
- package/dist/base-plugin/viewtemplates/filter.js.map +1 -1
- package/dist/base-plugin/viewtemplates/list.d.ts +20 -1
- package/dist/base-plugin/viewtemplates/list.d.ts.map +1 -1
- package/dist/base-plugin/viewtemplates/list.js +59 -40
- package/dist/base-plugin/viewtemplates/list.js.map +1 -1
- package/dist/base-plugin/viewtemplates/listshowlist.d.ts +14 -1
- package/dist/base-plugin/viewtemplates/listshowlist.d.ts.map +1 -1
- package/dist/base-plugin/viewtemplates/listshowlist.js +15 -4
- package/dist/base-plugin/viewtemplates/listshowlist.js.map +1 -1
- package/dist/base-plugin/viewtemplates/room.d.ts +41 -1
- package/dist/base-plugin/viewtemplates/room.d.ts.map +1 -1
- package/dist/base-plugin/viewtemplates/room.js +107 -80
- package/dist/base-plugin/viewtemplates/room.js.map +1 -1
- package/dist/base-plugin/viewtemplates/show.d.ts +37 -4
- package/dist/base-plugin/viewtemplates/show.d.ts.map +1 -1
- package/dist/base-plugin/viewtemplates/show.js +111 -74
- package/dist/base-plugin/viewtemplates/show.js.map +1 -1
- package/dist/base-plugin/viewtemplates/viewable_fields.d.ts +26 -7
- package/dist/base-plugin/viewtemplates/viewable_fields.d.ts.map +1 -1
- package/dist/base-plugin/viewtemplates/viewable_fields.js +59 -47
- package/dist/base-plugin/viewtemplates/viewable_fields.js.map +1 -1
- package/dist/coverage/coverage-final.json +46 -0
- package/dist/coverage/lcov-report/block-navigation.d.ts +2 -0
- package/dist/coverage/lcov-report/block-navigation.d.ts.map +1 -0
- package/dist/coverage/lcov-report/block-navigation.js +71 -0
- package/dist/coverage/lcov-report/block-navigation.js.map +1 -0
- package/dist/coverage/lcov-report/prettify.d.ts +1 -0
- package/dist/coverage/lcov-report/prettify.d.ts.map +1 -0
- package/dist/coverage/lcov-report/prettify.js +478 -0
- package/dist/coverage/lcov-report/prettify.js.map +1 -0
- package/dist/coverage/lcov-report/sorter.d.ts +2 -0
- package/dist/coverage/lcov-report/sorter.d.ts.map +1 -0
- package/dist/coverage/lcov-report/sorter.js +164 -0
- package/dist/coverage/lcov-report/sorter.js.map +1 -0
- package/dist/db/connect.d.ts.map +1 -1
- package/dist/db/connect.js +8 -1
- package/dist/db/connect.js.map +1 -1
- package/dist/db/connect_mobile.d.ts +9 -0
- package/dist/db/connect_mobile.d.ts.map +1 -0
- package/dist/db/connect_mobile.js +15 -0
- package/dist/db/connect_mobile.js.map +1 -0
- package/dist/db/fixtures.d.ts.map +1 -1
- package/dist/db/fixtures.js +2 -1
- package/dist/db/fixtures.js.map +1 -1
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +16 -2
- package/dist/db/index.js.map +1 -1
- package/dist/db/state.d.ts +207 -52
- package/dist/db/state.d.ts.map +1 -1
- package/dist/db/state.js +87 -84
- package/dist/db/state.js.map +1 -1
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -2
- package/dist/index.js.map +1 -1
- package/dist/migrate.d.ts.map +1 -1
- package/dist/migrate.js +54 -40
- package/dist/migrate.js.map +1 -1
- package/dist/mobile-mocks/db/postgres.d.ts +1 -0
- package/dist/mobile-mocks/db/postgres.d.ts.map +1 -0
- package/dist/mobile-mocks/db/postgres.js +2 -0
- package/dist/mobile-mocks/db/postgres.js.map +1 -0
- package/dist/mobile-mocks/db/sqlite.d.ts +1 -0
- package/dist/mobile-mocks/db/sqlite.d.ts.map +1 -0
- package/dist/mobile-mocks/db/sqlite.js +2 -0
- package/dist/mobile-mocks/db/sqlite.js.map +1 -0
- package/dist/mobile-mocks/models/email.d.ts +1 -0
- package/dist/mobile-mocks/models/email.d.ts.map +1 -0
- package/dist/mobile-mocks/models/email.js +2 -0
- package/dist/mobile-mocks/models/email.js.map +1 -0
- package/dist/mobile-mocks/node/async_hooks.d.ts +4 -0
- package/dist/mobile-mocks/node/async_hooks.d.ts.map +1 -0
- package/dist/mobile-mocks/node/async_hooks.js +8 -0
- package/dist/mobile-mocks/node/async_hooks.js.map +1 -0
- package/dist/mobile-mocks/node/child_process.d.ts +3 -0
- package/dist/mobile-mocks/node/child_process.d.ts.map +1 -0
- package/dist/mobile-mocks/node/child_process.js +6 -0
- package/dist/mobile-mocks/node/child_process.js.map +1 -0
- package/dist/mobile-mocks/node/fs/promises.d.ts +6 -0
- package/dist/mobile-mocks/node/fs/promises.d.ts.map +1 -0
- package/dist/mobile-mocks/node/fs/promises.js +16 -0
- package/dist/mobile-mocks/node/fs/promises.js.map +1 -0
- package/dist/mobile-mocks/node/fs.d.ts +4 -0
- package/dist/mobile-mocks/node/fs.d.ts.map +1 -0
- package/dist/mobile-mocks/node/fs.js +15 -0
- package/dist/mobile-mocks/node/fs.js.map +1 -0
- package/dist/mobile-mocks/node/latest-version.d.ts +2 -0
- package/dist/mobile-mocks/node/latest-version.d.ts.map +1 -0
- package/dist/mobile-mocks/node/latest-version.js +7 -0
- package/dist/mobile-mocks/node/latest-version.js.map +1 -0
- package/dist/mobile-mocks/node/v8.d.ts +3 -0
- package/dist/mobile-mocks/node/v8.d.ts.map +1 -0
- package/dist/mobile-mocks/node/v8.js +8 -0
- package/dist/mobile-mocks/node/v8.js.map +1 -0
- package/dist/mobile-mocks/npm/env-paths.d.ts +6 -0
- package/dist/mobile-mocks/npm/env-paths.d.ts.map +1 -0
- package/dist/mobile-mocks/npm/env-paths.js +9 -0
- package/dist/mobile-mocks/npm/env-paths.js.map +1 -0
- package/dist/mobile-mocks/saltcorn/plugin-testing.d.ts +1 -0
- package/dist/mobile-mocks/saltcorn/plugin-testing.d.ts.map +1 -0
- package/dist/mobile-mocks/saltcorn/plugin-testing.js +2 -0
- package/dist/mobile-mocks/saltcorn/plugin-testing.js.map +1 -0
- package/dist/models/config.d.ts +9 -10
- package/dist/models/config.d.ts.map +1 -1
- package/dist/models/config.js +8 -7
- package/dist/models/config.js.map +1 -1
- package/dist/models/discovery.d.ts.map +1 -1
- package/dist/models/discovery.js +5 -1
- package/dist/models/discovery.js.map +1 -1
- package/dist/models/field.d.ts +5 -4
- package/dist/models/field.d.ts.map +1 -1
- package/dist/models/field.js +22 -19
- package/dist/models/field.js.map +1 -1
- package/dist/models/fieldrepeat.d.ts +5 -0
- package/dist/models/fieldrepeat.d.ts.map +1 -1
- package/dist/models/fieldrepeat.js +2 -0
- package/dist/models/fieldrepeat.js.map +1 -1
- package/dist/models/form.d.ts +2 -0
- package/dist/models/form.d.ts.map +1 -1
- package/dist/models/form.js +1 -0
- package/dist/models/form.js.map +1 -1
- package/dist/models/index.d.ts +2 -13
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/layout.d.ts.map +1 -1
- package/dist/models/layout.js +12 -2
- package/dist/models/layout.js.map +1 -1
- package/dist/models/page.d.ts +1 -1
- package/dist/models/page.d.ts.map +1 -1
- package/dist/models/page.js +10 -9
- package/dist/models/page.js.map +1 -1
- package/dist/models/scheduler.d.ts.map +1 -1
- package/dist/models/scheduler.js +3 -1
- package/dist/models/scheduler.js.map +1 -1
- package/dist/models/table.d.ts +2 -1
- package/dist/models/table.d.ts.map +1 -1
- package/dist/models/table.js +21 -10
- package/dist/models/table.js.map +1 -1
- package/dist/models/trigger.d.ts +3 -3
- package/dist/models/trigger.d.ts.map +1 -1
- package/dist/models/trigger.js +4 -5
- package/dist/models/trigger.js.map +1 -1
- package/dist/models/user.d.ts +1 -1
- package/dist/models/user.d.ts.map +1 -1
- package/dist/models/user.js +7 -15
- package/dist/models/user.js.map +1 -1
- package/dist/models/view.d.ts +16 -12
- package/dist/models/view.d.ts.map +1 -1
- package/dist/models/view.js +63 -15
- package/dist/models/view.js.map +1 -1
- package/dist/package.json +127 -0
- package/dist/plugin-helper.d.ts +17 -13
- package/dist/plugin-helper.d.ts.map +1 -1
- package/dist/plugin-helper.js +72 -60
- package/dist/plugin-helper.js.map +1 -1
- package/dist/tests/actions.test.d.ts +2 -0
- package/dist/tests/actions.test.d.ts.map +1 -0
- package/dist/tests/actions.test.js +250 -0
- package/dist/tests/actions.test.js.map +1 -0
- package/dist/tests/db.test.d.ts +2 -0
- package/dist/tests/db.test.d.ts.map +1 -0
- package/dist/tests/db.test.js +32 -0
- package/dist/tests/db.test.js.map +1 -0
- package/dist/tests/exact_views.test.js +274 -19
- package/dist/tests/exact_views.test.js.map +1 -1
- package/dist/tests/models.test.js +46 -1
- package/dist/tests/models.test.js.map +1 -1
- package/dist/tests/remote_query_helper.d.ts +341 -0
- package/dist/tests/remote_query_helper.d.ts.map +1 -0
- package/dist/tests/remote_query_helper.js +446 -0
- package/dist/tests/remote_query_helper.js.map +1 -0
- package/dist/tests/state.test.d.ts +2 -0
- package/dist/tests/state.test.d.ts.map +1 -0
- package/dist/tests/state.test.js +78 -0
- package/dist/tests/state.test.js.map +1 -0
- package/dist/tests/view.test.js +29 -0
- package/dist/tests/view.test.js.map +1 -1
- package/dist/tsconfig.json +24 -0
- package/dist/tsconfig.ref.json +9 -0
- package/dist/tsconfig.ref.tsbuildinfo +1 -1
- package/dist/utils.d.ts +2 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +12 -2
- package/dist/utils.js.map +1 -1
- package/dist/webpack.config.d.ts +57 -0
- package/dist/webpack.config.d.ts.map +1 -0
- package/dist/webpack.config.js +75 -0
- package/dist/webpack.config.js.map +1 -0
- package/package.json +38 -13
- package/CHANGELOG.md +0 -8
package/dist/plugin-helper.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* @param {object} req
|
|
6
6
|
* @returns {Promise<object[]>}
|
|
7
7
|
*/
|
|
8
|
-
export
|
|
8
|
+
export function field_picker_fields({ table, viewname, req }: Table | object): Promise<object[]>;
|
|
9
9
|
/**
|
|
10
10
|
* picked_fields_to_query Contract
|
|
11
11
|
* @function
|
|
@@ -14,7 +14,7 @@ export const field_picker_fields: any;
|
|
|
14
14
|
* @throws {InvalidConfiguration}
|
|
15
15
|
* @returns {object}
|
|
16
16
|
*/
|
|
17
|
-
export
|
|
17
|
+
export function picked_fields_to_query(columns: object[], fields: Field[], layout: any): object;
|
|
18
18
|
/**
|
|
19
19
|
* get_child_views Contract
|
|
20
20
|
* @function
|
|
@@ -22,7 +22,7 @@ export const picked_fields_to_query: any;
|
|
|
22
22
|
* @param {string} viewname
|
|
23
23
|
* @returns {Promise<object[]>}
|
|
24
24
|
*/
|
|
25
|
-
export
|
|
25
|
+
export function get_child_views(table: Table | object, viewname: string, nrecurse?: number): Promise<object[]>;
|
|
26
26
|
/**
|
|
27
27
|
* get_parent_views Contract
|
|
28
28
|
* @function
|
|
@@ -30,7 +30,7 @@ export const get_child_views: any;
|
|
|
30
30
|
* @param {string} viewname
|
|
31
31
|
* @returns {Promise<object[]>}
|
|
32
32
|
*/
|
|
33
|
-
export
|
|
33
|
+
export function get_parent_views(table: Table | object, viewname: string): Promise<object[]>;
|
|
34
34
|
/**
|
|
35
35
|
* @function
|
|
36
36
|
* @param {object} opts
|
|
@@ -39,7 +39,11 @@ export const get_parent_views: any;
|
|
|
39
39
|
* @param {boolean} [opts.approximate = true]
|
|
40
40
|
* @returns {object}
|
|
41
41
|
*/
|
|
42
|
-
export
|
|
42
|
+
export function stateFieldsToWhere({ fields, state, approximate }: {
|
|
43
|
+
fields: Field[];
|
|
44
|
+
state: object;
|
|
45
|
+
approximate?: boolean | undefined;
|
|
46
|
+
}): object;
|
|
43
47
|
/**
|
|
44
48
|
* @function
|
|
45
49
|
* @param {object}
|
|
@@ -47,21 +51,21 @@ export const stateFieldsToWhere: any;
|
|
|
47
51
|
* @param {string} - missing in contract
|
|
48
52
|
* @returns {object}
|
|
49
53
|
*/
|
|
50
|
-
export
|
|
54
|
+
export function stateFieldsToQuery({ state, fields, prefix }: object): object;
|
|
51
55
|
/**
|
|
52
56
|
* initial_config_all_fields Contract
|
|
53
57
|
* @function
|
|
54
58
|
* @param {boolean}
|
|
55
59
|
* @returns {function}
|
|
56
60
|
*/
|
|
57
|
-
export
|
|
61
|
+
export function initial_config_all_fields(isEdit: any): Function;
|
|
58
62
|
/**
|
|
59
63
|
* @function
|
|
60
64
|
* @param {Field[]} fields
|
|
61
65
|
* @param {boolean}
|
|
62
66
|
* @returns {object}
|
|
63
67
|
*/
|
|
64
|
-
export
|
|
68
|
+
export function calcfldViewOptions(fields: Field[], mode: any): object;
|
|
65
69
|
/**
|
|
66
70
|
* @function
|
|
67
71
|
* @param {Table|object} table
|
|
@@ -69,8 +73,7 @@ export const calcfldViewOptions: any;
|
|
|
69
73
|
* @param {boolean}
|
|
70
74
|
* @returns {Promise<object[]>}
|
|
71
75
|
*/
|
|
72
|
-
export
|
|
73
|
-
import { is_column } from "./contracts";
|
|
76
|
+
export function get_link_view_opts(table: Table | object, viewname: string): Promise<object[]>;
|
|
74
77
|
/**
|
|
75
78
|
*
|
|
76
79
|
* @param {object} state
|
|
@@ -90,7 +93,7 @@ export function readStateStrict(state: object, fields: object[]): boolean | any;
|
|
|
90
93
|
* @param {object} [state]
|
|
91
94
|
* @returns {string}
|
|
92
95
|
*/
|
|
93
|
-
export
|
|
96
|
+
export function stateToQueryString(state?: object | undefined): string;
|
|
94
97
|
/**
|
|
95
98
|
*
|
|
96
99
|
* @param {string} url
|
|
@@ -119,7 +122,7 @@ export function getActionConfigFields(action: object, table: object): Promise<ob
|
|
|
119
122
|
* @param {boolean}
|
|
120
123
|
* @returns {Promise<object>}
|
|
121
124
|
*/
|
|
122
|
-
export
|
|
125
|
+
export function calcfldViewConfig(fields: Field[], isEdit: any, nrecurse?: number): Promise<object>;
|
|
123
126
|
/**
|
|
124
127
|
*
|
|
125
128
|
* @param {string} x
|
|
@@ -141,5 +144,6 @@ export function run_action_column({ col, req, ...rest }: object): Promise<any>;
|
|
|
141
144
|
* @returns {object}
|
|
142
145
|
*/
|
|
143
146
|
export function json_list_to_external_table(get_json_list: Function, fields0: object[]): object;
|
|
144
|
-
|
|
147
|
+
import Table = require("./models/table");
|
|
148
|
+
import Field = require("./models/field");
|
|
145
149
|
//# sourceMappingURL=plugin-helper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-helper.d.ts","sourceRoot":"","sources":["../plugin-helper.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plugin-helper.d.ts","sourceRoot":"","sources":["../plugin-helper.js"],"names":[],"mappings":"AA+TA;;;;;;GAMG;AACH,8DALW,KAAK,GAAC,MAAM,GAGV,QAAQ,MAAM,EAAE,CAAC,CAib7B;AA8FD;;;;;;;GAOG;AACH,gDALW,MAAM,EAAE,UACR,KAAK,EAAE,gBAEL,MAAM,CA8IlB;AAhPD;;;;;;GAMG;AACH,uCAJW,KAAK,GAAC,MAAM,YACZ,MAAM,sBACJ,QAAQ,MAAM,EAAE,CAAC,CAiC7B;AAED;;;;;;GAMG;AACH,wCAJW,KAAK,GAAC,MAAM,YACZ,MAAM,GACJ,QAAQ,MAAM,EAAE,CAAC,CAoB7B;AA6ND;;;;;;;GAOG;AACH;IALyB,MAAM,EAApB,KAAK,EAAE;IACM,KAAK,EAAlB,MAAM;IACS,WAAW;IACxB,MAAM,CA0HlB;AA5KD;;;;;;GAMG;AACH,8DALW,MAAM,GAGJ,MAAM,CAyBlB;AAgJD;;;;;GAKG;AACH,iEAqGG;AAzpCH;;;;;GAKG;AACH,2CAJW,KAAK,EAAE,cAEL,MAAM,CAuFlB;AAwCD;;;;;;GAMG;AACH,0CALW,KAAK,GAAC,MAAM,YACZ,MAAM,GAEJ,QAAQ,MAAM,EAAE,CAAC,CAiE7B;AA49BD;;;;;GAKG;AACH,iCAJW,MAAM,UACN,MAAM,EAAE,aACN,MAAM,CAwBlB;AAED;;;;;GAKG;AACH,uCAJW,MAAM,UACN,MAAM,EAAE,GACN,OAAO,MAAE,CA4BrB;AAtvCD;;;;GAIG;AACH,gEAFa,MAAM,CAclB;AArFD;;;;;;;;;;;;;GAaG;AACH,4CAXW,MAAM,4SASJ,UAAQ,CAsDpB;AAgOD;;;;;GAKG;AACH,8CAJW,MAAM,SACN,MAAM,GACJ,QAAQ,MAAM,EAAE,CAAC,CAKC;AAvH/B;;;;;GAKG;AACH,0CAJW,KAAK,EAAE,mCAEL,QAAQ,MAAM,CAAC,CAgC3B;AA0hCD;;;;GAIG;AACH,kCAHW,MAAM,GACJ,MAAM,GAAC,SAAS,CAK5B;AA0ID;;;;;;GAMG;AACH,yDALW,MAAM,GAGJ,YAAU,CAiBtB;AA/FD;;;;;GAKG;AACH,8EAHW,MAAM,EAAE,GACN,MAAM,CAmElB"}
|
package/dist/plugin-helper.js
CHANGED
|
@@ -10,13 +10,12 @@ const Table = require("./models/table");
|
|
|
10
10
|
const Trigger = require("./models/trigger");
|
|
11
11
|
const { getState } = require("./db/state");
|
|
12
12
|
const db = require("./db");
|
|
13
|
-
const { contract, is } = require("contractis");
|
|
14
|
-
const { fieldlike, is_table_query, is_column, is_tablely, } = require("./contracts");
|
|
15
13
|
const { link } = require("@saltcorn/markup");
|
|
16
14
|
const { button, a, label, text, i } = require("@saltcorn/markup/tags");
|
|
17
15
|
const { applyAsync, InvalidConfiguration } = require("./utils");
|
|
18
16
|
const { jsexprToWhere, freeVariables } = require("./models/expression");
|
|
19
17
|
const { traverse } = require("./models/layout");
|
|
18
|
+
const { isNode } = require("./utils");
|
|
20
19
|
/**
|
|
21
20
|
*
|
|
22
21
|
* @param {string} url
|
|
@@ -52,7 +51,7 @@ const link_view = (url0, label, popup, link_style = "", link_size = "", link_ico
|
|
|
52
51
|
extraClass,
|
|
53
52
|
],
|
|
54
53
|
type: "button",
|
|
55
|
-
onClick: `ajax_modal('${url}')`,
|
|
54
|
+
onClick: isNode() ? `ajax_modal('${url}')` : `mobile_modal('${url}')`,
|
|
56
55
|
style,
|
|
57
56
|
}, link_icon ? i({ class: link_icon }) + " " : "", label);
|
|
58
57
|
}
|
|
@@ -68,24 +67,22 @@ const link_view = (url0, label, popup, link_style = "", link_size = "", link_ico
|
|
|
68
67
|
* @param {object} [state]
|
|
69
68
|
* @returns {string}
|
|
70
69
|
*/
|
|
71
|
-
const stateToQueryString =
|
|
70
|
+
const stateToQueryString = (state) => {
|
|
72
71
|
if (!state || Object.keys(state).length === 0)
|
|
73
72
|
return "";
|
|
74
73
|
return ("?" +
|
|
75
74
|
Object.entries(state)
|
|
76
|
-
.map(([k, v]) => k === "id"
|
|
77
|
-
? null
|
|
78
|
-
: `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)
|
|
75
|
+
.map(([k, v]) => k === "id" ? null : `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)
|
|
79
76
|
.filter((s) => !!s)
|
|
80
77
|
.join("&"));
|
|
81
|
-
}
|
|
78
|
+
};
|
|
82
79
|
/**
|
|
83
80
|
* @function
|
|
84
81
|
* @param {Field[]} fields
|
|
85
82
|
* @param {boolean}
|
|
86
83
|
* @returns {object}
|
|
87
84
|
*/
|
|
88
|
-
const calcfldViewOptions =
|
|
85
|
+
const calcfldViewOptions = (fields, mode) => {
|
|
89
86
|
const isEdit = mode === "edit";
|
|
90
87
|
const isFilter = mode === "filter";
|
|
91
88
|
let fvs = {};
|
|
@@ -170,14 +167,14 @@ const calcfldViewOptions = contract(is.fun([is.array(is.class("Field")), is.str]
|
|
|
170
167
|
}
|
|
171
168
|
});
|
|
172
169
|
return { field_view_options: fvs, handlesTextStyle, blockDisplay };
|
|
173
|
-
}
|
|
170
|
+
};
|
|
174
171
|
/**
|
|
175
172
|
* @function
|
|
176
173
|
* @param {Field[]} fields
|
|
177
174
|
* @param {boolean}
|
|
178
175
|
* @returns {Promise<object>}
|
|
179
176
|
*/
|
|
180
|
-
const calcfldViewConfig =
|
|
177
|
+
const calcfldViewConfig = async (fields, isEdit, nrecurse = 2) => {
|
|
181
178
|
const fieldViewConfigForms = {};
|
|
182
179
|
for (const f of fields) {
|
|
183
180
|
f.fill_table();
|
|
@@ -202,7 +199,7 @@ const calcfldViewConfig = contract(is.fun([is.array(is.class("Field")), is.bool]
|
|
|
202
199
|
}
|
|
203
200
|
}
|
|
204
201
|
return fieldViewConfigForms;
|
|
205
|
-
}
|
|
202
|
+
};
|
|
206
203
|
/**
|
|
207
204
|
* @function
|
|
208
205
|
* @param {Table|object} table
|
|
@@ -210,7 +207,7 @@ const calcfldViewConfig = contract(is.fun([is.array(is.class("Field")), is.bool]
|
|
|
210
207
|
* @param {boolean}
|
|
211
208
|
* @returns {Promise<object[]>}
|
|
212
209
|
*/
|
|
213
|
-
const get_link_view_opts =
|
|
210
|
+
const get_link_view_opts = async (table, viewname) => {
|
|
214
211
|
const own_link_views = await View.find_possible_links_to_table(table);
|
|
215
212
|
const link_view_opts = own_link_views
|
|
216
213
|
.filter((v) => v.name !== viewname)
|
|
@@ -265,7 +262,7 @@ const get_link_view_opts = contract(is.fun([is_tablely, is.str], is.promise(is.a
|
|
|
265
262
|
});
|
|
266
263
|
});
|
|
267
264
|
return link_view_opts;
|
|
268
|
-
}
|
|
265
|
+
};
|
|
269
266
|
/**
|
|
270
267
|
* Get Action configuration fields
|
|
271
268
|
* @param {object} action
|
|
@@ -282,7 +279,7 @@ const getActionConfigFields = async (action, table) => typeof action.configField
|
|
|
282
279
|
* @param {object} req
|
|
283
280
|
* @returns {Promise<object[]>}
|
|
284
281
|
*/
|
|
285
|
-
const field_picker_fields =
|
|
282
|
+
const field_picker_fields = async ({ table, viewname, req }) => {
|
|
286
283
|
const __ = (...s) => (req ? req.__(...s) : s.join(""));
|
|
287
284
|
const fields = await table.getFields();
|
|
288
285
|
for (const field of fields) {
|
|
@@ -701,7 +698,7 @@ const field_picker_fields = contract(is.fun(is.obj({ table: is_tablely, viewname
|
|
|
701
698
|
},
|
|
702
699
|
},
|
|
703
700
|
];
|
|
704
|
-
}
|
|
701
|
+
};
|
|
705
702
|
/**
|
|
706
703
|
* get_child_views Contract
|
|
707
704
|
* @function
|
|
@@ -709,11 +706,7 @@ const field_picker_fields = contract(is.fun(is.obj({ table: is_tablely, viewname
|
|
|
709
706
|
* @param {string} viewname
|
|
710
707
|
* @returns {Promise<object[]>}
|
|
711
708
|
*/
|
|
712
|
-
const get_child_views =
|
|
713
|
-
relation: is.class("Field"),
|
|
714
|
-
related_table: is.class("Table"),
|
|
715
|
-
views: is.array(is.class("View")),
|
|
716
|
-
})))), async (table, viewname, nrecurse = 2) => {
|
|
709
|
+
const get_child_views = async (table, viewname, nrecurse = 2) => {
|
|
717
710
|
const rels = await Field.find({ reftable_name: table.name });
|
|
718
711
|
const possibleThroughTables = new Set();
|
|
719
712
|
var child_views = [];
|
|
@@ -740,7 +733,7 @@ const get_child_views = contract(is.fun([is_tablely, is.maybe(is.str)], is.promi
|
|
|
740
733
|
});
|
|
741
734
|
}
|
|
742
735
|
return child_views;
|
|
743
|
-
}
|
|
736
|
+
};
|
|
744
737
|
/**
|
|
745
738
|
* get_parent_views Contract
|
|
746
739
|
* @function
|
|
@@ -748,35 +741,26 @@ const get_child_views = contract(is.fun([is_tablely, is.maybe(is.str)], is.promi
|
|
|
748
741
|
* @param {string} viewname
|
|
749
742
|
* @returns {Promise<object[]>}
|
|
750
743
|
*/
|
|
751
|
-
const get_parent_views =
|
|
752
|
-
relation: is.class("Field"),
|
|
753
|
-
related_table: is.class("Table"),
|
|
754
|
-
views: is.array(is.class("View")),
|
|
755
|
-
})))), async (table, viewname) => {
|
|
744
|
+
const get_parent_views = async (table, viewname) => {
|
|
756
745
|
var parent_views = [];
|
|
757
746
|
const parentrels = (await table.getFields()).filter((f) => f.is_fkey && f.type !== "File");
|
|
758
747
|
for (const relation of parentrels) {
|
|
759
748
|
const related_table = await Table.findOne({
|
|
760
749
|
name: relation.reftable_name,
|
|
761
750
|
});
|
|
762
|
-
const views = await View.find_table_views_where(related_table, ({ state_fields, viewrow }) => viewrow.name !== viewname &&
|
|
763
|
-
state_fields.some((sf) => sf.name === "id"));
|
|
751
|
+
const views = await View.find_table_views_where(related_table, ({ state_fields, viewrow }) => viewrow.name !== viewname && state_fields.some((sf) => sf.name === "id"));
|
|
764
752
|
parent_views.push({ relation, related_table, views });
|
|
765
753
|
}
|
|
766
754
|
return parent_views;
|
|
767
|
-
}
|
|
755
|
+
};
|
|
768
756
|
/**
|
|
769
757
|
* get_onetoone_views Contract
|
|
770
758
|
* @function
|
|
771
|
-
* @param {Table
|
|
759
|
+
* @param {Table} table
|
|
772
760
|
* @param {string} viewname
|
|
773
761
|
* @returns {Promise<object[]>}
|
|
774
762
|
*/
|
|
775
|
-
const get_onetoone_views =
|
|
776
|
-
relation: is.class("Field"),
|
|
777
|
-
related_table: is.class("Table"),
|
|
778
|
-
views: is.array(is.class("View")),
|
|
779
|
-
})))), async (table, viewname) => {
|
|
763
|
+
const get_onetoone_views = async (table, viewname) => {
|
|
780
764
|
const rels = await Field.find({
|
|
781
765
|
reftable_name: table.name,
|
|
782
766
|
is_unique: true,
|
|
@@ -784,12 +768,11 @@ const get_onetoone_views = contract(is.fun([is_tablely, is.str], is.promise(is.a
|
|
|
784
768
|
var child_views = [];
|
|
785
769
|
for (const relation of rels) {
|
|
786
770
|
const related_table = await Table.findOne({ id: relation.table_id });
|
|
787
|
-
const views = await View.find_table_views_where(related_table.id, ({ state_fields, viewrow }) => viewrow.name !== viewname &&
|
|
788
|
-
state_fields.some((sf) => sf.name === "id"));
|
|
771
|
+
const views = await View.find_table_views_where(related_table.id, ({ state_fields, viewrow }) => viewrow.name !== viewname && state_fields.some((sf) => sf.name === "id"));
|
|
789
772
|
child_views.push({ relation, related_table, views });
|
|
790
773
|
}
|
|
791
774
|
return child_views;
|
|
792
|
-
}
|
|
775
|
+
};
|
|
793
776
|
/**
|
|
794
777
|
* picked_fields_to_query Contract
|
|
795
778
|
* @function
|
|
@@ -798,7 +781,7 @@ const get_onetoone_views = contract(is.fun([is_tablely, is.str], is.promise(is.a
|
|
|
798
781
|
* @throws {InvalidConfiguration}
|
|
799
782
|
* @returns {object}
|
|
800
783
|
*/
|
|
801
|
-
const picked_fields_to_query =
|
|
784
|
+
const picked_fields_to_query = (columns, fields, layout) => {
|
|
802
785
|
var joinFields = {};
|
|
803
786
|
var aggregations = {};
|
|
804
787
|
let freeVars = new Set(); // for join fields
|
|
@@ -848,10 +831,7 @@ const picked_fields_to_query = contract(is.fun([is.array(is_column), is.array(is
|
|
|
848
831
|
}
|
|
849
832
|
else if (column.type === "ViewLink") {
|
|
850
833
|
if (column.view_label_formula)
|
|
851
|
-
freeVars = new Set([
|
|
852
|
-
...freeVars,
|
|
853
|
-
...freeVariables(column.view_label),
|
|
854
|
-
]);
|
|
834
|
+
freeVars = new Set([...freeVars, ...freeVariables(column.view_label)]);
|
|
855
835
|
if (column.extra_state_fml)
|
|
856
836
|
freeVars = new Set([
|
|
857
837
|
...freeVars,
|
|
@@ -897,10 +877,7 @@ const picked_fields_to_query = contract(is.fun([is.array(is_column), is.array(is
|
|
|
897
877
|
freeVars = new Set([...freeVars, ...freeVariables(column.link_url)]);
|
|
898
878
|
}
|
|
899
879
|
else if (column.type === "Action" && column.action_label_formula) {
|
|
900
|
-
freeVars = new Set([
|
|
901
|
-
...freeVars,
|
|
902
|
-
...freeVariables(column.action_label),
|
|
903
|
-
]);
|
|
880
|
+
freeVars = new Set([...freeVars, ...freeVariables(column.action_label)]);
|
|
904
881
|
}
|
|
905
882
|
});
|
|
906
883
|
if (layout) {
|
|
@@ -947,7 +924,7 @@ const picked_fields_to_query = contract(is.fun([is.array(is_column), is.array(is
|
|
|
947
924
|
}
|
|
948
925
|
});
|
|
949
926
|
return { joinFields, aggregations };
|
|
950
|
-
}
|
|
927
|
+
};
|
|
951
928
|
/**
|
|
952
929
|
* @function
|
|
953
930
|
* @param {object}
|
|
@@ -955,7 +932,7 @@ const picked_fields_to_query = contract(is.fun([is.array(is_column), is.array(is
|
|
|
955
932
|
* @param {string} - missing in contract
|
|
956
933
|
* @returns {object}
|
|
957
934
|
*/
|
|
958
|
-
const stateFieldsToQuery =
|
|
935
|
+
const stateFieldsToQuery = ({ state, fields, prefix = "" }) => {
|
|
959
936
|
let q = {};
|
|
960
937
|
const stateKeys = Object.keys(state);
|
|
961
938
|
if (state._sortby) {
|
|
@@ -980,7 +957,7 @@ const stateFieldsToQuery = contract(is.fun(is.obj(), is.obj()), ({ state, fields
|
|
|
980
957
|
q.orderBy = { distance: { lat, long, latField, longField } };
|
|
981
958
|
}
|
|
982
959
|
return q;
|
|
983
|
-
}
|
|
960
|
+
};
|
|
984
961
|
/**
|
|
985
962
|
*
|
|
986
963
|
* @param {object} container
|
|
@@ -1002,14 +979,15 @@ const addOrCreateList = (container, key, x) => {
|
|
|
1002
979
|
* @param {boolean} [opts.approximate = true]
|
|
1003
980
|
* @returns {object}
|
|
1004
981
|
*/
|
|
1005
|
-
const stateFieldsToWhere =
|
|
1006
|
-
fields: is.array(is.class("Field")),
|
|
1007
|
-
approximate: is.maybe(is.bool),
|
|
1008
|
-
}), is.obj()), ({ fields, state, approximate = true }) => {
|
|
982
|
+
const stateFieldsToWhere = ({ fields, state, approximate = true }) => {
|
|
1009
983
|
var qstate = {};
|
|
1010
984
|
Object.entries(state).forEach(([k, v]) => {
|
|
1011
985
|
if (k === "_fts") {
|
|
1012
|
-
qstate[k] = {
|
|
986
|
+
qstate[k] = {
|
|
987
|
+
searchTerm: v.replace(/\0/g, ""),
|
|
988
|
+
fields,
|
|
989
|
+
schema: db.getTenantSchema(),
|
|
990
|
+
};
|
|
1013
991
|
return;
|
|
1014
992
|
}
|
|
1015
993
|
const field = fields.find((fld) => fld.name == k);
|
|
@@ -1049,12 +1027,47 @@ const stateFieldsToWhere = contract(is.fun(is.obj({
|
|
|
1049
1027
|
else if (field && field.type.name === "Bool" && state[k] === "?") {
|
|
1050
1028
|
// omit
|
|
1051
1029
|
}
|
|
1030
|
+
else if (typeof v === "object" &&
|
|
1031
|
+
Object.keys(v).length === 1 &&
|
|
1032
|
+
field?.type?.name === "JSON") {
|
|
1033
|
+
qstate[k] = [
|
|
1034
|
+
...(qstate[k] ? [qstate[k]] : []),
|
|
1035
|
+
{
|
|
1036
|
+
// where jFieldNm in (select id from jtnm where lblField=v)
|
|
1037
|
+
json: [Object.keys(v)[0], Object.values(v)[0]],
|
|
1038
|
+
},
|
|
1039
|
+
];
|
|
1040
|
+
}
|
|
1052
1041
|
else if (field && field.type && field.type.read)
|
|
1053
1042
|
qstate[k] = Array.isArray(v)
|
|
1054
1043
|
? { or: v.map(field.type.read) }
|
|
1055
1044
|
: field.type.read(v);
|
|
1056
1045
|
else if (field)
|
|
1057
1046
|
qstate[k] = v;
|
|
1047
|
+
else if (k.includes("->")) {
|
|
1048
|
+
// jFieldNm.jtnm->lblField
|
|
1049
|
+
// where jFieldNm in (select id from jtnm where lblField=v)
|
|
1050
|
+
const [jFieldNm, krest] = k.split(".");
|
|
1051
|
+
const [jtNm, lblField] = krest.split("->");
|
|
1052
|
+
let where = { [db.sqlsanitize(lblField)]: v };
|
|
1053
|
+
const jTable = Table.findOne({ name: jtNm });
|
|
1054
|
+
const lblFld = (jTable.fields || []).find((f) => f.name === lblField);
|
|
1055
|
+
if (lblFld &&
|
|
1056
|
+
lblFld.type?.name === "String" &&
|
|
1057
|
+
!lblFld.attributes?.options)
|
|
1058
|
+
where = { [db.sqlsanitize(lblField)]: { ilike: v } };
|
|
1059
|
+
qstate[jFieldNm] = [
|
|
1060
|
+
...(qstate[jFieldNm] ? [qstate[jFieldNm]] : []),
|
|
1061
|
+
{
|
|
1062
|
+
// where jFieldNm in (select id from jtnm where lblField=v)
|
|
1063
|
+
inSelect: {
|
|
1064
|
+
table: `${db.getTenantSchemaPrefix()}"${db.sqlsanitize(jtNm)}"`,
|
|
1065
|
+
field: "id",
|
|
1066
|
+
where,
|
|
1067
|
+
},
|
|
1068
|
+
},
|
|
1069
|
+
];
|
|
1070
|
+
}
|
|
1058
1071
|
else if (k.includes(".")) {
|
|
1059
1072
|
const kpath = k.split(".");
|
|
1060
1073
|
if (kpath.length === 3) {
|
|
@@ -1090,14 +1103,14 @@ const stateFieldsToWhere = contract(is.fun(is.obj({
|
|
|
1090
1103
|
}
|
|
1091
1104
|
});
|
|
1092
1105
|
return qstate;
|
|
1093
|
-
}
|
|
1106
|
+
};
|
|
1094
1107
|
/**
|
|
1095
1108
|
* initial_config_all_fields Contract
|
|
1096
1109
|
* @function
|
|
1097
1110
|
* @param {boolean}
|
|
1098
1111
|
* @returns {function}
|
|
1099
1112
|
*/
|
|
1100
|
-
const initial_config_all_fields =
|
|
1113
|
+
const initial_config_all_fields = (isEdit) => async ({ table_id, exttable_name }) => {
|
|
1101
1114
|
const table = await Table.findOne(table_id ? { id: table_id } : { name: exttable_name });
|
|
1102
1115
|
const fields = (await table.getFields()).filter((f) => !f.primary_key && (!isEdit || !f.calculated));
|
|
1103
1116
|
var cfg = { columns: [] };
|
|
@@ -1189,7 +1202,7 @@ const initial_config_all_fields = contract(is.fun(is.bool, is.fun(is.obj({ table
|
|
|
1189
1202
|
});
|
|
1190
1203
|
cfg.layout = { above: aboves };
|
|
1191
1204
|
return cfg;
|
|
1192
|
-
}
|
|
1205
|
+
};
|
|
1193
1206
|
/**
|
|
1194
1207
|
*
|
|
1195
1208
|
* @param {string} x
|
|
@@ -1364,7 +1377,6 @@ module.exports = {
|
|
|
1364
1377
|
initial_config_all_fields,
|
|
1365
1378
|
calcfldViewOptions,
|
|
1366
1379
|
get_link_view_opts,
|
|
1367
|
-
is_column,
|
|
1368
1380
|
readState,
|
|
1369
1381
|
readStateStrict,
|
|
1370
1382
|
stateToQueryString,
|