@saltcorn/data 0.7.1-beta.3 → 0.7.2-beta.10
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/base-plugin/actions.d.ts.map +1 -1
- package/dist/base-plugin/actions.js +5 -1
- package/dist/base-plugin/actions.js.map +1 -1
- package/dist/base-plugin/fieldviews.d.ts +29 -0
- package/dist/base-plugin/fieldviews.d.ts.map +1 -1
- package/dist/base-plugin/fieldviews.js +60 -5
- package/dist/base-plugin/fieldviews.js.map +1 -1
- package/dist/base-plugin/fileviews.d.ts.map +1 -1
- package/dist/base-plugin/fileviews.js +20 -5
- package/dist/base-plugin/fileviews.js.map +1 -1
- package/dist/base-plugin/index.d.ts +309 -84
- package/dist/base-plugin/index.d.ts.map +1 -1
- package/dist/base-plugin/types.d.ts +127 -65
- package/dist/base-plugin/types.d.ts.map +1 -1
- package/dist/base-plugin/types.js +152 -36
- package/dist/base-plugin/types.js.map +1 -1
- package/dist/base-plugin/viewtemplates/edit.d.ts +47 -9
- package/dist/base-plugin/viewtemplates/edit.d.ts.map +1 -1
- package/dist/base-plugin/viewtemplates/edit.js +266 -113
- 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 +66 -45
- package/dist/base-plugin/viewtemplates/filter.js.map +1 -1
- package/dist/base-plugin/viewtemplates/list.d.ts +21 -1
- package/dist/base-plugin/viewtemplates/list.d.ts.map +1 -1
- package/dist/base-plugin/viewtemplates/list.js +63 -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 +38 -4
- package/dist/base-plugin/viewtemplates/show.d.ts.map +1 -1
- package/dist/base-plugin/viewtemplates/show.js +125 -76
- 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 +60 -48
- package/dist/base-plugin/viewtemplates/viewable_fields.js.map +1 -1
- 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 +6 -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 +214 -52
- package/dist/db/state.d.ts.map +1 -1
- package/dist/db/state.js +115 -104
- 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 +32 -3
- 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 +35 -12
- package/dist/models/config.js.map +1 -1
- package/dist/models/crash.js +5 -1
- package/dist/models/crash.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/email.d.ts +2 -0
- package/dist/models/email.d.ts.map +1 -1
- package/dist/models/email.js +2 -2
- package/dist/models/email.js.map +1 -1
- package/dist/models/field.d.ts +6 -4
- package/dist/models/field.d.ts.map +1 -1
- package/dist/models/field.js +41 -21
- 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/file.d.ts +6 -0
- package/dist/models/file.d.ts.map +1 -1
- package/dist/models/file.js +25 -1
- package/dist/models/file.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 +17 -9
- package/dist/models/page.js.map +1 -1
- package/dist/models/plugin.d.ts +1 -1
- package/dist/models/plugin.d.ts.map +1 -1
- package/dist/models/plugin.js +10 -6
- package/dist/models/plugin.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 +48 -12
- 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 +6 -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 +25 -14
- package/dist/models/view.d.ts.map +1 -1
- package/dist/models/view.js +84 -25
- package/dist/models/view.js.map +1 -1
- package/dist/models/workflow.d.ts +1 -0
- package/dist/models/workflow.d.ts.map +1 -1
- package/dist/models/workflow.js +58 -2
- package/dist/models/workflow.js.map +1 -1
- package/dist/package.json +127 -0
- package/dist/plugin-helper.d.ts +19 -14
- package/dist/plugin-helper.d.ts.map +1 -1
- package/dist/plugin-helper.js +158 -80
- package/dist/plugin-helper.js.map +1 -1
- package/dist/plugin-testing.d.ts +1 -0
- package/dist/plugin-testing.d.ts.map +1 -1
- package/dist/plugin-testing.js +84 -1
- package/dist/plugin-testing.js.map +1 -1
- package/dist/tests/actions.test.js +30 -5
- package/dist/tests/actions.test.js.map +1 -1
- package/dist/tests/auxtest.test.js +100 -3
- package/dist/tests/auxtest.test.js.map +1 -1
- 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 +277 -22
- package/dist/tests/exact_views.test.js.map +1 -1
- package/dist/tests/field.test.js +36 -0
- package/dist/tests/field.test.js.map +1 -1
- package/dist/tests/mocks.d.ts +2 -0
- package/dist/tests/mocks.d.ts.map +1 -1
- package/dist/tests/mocks.js +2 -0
- package/dist/tests/mocks.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/table.test.js +19 -0
- package/dist/tests/table.test.js.map +1 -1
- 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 +3 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +14 -23
- 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 +39 -15
- package/CHANGELOG.md +0 -8
- package/dist/models/backup.d.ts +0 -9
- package/dist/models/backup.d.ts.map +0 -1
- package/dist/models/backup.js +0 -278
- package/dist/models/backup.js.map +0 -1
- package/dist/models/pack.d.ts +0 -42
- package/dist/models/pack.d.ts.map +0 -1
- package/dist/models/pack.js +0 -419
- package/dist/models/pack.js.map +0 -1
- package/dist/models/tenant.d.ts +0 -17
- package/dist/models/tenant.d.ts.map +0 -1
- package/dist/models/tenant.js +0 -152
- package/dist/models/tenant.js.map +0 -1
- package/dist/tests/backup.test.d.ts +0 -2
- package/dist/tests/backup.test.d.ts.map +0 -1
- package/dist/tests/backup.test.js +0 -101
- package/dist/tests/backup.test.js.map +0 -1
- package/dist/tests/pack.test.d.ts +0 -2
- package/dist/tests/pack.test.d.ts.map +0 -1
- package/dist/tests/pack.test.js +0 -338
- package/dist/tests/pack.test.js.map +0 -1
- package/dist/tests/random.test.d.ts +0 -2
- package/dist/tests/random.test.d.ts.map +0 -1
- package/dist/tests/random.test.js +0 -149
- package/dist/tests/random.test.js.map +0 -1
- package/dist/tests/tenant.test.d.ts +0 -2
- package/dist/tests/tenant.test.d.ts.map +0 -1
- package/dist/tests/tenant.test.js +0 -52
- package/dist/tests/tenant.test.js.map +0 -1
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
|
|
@@ -105,7 +108,7 @@ export const stateToQueryString: any;
|
|
|
105
108
|
* @param {string} [link_textcol]
|
|
106
109
|
* @returns {button|a}
|
|
107
110
|
*/
|
|
108
|
-
export function link_view(url0: any, label: string, popup?: boolean | undefined, link_style?: string | undefined, link_size?: string | undefined, link_icon?: string | undefined, textStyle?: string | undefined, link_bgcol?: string | undefined, link_bordercol?: string | undefined, link_textcol?: string | undefined, extraClass: any, extraState: any): button | a;
|
|
111
|
+
export function link_view(url0: any, label: string, popup?: boolean | undefined, link_style?: string | undefined, link_size?: string | undefined, link_icon?: string | undefined, textStyle?: string | undefined, link_bgcol?: string | undefined, link_bordercol?: string | undefined, link_textcol?: string | undefined, extraClass: any, extraState: any, link_target_blank: any): button | a;
|
|
109
112
|
/**
|
|
110
113
|
* Get Action configuration fields
|
|
111
114
|
* @param {object} action
|
|
@@ -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,7 @@ 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
|
-
export
|
|
147
|
+
export function add_free_variables_to_joinfields(freeVars: any, joinFields: any, fields: any): void;
|
|
148
|
+
import Table = require("./models/table");
|
|
149
|
+
import Field = require("./models/field");
|
|
145
150
|
//# 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":"AAiUA;;;;;;GAMG;AACH,8DALW,KAAK,GAAC,MAAM,GAGV,QAAQ,MAAM,EAAE,CAAC,CAib7B;AA8FD;;;;;;;GAOG;AACH,gDALW,MAAM,EAAE,UACR,KAAK,EAAE,gBAEL,MAAM,CA+GlB;AAjND;;;;;;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;AAkOD;;;;;;;GAOG;AACH;IALyB,MAAM,EAApB,KAAK,EAAE;IACM,KAAK,EAAlB,MAAM;IACS,WAAW;IACxB,MAAM,CAiJlB;AAnMD;;;;;;GAMG;AACH,8DALW,MAAM,GAGJ,MAAM,CAyBlB;AAuKD;;;;;GAKG;AACH,iEAqGG;AArrCH;;;;;GAKG;AACH,2CAJW,KAAK,EAAE,cAEL,MAAM,CAuFlB;AAwCD;;;;;;GAMG;AACH,0CALW,KAAK,GAAC,MAAM,YACZ,MAAM,GAEJ,QAAQ,MAAM,EAAE,CAAC,CAiE7B;AAw/BD;;;;;GAKG;AACH,iCAJW,MAAM,UACN,MAAM,EAAE,aACN,MAAM,CAwBlB;AAED;;;;;GAKG;AACH,uCAJW,MAAM,UACN,MAAM,EAAE,GACN,OAAO,MAAE,CA4BrB;AAlxCD;;;;GAIG;AACH,gEAFa,MAAM,CAclB;AAvFD;;;;;;;;;;;;;GAaG;AACH,4CAXW,MAAM,oUASJ,UAAQ,CAwDpB;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;AAsjCD;;;;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;AAteD,oGAkCC"}
|
package/dist/plugin-helper.js
CHANGED
|
@@ -10,12 +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");
|
|
17
|
+
const { traverse } = require("./models/layout");
|
|
18
|
+
const { isNode } = require("./utils");
|
|
19
19
|
/**
|
|
20
20
|
*
|
|
21
21
|
* @param {string} url
|
|
@@ -30,7 +30,7 @@ const { jsexprToWhere, freeVariables } = require("./models/expression");
|
|
|
30
30
|
* @param {string} [link_textcol]
|
|
31
31
|
* @returns {button|a}
|
|
32
32
|
*/
|
|
33
|
-
const link_view = (url0, label, popup, link_style = "", link_size = "", link_icon = "", textStyle = "", link_bgcol, link_bordercol, link_textcol, extraClass, extraState) => {
|
|
33
|
+
const link_view = (url0, label, popup, link_style = "", link_size = "", link_icon = "", textStyle = "", link_bgcol, link_bordercol, link_textcol, extraClass, extraState, link_target_blank) => {
|
|
34
34
|
let style = link_style === "btn btn-custom-color"
|
|
35
35
|
? `background-color: ${link_bgcol || "#000000"};border-color: ${link_bordercol || "#000000"}; color: ${link_textcol || "#000000"}`
|
|
36
36
|
: null;
|
|
@@ -51,7 +51,7 @@ const link_view = (url0, label, popup, link_style = "", link_size = "", link_ico
|
|
|
51
51
|
extraClass,
|
|
52
52
|
],
|
|
53
53
|
type: "button",
|
|
54
|
-
onClick: `ajax_modal('${url}')`,
|
|
54
|
+
onClick: isNode() ? `ajax_modal('${url}')` : `mobile_modal('${url}')`,
|
|
55
55
|
style,
|
|
56
56
|
}, link_icon ? i({ class: link_icon }) + " " : "", label);
|
|
57
57
|
}
|
|
@@ -60,6 +60,7 @@ const link_view = (url0, label, popup, link_style = "", link_size = "", link_ico
|
|
|
60
60
|
href: url,
|
|
61
61
|
class: [textStyle, link_style, link_size, extraClass],
|
|
62
62
|
style,
|
|
63
|
+
target: link_target_blank ? "_blank" : undefined,
|
|
63
64
|
}, link_icon ? i({ class: link_icon }) + " " : "", text(label));
|
|
64
65
|
};
|
|
65
66
|
/**
|
|
@@ -67,30 +68,30 @@ const link_view = (url0, label, popup, link_style = "", link_size = "", link_ico
|
|
|
67
68
|
* @param {object} [state]
|
|
68
69
|
* @returns {string}
|
|
69
70
|
*/
|
|
70
|
-
const stateToQueryString =
|
|
71
|
+
const stateToQueryString = (state) => {
|
|
71
72
|
if (!state || Object.keys(state).length === 0)
|
|
72
73
|
return "";
|
|
73
74
|
return ("?" +
|
|
74
75
|
Object.entries(state)
|
|
75
|
-
.map(([k, v]) => k === "id"
|
|
76
|
-
? null
|
|
77
|
-
: `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)
|
|
76
|
+
.map(([k, v]) => k === "id" ? null : `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)
|
|
78
77
|
.filter((s) => !!s)
|
|
79
78
|
.join("&"));
|
|
80
|
-
}
|
|
79
|
+
};
|
|
81
80
|
/**
|
|
82
81
|
* @function
|
|
83
82
|
* @param {Field[]} fields
|
|
84
83
|
* @param {boolean}
|
|
85
84
|
* @returns {object}
|
|
86
85
|
*/
|
|
87
|
-
const calcfldViewOptions =
|
|
86
|
+
const calcfldViewOptions = (fields, mode) => {
|
|
88
87
|
const isEdit = mode === "edit";
|
|
89
88
|
const isFilter = mode === "filter";
|
|
90
89
|
let fvs = {};
|
|
91
90
|
const handlesTextStyle = {};
|
|
91
|
+
const blockDisplay = {};
|
|
92
92
|
fields.forEach((f) => {
|
|
93
93
|
handlesTextStyle[f.name] = [];
|
|
94
|
+
blockDisplay[f.name] = [];
|
|
94
95
|
if (f.type === "File") {
|
|
95
96
|
if (!isEdit && !isFilter)
|
|
96
97
|
fvs[f.name] = Object.keys(getState().fileviews);
|
|
@@ -135,6 +136,8 @@ const calcfldViewOptions = contract(is.fun([is.array(is.class("Field")), is.str]
|
|
|
135
136
|
Object.entries(getState().keyFieldviews).forEach(([k, v]) => {
|
|
136
137
|
if (v && v.handlesTextStyle)
|
|
137
138
|
handlesTextStyle[f.name].push(k);
|
|
139
|
+
if (v && v.blockDisplay)
|
|
140
|
+
blockDisplay[f.name].push(k);
|
|
138
141
|
});
|
|
139
142
|
}
|
|
140
143
|
else if (f.type && f.type.fieldviews) {
|
|
@@ -158,19 +161,21 @@ const calcfldViewOptions = contract(is.fun([is.array(is.class("Field")), is.str]
|
|
|
158
161
|
fvs[f.name] = tfvs_ordered.map(([k, fv]) => {
|
|
159
162
|
if (fv && fv.handlesTextStyle)
|
|
160
163
|
handlesTextStyle[f.name].push(k);
|
|
164
|
+
if (fv && fv.blockDisplay)
|
|
165
|
+
blockDisplay[f.name].push(k);
|
|
161
166
|
return k;
|
|
162
167
|
});
|
|
163
168
|
}
|
|
164
169
|
});
|
|
165
|
-
return { field_view_options: fvs, handlesTextStyle };
|
|
166
|
-
}
|
|
170
|
+
return { field_view_options: fvs, handlesTextStyle, blockDisplay };
|
|
171
|
+
};
|
|
167
172
|
/**
|
|
168
173
|
* @function
|
|
169
174
|
* @param {Field[]} fields
|
|
170
175
|
* @param {boolean}
|
|
171
176
|
* @returns {Promise<object>}
|
|
172
177
|
*/
|
|
173
|
-
const calcfldViewConfig =
|
|
178
|
+
const calcfldViewConfig = async (fields, isEdit, nrecurse = 2) => {
|
|
174
179
|
const fieldViewConfigForms = {};
|
|
175
180
|
for (const f of fields) {
|
|
176
181
|
f.fill_table();
|
|
@@ -195,7 +200,7 @@ const calcfldViewConfig = contract(is.fun([is.array(is.class("Field")), is.bool]
|
|
|
195
200
|
}
|
|
196
201
|
}
|
|
197
202
|
return fieldViewConfigForms;
|
|
198
|
-
}
|
|
203
|
+
};
|
|
199
204
|
/**
|
|
200
205
|
* @function
|
|
201
206
|
* @param {Table|object} table
|
|
@@ -203,7 +208,7 @@ const calcfldViewConfig = contract(is.fun([is.array(is.class("Field")), is.bool]
|
|
|
203
208
|
* @param {boolean}
|
|
204
209
|
* @returns {Promise<object[]>}
|
|
205
210
|
*/
|
|
206
|
-
const get_link_view_opts =
|
|
211
|
+
const get_link_view_opts = async (table, viewname) => {
|
|
207
212
|
const own_link_views = await View.find_possible_links_to_table(table);
|
|
208
213
|
const link_view_opts = own_link_views
|
|
209
214
|
.filter((v) => v.name !== viewname)
|
|
@@ -211,22 +216,21 @@ const get_link_view_opts = contract(is.fun([is_tablely, is.str], is.promise(is.a
|
|
|
211
216
|
label: `${v.name} [${v.viewtemplate} ${table.name}]`,
|
|
212
217
|
name: `Own:${v.name}`,
|
|
213
218
|
}));
|
|
214
|
-
const
|
|
219
|
+
const link_view_opts_push = (o) => {
|
|
220
|
+
if (!link_view_opts.map((v) => v.name).includes(o.name))
|
|
221
|
+
link_view_opts.push(o);
|
|
222
|
+
};
|
|
215
223
|
const child_views = await get_child_views(table, viewname);
|
|
216
224
|
for (const { relation, related_table, through, throughTable, views, } of child_views) {
|
|
217
225
|
for (const view of views) {
|
|
218
226
|
if (through && throughTable) {
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
link_view_opts.push({
|
|
222
|
-
name: `ChildList:${view.name}.${related_table.name}.${relation.name}.${throughTable.name}.${through.name}`,
|
|
227
|
+
link_view_opts_push({
|
|
228
|
+
name: `ChildList:${view.name}.${throughTable.name}.${through.name}.${related_table.name}.${relation.name}`,
|
|
223
229
|
label: `${view.name} [${view.viewtemplate} ${related_table.name}.${relation.name}.${through.name}]`,
|
|
224
230
|
});
|
|
225
231
|
}
|
|
226
232
|
else {
|
|
227
|
-
|
|
228
|
-
link_view_names.add(name);
|
|
229
|
-
link_view_opts.push({
|
|
233
|
+
link_view_opts_push({
|
|
230
234
|
name: `ChildList:${view.name}.${related_table.name}.${relation.name}`,
|
|
231
235
|
label: `${view.name} [${view.viewtemplate} ${related_table.name}.${relation.name}]`,
|
|
232
236
|
});
|
|
@@ -236,7 +240,7 @@ const get_link_view_opts = contract(is.fun([is_tablely, is.str], is.promise(is.a
|
|
|
236
240
|
const parent_views = await get_parent_views(table, viewname);
|
|
237
241
|
for (const { relation, related_table, views } of parent_views) {
|
|
238
242
|
for (const view of views) {
|
|
239
|
-
|
|
243
|
+
link_view_opts_push({
|
|
240
244
|
name: `ParentShow:${view.name}.${related_table.name}.${relation.name}`,
|
|
241
245
|
label: `${view.name} [${view.viewtemplate} ${relation.name}.${related_table.name}]`,
|
|
242
246
|
});
|
|
@@ -245,23 +249,21 @@ const get_link_view_opts = contract(is.fun([is_tablely, is.str], is.promise(is.a
|
|
|
245
249
|
const onetoone_views = await get_onetoone_views(table, viewname);
|
|
246
250
|
for (const { relation, related_table, views } of onetoone_views) {
|
|
247
251
|
for (const view of views) {
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
label: `${view.name} [${view.viewtemplate} ${related_table.name}.${relation.label}]`,
|
|
253
|
-
});
|
|
252
|
+
link_view_opts_push({
|
|
253
|
+
name: `OneToOneShow:${view.name}.${related_table.name}.${relation.name}`,
|
|
254
|
+
label: `${view.name} [${view.viewtemplate} ${related_table.name}.${relation.label}]`,
|
|
255
|
+
});
|
|
254
256
|
}
|
|
255
257
|
}
|
|
256
258
|
const independent_views = await View.find_all_views_where(({ state_fields }) => !state_fields.some((sf) => sf.required));
|
|
257
259
|
independent_views.forEach((view) => {
|
|
258
|
-
|
|
260
|
+
link_view_opts_push({
|
|
259
261
|
label: `${view.name} [${view.viewtemplate}]`,
|
|
260
262
|
name: `Independent:${view.name}`,
|
|
261
263
|
});
|
|
262
264
|
});
|
|
263
265
|
return link_view_opts;
|
|
264
|
-
}
|
|
266
|
+
};
|
|
265
267
|
/**
|
|
266
268
|
* Get Action configuration fields
|
|
267
269
|
* @param {object} action
|
|
@@ -278,7 +280,7 @@ const getActionConfigFields = async (action, table) => typeof action.configField
|
|
|
278
280
|
* @param {object} req
|
|
279
281
|
* @returns {Promise<object[]>}
|
|
280
282
|
*/
|
|
281
|
-
const field_picker_fields =
|
|
283
|
+
const field_picker_fields = async ({ table, viewname, req }) => {
|
|
282
284
|
const __ = (...s) => (req ? req.__(...s) : s.join(""));
|
|
283
285
|
const fields = await table.getFields();
|
|
284
286
|
for (const field of fields) {
|
|
@@ -625,7 +627,7 @@ const field_picker_fields = contract(is.fun(is.obj({ table: is_tablely, viewname
|
|
|
625
627
|
label: __("Open in new tab"),
|
|
626
628
|
type: "Bool",
|
|
627
629
|
required: false,
|
|
628
|
-
showIf: { type: "Link" },
|
|
630
|
+
showIf: { type: ["ViewLink", "Link"] },
|
|
629
631
|
},
|
|
630
632
|
{
|
|
631
633
|
name: "in_modal",
|
|
@@ -697,7 +699,7 @@ const field_picker_fields = contract(is.fun(is.obj({ table: is_tablely, viewname
|
|
|
697
699
|
},
|
|
698
700
|
},
|
|
699
701
|
];
|
|
700
|
-
}
|
|
702
|
+
};
|
|
701
703
|
/**
|
|
702
704
|
* get_child_views Contract
|
|
703
705
|
* @function
|
|
@@ -705,11 +707,7 @@ const field_picker_fields = contract(is.fun(is.obj({ table: is_tablely, viewname
|
|
|
705
707
|
* @param {string} viewname
|
|
706
708
|
* @returns {Promise<object[]>}
|
|
707
709
|
*/
|
|
708
|
-
const get_child_views =
|
|
709
|
-
relation: is.class("Field"),
|
|
710
|
-
related_table: is.class("Table"),
|
|
711
|
-
views: is.array(is.class("View")),
|
|
712
|
-
})))), async (table, viewname, nrecurse = 2) => {
|
|
710
|
+
const get_child_views = async (table, viewname, nrecurse = 2) => {
|
|
713
711
|
const rels = await Field.find({ reftable_name: table.name });
|
|
714
712
|
const possibleThroughTables = new Set();
|
|
715
713
|
var child_views = [];
|
|
@@ -736,7 +734,7 @@ const get_child_views = contract(is.fun([is_tablely, is.maybe(is.str)], is.promi
|
|
|
736
734
|
});
|
|
737
735
|
}
|
|
738
736
|
return child_views;
|
|
739
|
-
}
|
|
737
|
+
};
|
|
740
738
|
/**
|
|
741
739
|
* get_parent_views Contract
|
|
742
740
|
* @function
|
|
@@ -744,35 +742,26 @@ const get_child_views = contract(is.fun([is_tablely, is.maybe(is.str)], is.promi
|
|
|
744
742
|
* @param {string} viewname
|
|
745
743
|
* @returns {Promise<object[]>}
|
|
746
744
|
*/
|
|
747
|
-
const get_parent_views =
|
|
748
|
-
relation: is.class("Field"),
|
|
749
|
-
related_table: is.class("Table"),
|
|
750
|
-
views: is.array(is.class("View")),
|
|
751
|
-
})))), async (table, viewname) => {
|
|
745
|
+
const get_parent_views = async (table, viewname) => {
|
|
752
746
|
var parent_views = [];
|
|
753
747
|
const parentrels = (await table.getFields()).filter((f) => f.is_fkey && f.type !== "File");
|
|
754
748
|
for (const relation of parentrels) {
|
|
755
749
|
const related_table = await Table.findOne({
|
|
756
750
|
name: relation.reftable_name,
|
|
757
751
|
});
|
|
758
|
-
const views = await View.find_table_views_where(related_table, ({ state_fields, viewrow }) => viewrow.name !== viewname &&
|
|
759
|
-
state_fields.some((sf) => sf.name === "id"));
|
|
752
|
+
const views = await View.find_table_views_where(related_table, ({ state_fields, viewrow }) => viewrow.name !== viewname && state_fields.some((sf) => sf.name === "id"));
|
|
760
753
|
parent_views.push({ relation, related_table, views });
|
|
761
754
|
}
|
|
762
755
|
return parent_views;
|
|
763
|
-
}
|
|
756
|
+
};
|
|
764
757
|
/**
|
|
765
758
|
* get_onetoone_views Contract
|
|
766
759
|
* @function
|
|
767
|
-
* @param {Table
|
|
760
|
+
* @param {Table} table
|
|
768
761
|
* @param {string} viewname
|
|
769
762
|
* @returns {Promise<object[]>}
|
|
770
763
|
*/
|
|
771
|
-
const get_onetoone_views =
|
|
772
|
-
relation: is.class("Field"),
|
|
773
|
-
related_table: is.class("Table"),
|
|
774
|
-
views: is.array(is.class("View")),
|
|
775
|
-
})))), async (table, viewname) => {
|
|
764
|
+
const get_onetoone_views = async (table, viewname) => {
|
|
776
765
|
const rels = await Field.find({
|
|
777
766
|
reftable_name: table.name,
|
|
778
767
|
is_unique: true,
|
|
@@ -780,12 +769,11 @@ const get_onetoone_views = contract(is.fun([is_tablely, is.str], is.promise(is.a
|
|
|
780
769
|
var child_views = [];
|
|
781
770
|
for (const relation of rels) {
|
|
782
771
|
const related_table = await Table.findOne({ id: relation.table_id });
|
|
783
|
-
const views = await View.find_table_views_where(related_table.id, ({ state_fields, viewrow }) => viewrow.name !== viewname &&
|
|
784
|
-
state_fields.some((sf) => sf.name === "id"));
|
|
772
|
+
const views = await View.find_table_views_where(related_table.id, ({ state_fields, viewrow }) => viewrow.name !== viewname && state_fields.some((sf) => sf.name === "id"));
|
|
785
773
|
child_views.push({ relation, related_table, views });
|
|
786
774
|
}
|
|
787
775
|
return child_views;
|
|
788
|
-
}
|
|
776
|
+
};
|
|
789
777
|
/**
|
|
790
778
|
* picked_fields_to_query Contract
|
|
791
779
|
* @function
|
|
@@ -794,11 +782,10 @@ const get_onetoone_views = contract(is.fun([is_tablely, is.str], is.promise(is.a
|
|
|
794
782
|
* @throws {InvalidConfiguration}
|
|
795
783
|
* @returns {object}
|
|
796
784
|
*/
|
|
797
|
-
const picked_fields_to_query =
|
|
785
|
+
const picked_fields_to_query = (columns, fields, layout) => {
|
|
798
786
|
var joinFields = {};
|
|
799
787
|
var aggregations = {};
|
|
800
788
|
let freeVars = new Set(); // for join fields
|
|
801
|
-
const joinFieldNames = new Set(fields.filter((f) => f.is_fkey).map((f) => f.name));
|
|
802
789
|
(columns || []).forEach((column) => {
|
|
803
790
|
if (column.type === "JoinField") {
|
|
804
791
|
if (column.join_field && column.join_field.split) {
|
|
@@ -844,9 +831,11 @@ const picked_fields_to_query = contract(is.fun([is.array(is_column), is.array(is
|
|
|
844
831
|
}
|
|
845
832
|
else if (column.type === "ViewLink") {
|
|
846
833
|
if (column.view_label_formula)
|
|
834
|
+
freeVars = new Set([...freeVars, ...freeVariables(column.view_label)]);
|
|
835
|
+
if (column.extra_state_fml)
|
|
847
836
|
freeVars = new Set([
|
|
848
837
|
...freeVars,
|
|
849
|
-
...freeVariables(column.
|
|
838
|
+
...freeVariables(column.extra_state_fml),
|
|
850
839
|
]);
|
|
851
840
|
if (column.view && column.view.split) {
|
|
852
841
|
const [vtype, vrest] = column.view.split(":");
|
|
@@ -888,15 +877,28 @@ const picked_fields_to_query = contract(is.fun([is.array(is_column), is.array(is
|
|
|
888
877
|
freeVars = new Set([...freeVars, ...freeVariables(column.link_url)]);
|
|
889
878
|
}
|
|
890
879
|
else if (column.type === "Action" && column.action_label_formula) {
|
|
891
|
-
freeVars = new Set([
|
|
892
|
-
...freeVars,
|
|
893
|
-
...freeVariables(column.action_label),
|
|
894
|
-
]);
|
|
880
|
+
freeVars = new Set([...freeVars, ...freeVariables(column.action_label)]);
|
|
895
881
|
}
|
|
896
882
|
});
|
|
883
|
+
if (layout) {
|
|
884
|
+
traverse(layout, {
|
|
885
|
+
view(v) {
|
|
886
|
+
if (v.extra_state_fml)
|
|
887
|
+
freeVars = new Set([
|
|
888
|
+
...freeVars,
|
|
889
|
+
...freeVariables(v.extra_state_fml),
|
|
890
|
+
]);
|
|
891
|
+
},
|
|
892
|
+
});
|
|
893
|
+
}
|
|
894
|
+
add_free_variables_to_joinfields(freeVars, joinFields, fields);
|
|
895
|
+
return { joinFields, aggregations };
|
|
896
|
+
};
|
|
897
|
+
const add_free_variables_to_joinfields = (freeVars, joinFields, fields) => {
|
|
898
|
+
const joinFieldNames = new Set(fields.filter((f) => f.is_fkey).map((f) => f.name));
|
|
897
899
|
[...freeVars]
|
|
898
900
|
.filter((v) => v.includes("."))
|
|
899
|
-
.
|
|
901
|
+
.forEach((v) => {
|
|
900
902
|
const kpath = v.split(".");
|
|
901
903
|
if (joinFieldNames.has(kpath[0]))
|
|
902
904
|
if (kpath.length === 2) {
|
|
@@ -926,8 +928,7 @@ const picked_fields_to_query = contract(is.fun([is.array(is_column), is.array(is
|
|
|
926
928
|
};
|
|
927
929
|
}
|
|
928
930
|
});
|
|
929
|
-
|
|
930
|
-
});
|
|
931
|
+
};
|
|
931
932
|
/**
|
|
932
933
|
* @function
|
|
933
934
|
* @param {object}
|
|
@@ -935,7 +936,7 @@ const picked_fields_to_query = contract(is.fun([is.array(is_column), is.array(is
|
|
|
935
936
|
* @param {string} - missing in contract
|
|
936
937
|
* @returns {object}
|
|
937
938
|
*/
|
|
938
|
-
const stateFieldsToQuery =
|
|
939
|
+
const stateFieldsToQuery = ({ state, fields, prefix = "" }) => {
|
|
939
940
|
let q = {};
|
|
940
941
|
const stateKeys = Object.keys(state);
|
|
941
942
|
if (state._sortby) {
|
|
@@ -960,7 +961,7 @@ const stateFieldsToQuery = contract(is.fun(is.obj(), is.obj()), ({ state, fields
|
|
|
960
961
|
q.orderBy = { distance: { lat, long, latField, longField } };
|
|
961
962
|
}
|
|
962
963
|
return q;
|
|
963
|
-
}
|
|
964
|
+
};
|
|
964
965
|
/**
|
|
965
966
|
*
|
|
966
967
|
* @param {object} container
|
|
@@ -982,14 +983,15 @@ const addOrCreateList = (container, key, x) => {
|
|
|
982
983
|
* @param {boolean} [opts.approximate = true]
|
|
983
984
|
* @returns {object}
|
|
984
985
|
*/
|
|
985
|
-
const stateFieldsToWhere =
|
|
986
|
-
fields: is.array(is.class("Field")),
|
|
987
|
-
approximate: is.maybe(is.bool),
|
|
988
|
-
}), is.obj()), ({ fields, state, approximate = true }) => {
|
|
986
|
+
const stateFieldsToWhere = ({ fields, state, approximate = true }) => {
|
|
989
987
|
var qstate = {};
|
|
990
|
-
Object.entries(state).forEach(([k, v]) => {
|
|
988
|
+
Object.entries(state || {}).forEach(([k, v]) => {
|
|
991
989
|
if (k === "_fts") {
|
|
992
|
-
qstate[k] = {
|
|
990
|
+
qstate[k] = {
|
|
991
|
+
searchTerm: v.replace(/\0/g, ""),
|
|
992
|
+
fields,
|
|
993
|
+
schema: db.getTenantSchema(),
|
|
994
|
+
};
|
|
993
995
|
return;
|
|
994
996
|
}
|
|
995
997
|
const field = fields.find((fld) => fld.name == k);
|
|
@@ -1029,12 +1031,72 @@ const stateFieldsToWhere = contract(is.fun(is.obj({
|
|
|
1029
1031
|
else if (field && field.type.name === "Bool" && state[k] === "?") {
|
|
1030
1032
|
// omit
|
|
1031
1033
|
}
|
|
1034
|
+
else if (typeof v === "object" && v && field?.type?.name === "JSON") {
|
|
1035
|
+
let json = {};
|
|
1036
|
+
if (Object.values(v).length === 1 && Object.values(v)[0] === "")
|
|
1037
|
+
return;
|
|
1038
|
+
Object.entries(v).forEach(([kj, vj]) => {
|
|
1039
|
+
if (vj === "")
|
|
1040
|
+
return;
|
|
1041
|
+
if (kj.endsWith("__lte")) {
|
|
1042
|
+
json[kj.replace("__lte", "")] = {
|
|
1043
|
+
lte: +vj,
|
|
1044
|
+
...(json[kj.replace("__lte", "")] || {}),
|
|
1045
|
+
};
|
|
1046
|
+
}
|
|
1047
|
+
else if (kj.endsWith("__gte")) {
|
|
1048
|
+
json[kj.replace("__gte", "")] = {
|
|
1049
|
+
gte: +vj,
|
|
1050
|
+
...(json[kj.replace("__gte", "")] || {}),
|
|
1051
|
+
};
|
|
1052
|
+
}
|
|
1053
|
+
else {
|
|
1054
|
+
json[kj] = vj;
|
|
1055
|
+
if (field.attributes?.hasSchema) {
|
|
1056
|
+
const s = field.attributes.schema.find((f) => f.key === Object.keys(v)[0]);
|
|
1057
|
+
if (s?.type === "String") {
|
|
1058
|
+
json[kj] = { ilike: vj };
|
|
1059
|
+
}
|
|
1060
|
+
}
|
|
1061
|
+
}
|
|
1062
|
+
});
|
|
1063
|
+
qstate[k] = [
|
|
1064
|
+
...(qstate[k] ? [qstate[k]] : []),
|
|
1065
|
+
{
|
|
1066
|
+
json,
|
|
1067
|
+
},
|
|
1068
|
+
];
|
|
1069
|
+
}
|
|
1032
1070
|
else if (field && field.type && field.type.read)
|
|
1033
1071
|
qstate[k] = Array.isArray(v)
|
|
1034
1072
|
? { or: v.map(field.type.read) }
|
|
1035
1073
|
: field.type.read(v);
|
|
1036
1074
|
else if (field)
|
|
1037
1075
|
qstate[k] = v;
|
|
1076
|
+
else if (k.includes("->")) {
|
|
1077
|
+
// jFieldNm.jtnm->lblField
|
|
1078
|
+
// where jFieldNm in (select id from jtnm where lblField=v)
|
|
1079
|
+
const [jFieldNm, krest] = k.split(".");
|
|
1080
|
+
const [jtNm, lblField] = krest.split("->");
|
|
1081
|
+
let where = { [db.sqlsanitize(lblField)]: v };
|
|
1082
|
+
const jTable = Table.findOne({ name: jtNm });
|
|
1083
|
+
const lblFld = (jTable.fields || []).find((f) => f.name === lblField);
|
|
1084
|
+
if (lblFld &&
|
|
1085
|
+
lblFld.type?.name === "String" &&
|
|
1086
|
+
!lblFld.attributes?.options)
|
|
1087
|
+
where = { [db.sqlsanitize(lblField)]: { ilike: v } };
|
|
1088
|
+
qstate[jFieldNm] = [
|
|
1089
|
+
...(qstate[jFieldNm] ? [qstate[jFieldNm]] : []),
|
|
1090
|
+
{
|
|
1091
|
+
// where jFieldNm in (select id from jtnm where lblField=v)
|
|
1092
|
+
inSelect: {
|
|
1093
|
+
table: `${db.getTenantSchemaPrefix()}"${db.sqlsanitize(jtNm)}"`,
|
|
1094
|
+
field: "id",
|
|
1095
|
+
where,
|
|
1096
|
+
},
|
|
1097
|
+
},
|
|
1098
|
+
];
|
|
1099
|
+
}
|
|
1038
1100
|
else if (k.includes(".")) {
|
|
1039
1101
|
const kpath = k.split(".");
|
|
1040
1102
|
if (kpath.length === 3) {
|
|
@@ -1051,17 +1113,33 @@ const stateFieldsToWhere = contract(is.fun(is.obj({
|
|
|
1051
1113
|
},
|
|
1052
1114
|
];
|
|
1053
1115
|
}
|
|
1116
|
+
else if (kpath.length === 4) {
|
|
1117
|
+
const [jtNm, jFieldNm, tblName, lblField] = kpath;
|
|
1118
|
+
qstate.id = [
|
|
1119
|
+
...(qstate.id ? [qstate.id] : []),
|
|
1120
|
+
{
|
|
1121
|
+
// where id in (select jFieldNm from jtnm where lblField=v)
|
|
1122
|
+
inSelect: {
|
|
1123
|
+
table: `${db.getTenantSchemaPrefix()}"${db.sqlsanitize(jtNm)}"`,
|
|
1124
|
+
field: db.sqlsanitize(jFieldNm),
|
|
1125
|
+
valField: "id",
|
|
1126
|
+
through: `${db.getTenantSchemaPrefix()}"${db.sqlsanitize(tblName)}"`,
|
|
1127
|
+
where: { [db.sqlsanitize(lblField)]: v },
|
|
1128
|
+
},
|
|
1129
|
+
},
|
|
1130
|
+
];
|
|
1131
|
+
}
|
|
1054
1132
|
}
|
|
1055
1133
|
});
|
|
1056
1134
|
return qstate;
|
|
1057
|
-
}
|
|
1135
|
+
};
|
|
1058
1136
|
/**
|
|
1059
1137
|
* initial_config_all_fields Contract
|
|
1060
1138
|
* @function
|
|
1061
1139
|
* @param {boolean}
|
|
1062
1140
|
* @returns {function}
|
|
1063
1141
|
*/
|
|
1064
|
-
const initial_config_all_fields =
|
|
1142
|
+
const initial_config_all_fields = (isEdit) => async ({ table_id, exttable_name }) => {
|
|
1065
1143
|
const table = await Table.findOne(table_id ? { id: table_id } : { name: exttable_name });
|
|
1066
1144
|
const fields = (await table.getFields()).filter((f) => !f.primary_key && (!isEdit || !f.calculated));
|
|
1067
1145
|
var cfg = { columns: [] };
|
|
@@ -1153,7 +1231,7 @@ const initial_config_all_fields = contract(is.fun(is.bool, is.fun(is.obj({ table
|
|
|
1153
1231
|
});
|
|
1154
1232
|
cfg.layout = { above: aboves };
|
|
1155
1233
|
return cfg;
|
|
1156
|
-
}
|
|
1234
|
+
};
|
|
1157
1235
|
/**
|
|
1158
1236
|
*
|
|
1159
1237
|
* @param {string} x
|
|
@@ -1328,7 +1406,6 @@ module.exports = {
|
|
|
1328
1406
|
initial_config_all_fields,
|
|
1329
1407
|
calcfldViewOptions,
|
|
1330
1408
|
get_link_view_opts,
|
|
1331
|
-
is_column,
|
|
1332
1409
|
readState,
|
|
1333
1410
|
readStateStrict,
|
|
1334
1411
|
stateToQueryString,
|
|
@@ -1338,5 +1415,6 @@ module.exports = {
|
|
|
1338
1415
|
strictParseInt,
|
|
1339
1416
|
run_action_column,
|
|
1340
1417
|
json_list_to_external_table,
|
|
1418
|
+
add_free_variables_to_joinfields,
|
|
1341
1419
|
};
|
|
1342
1420
|
//# sourceMappingURL=plugin-helper.js.map
|