@saltcorn/data 1.3.1-beta.8 → 1.3.1
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 +5 -5
- package/dist/base-plugin/actions.d.ts.map +1 -1
- package/dist/base-plugin/actions.js +1 -1
- package/dist/base-plugin/actions.js.map +1 -1
- package/dist/base-plugin/fieldviews.d.ts.map +1 -1
- package/dist/base-plugin/fieldviews.js.map +1 -1
- package/dist/base-plugin/fileviews.js.map +1 -1
- package/dist/base-plugin/index.d.ts +26 -24
- package/dist/base-plugin/index.d.ts.map +1 -1
- package/dist/base-plugin/types.d.ts +5 -4
- package/dist/base-plugin/types.d.ts.map +1 -1
- package/dist/base-plugin/types.js +10 -2
- package/dist/base-plugin/types.js.map +1 -1
- package/dist/base-plugin/viewtemplates/edit.d.ts +6 -4
- package/dist/base-plugin/viewtemplates/edit.d.ts.map +1 -1
- package/dist/base-plugin/viewtemplates/edit.js +70 -23
- package/dist/base-plugin/viewtemplates/edit.js.map +1 -1
- package/dist/base-plugin/viewtemplates/feed.d.ts.map +1 -1
- package/dist/base-plugin/viewtemplates/feed.js.map +1 -1
- package/dist/base-plugin/viewtemplates/filter.d.ts.map +1 -1
- package/dist/base-plugin/viewtemplates/filter.js +2 -2
- package/dist/base-plugin/viewtemplates/filter.js.map +1 -1
- package/dist/base-plugin/viewtemplates/list.d.ts +1 -1
- package/dist/base-plugin/viewtemplates/list.d.ts.map +1 -1
- package/dist/base-plugin/viewtemplates/list.js +42 -4
- package/dist/base-plugin/viewtemplates/list.js.map +1 -1
- package/dist/base-plugin/viewtemplates/listshowlist.d.ts.map +1 -1
- package/dist/base-plugin/viewtemplates/listshowlist.js.map +1 -1
- package/dist/base-plugin/viewtemplates/room.d.ts.map +1 -1
- package/dist/base-plugin/viewtemplates/room.js.map +1 -1
- package/dist/base-plugin/viewtemplates/show.d.ts.map +1 -1
- package/dist/base-plugin/viewtemplates/show.js.map +1 -1
- package/dist/base-plugin/viewtemplates/viewable_fields.d.ts +4 -4
- package/dist/base-plugin/viewtemplates/viewable_fields.d.ts.map +1 -1
- package/dist/base-plugin/viewtemplates/viewable_fields.js +75 -11
- package/dist/base-plugin/viewtemplates/viewable_fields.js.map +1 -1
- package/dist/base-plugin/viewtemplates/workflow-room.d.ts.map +1 -1
- package/dist/base-plugin/viewtemplates/workflow-room.js.map +1 -1
- package/dist/db/connect.d.ts.map +1 -1
- package/dist/db/connect.js.map +1 -1
- package/dist/db/fixtures.d.ts.map +1 -1
- package/dist/db/fixtures.js +14 -1
- package/dist/db/fixtures.js.map +1 -1
- package/dist/db/index.js.map +1 -1
- package/dist/db/reset_schema.d.ts.map +1 -1
- package/dist/db/reset_schema.js.map +1 -1
- package/dist/db/state.d.ts +13 -4
- package/dist/db/state.d.ts.map +1 -1
- package/dist/db/state.js +155 -17
- package/dist/db/state.js.map +1 -1
- package/dist/diagram/cy_generate_utils.js +2 -3
- package/dist/diagram/cy_generate_utils.js.map +1 -1
- package/dist/diagram/cy_raster.js.map +1 -1
- package/dist/diagram/node_extract_utils.js +4 -5
- package/dist/diagram/node_extract_utils.js.map +1 -1
- package/dist/diagram/nodes/table_node.js.map +1 -1
- package/dist/index.js +17 -7
- package/dist/index.js.map +1 -1
- package/dist/migrate.d.ts.map +1 -1
- package/dist/migrate.js.map +1 -1
- package/dist/migrations/202007091707.d.ts.map +1 -1
- package/dist/migrations/202007202144.d.ts.map +1 -1
- package/dist/migrations/202008031500.d.ts.map +1 -1
- package/dist/migrations/202009221105.d.ts.map +1 -1
- package/dist/migrations/202009231331.d.ts.map +1 -1
- package/dist/migrations/202010231444.d.ts.map +1 -1
- package/dist/migrations/202011021749.d.ts.map +1 -1
- package/dist/migrations/202012011203.d.ts.map +1 -1
- package/dist/migrations/202012100841.d.ts.map +1 -1
- package/dist/migrations/202012281835.d.ts.map +1 -1
- package/dist/migrations/202101061051.d.ts.map +1 -1
- package/dist/migrations/202101141128.d.ts.map +1 -1
- package/dist/migrations/202102091312.d.ts.map +1 -1
- package/dist/migrations/202102091312.js.map +1 -1
- package/dist/migrations/202102172148.d.ts.map +1 -1
- package/dist/migrations/202106102347.d.ts.map +1 -1
- package/dist/migrations/202106112120.d.ts.map +1 -1
- package/dist/migrations/202106120012.d.ts.map +1 -1
- package/dist/migrations/202106120220.d.ts.map +1 -1
- package/dist/migrations/202106121701.d.ts.map +1 -1
- package/dist/migrations/202107281619.d.ts.map +1 -1
- package/dist/migrations/202109201624.d.ts.map +1 -1
- package/dist/migrations/202207022002.d.ts.map +1 -1
- package/dist/migrations/202210051058.js.map +1 -1
- package/dist/migrations/202210101540.js.map +1 -1
- package/dist/migrations/202301130917.d.ts.map +1 -1
- package/dist/migrations/202304281224.js.map +1 -1
- package/dist/migrations/202307211459.js.map +1 -1
- package/dist/migrations/202308211648.d.ts.map +1 -1
- package/dist/migrations/202402071125.d.ts.map +1 -1
- package/dist/migrations/202501081226.d.ts.map +1 -1
- package/dist/migrations/202502131103.js.map +1 -1
- package/dist/migrations/202503071353.d.ts.map +1 -1
- package/dist/mobile-mocks/node/child_process.d.ts.map +1 -1
- package/dist/mobile-mocks/node/fs/promises.js +5 -6
- package/dist/mobile-mocks/node/fs/promises.js.map +1 -1
- package/dist/mobile-mocks/node/fs.js +3 -4
- package/dist/mobile-mocks/node/fs.js.map +1 -1
- package/dist/mobile-mocks/node/latest-version.js +1 -1
- package/dist/mobile-mocks/node/latest-version.js.map +1 -1
- package/dist/mobile-mocks/node/v8.js +2 -3
- package/dist/mobile-mocks/node/v8.js.map +1 -1
- package/dist/model-helper.d.ts +2 -2
- package/dist/model-helper.js.map +1 -1
- package/dist/models/config.d.ts.map +1 -1
- package/dist/models/config.js +28 -16
- package/dist/models/config.js.map +1 -1
- package/dist/models/crash.js +17 -7
- package/dist/models/crash.js.map +1 -1
- package/dist/models/discovery.d.ts +6 -5
- package/dist/models/discovery.d.ts.map +1 -1
- package/dist/models/discovery.js +14 -12
- package/dist/models/discovery.js.map +1 -1
- package/dist/models/email.d.ts +5 -5
- package/dist/models/email.d.ts.map +1 -1
- package/dist/models/email.js +17 -7
- package/dist/models/email.js.map +1 -1
- package/dist/models/eventlog.js.map +1 -1
- package/dist/models/expression.d.ts +8 -2
- package/dist/models/expression.d.ts.map +1 -1
- package/dist/models/expression.js +21 -20
- package/dist/models/expression.js.map +1 -1
- package/dist/models/field.d.ts.map +1 -1
- package/dist/models/field.js +5 -1
- package/dist/models/field.js.map +1 -1
- package/dist/models/fieldrepeat.js.map +1 -1
- package/dist/models/file.d.ts +0 -1
- package/dist/models/file.d.ts.map +1 -1
- package/dist/models/file.js.map +1 -1
- package/dist/models/form.js.map +1 -1
- package/dist/models/index.d.ts +26 -19
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/internal/async_json_stream.js +1 -1
- package/dist/models/internal/async_json_stream.js.map +1 -1
- package/dist/models/internal/push_message_helper.js.map +1 -1
- package/dist/models/internal/query.d.ts +21 -2
- package/dist/models/internal/query.d.ts.map +1 -1
- package/dist/models/internal/query.js +44 -1
- package/dist/models/internal/query.js.map +1 -1
- package/dist/models/internal/table_helper.d.ts.map +1 -1
- package/dist/models/internal/table_helper.js.map +1 -1
- package/dist/models/layout.d.ts +2 -2
- package/dist/models/layout.d.ts.map +1 -1
- package/dist/models/layout.js.map +1 -1
- package/dist/models/model.d.ts.map +1 -1
- package/dist/models/model.js.map +1 -1
- package/dist/models/model_instance.d.ts +0 -1
- package/dist/models/model_instance.d.ts.map +1 -1
- package/dist/models/model_instance.js +17 -7
- package/dist/models/model_instance.js.map +1 -1
- package/dist/models/notification.js.map +1 -1
- package/dist/models/page.d.ts.map +1 -1
- package/dist/models/page.js +60 -23
- package/dist/models/page.js.map +1 -1
- package/dist/models/page_group.js +17 -7
- package/dist/models/page_group.js.map +1 -1
- package/dist/models/page_group_member.js.map +1 -1
- package/dist/models/plugin.js.map +1 -1
- package/dist/models/random.d.ts.map +1 -1
- package/dist/models/random.js.map +1 -1
- package/dist/models/scheduler.d.ts +10 -3
- package/dist/models/scheduler.d.ts.map +1 -1
- package/dist/models/scheduler.js.map +1 -1
- package/dist/models/table.d.ts.map +1 -1
- package/dist/models/table.js +23 -51
- package/dist/models/table.js.map +1 -1
- package/dist/models/table_constraints.js.map +1 -1
- package/dist/models/tag.js.map +1 -1
- package/dist/models/trigger.d.ts.map +1 -1
- package/dist/models/trigger.js +23 -9
- package/dist/models/trigger.js.map +1 -1
- package/dist/models/user.js.map +1 -1
- package/dist/models/view.d.ts +5 -0
- package/dist/models/view.d.ts.map +1 -1
- package/dist/models/view.js +26 -7
- package/dist/models/view.js.map +1 -1
- package/dist/models/workflow.d.ts.map +1 -1
- package/dist/models/workflow.js +18 -7
- package/dist/models/workflow.js.map +1 -1
- package/dist/models/workflow_run.js +17 -7
- package/dist/models/workflow_run.js.map +1 -1
- package/dist/models/workflow_step.js.map +1 -1
- package/dist/plugin-helper.d.ts +10 -2
- package/dist/plugin-helper.d.ts.map +1 -1
- package/dist/plugin-helper.js +100 -6
- package/dist/plugin-helper.js.map +1 -1
- package/dist/plugin-testing.d.ts +1 -1
- package/dist/plugin-testing.d.ts.map +1 -1
- package/dist/plugin-testing.js.map +1 -1
- package/dist/standard-menu.d.ts.map +1 -1
- package/dist/standard-menu.js +12 -12
- package/dist/standard-menu.js.map +1 -1
- package/dist/tests/actions.test.js +19 -7
- package/dist/tests/actions.test.js.map +1 -1
- package/dist/tests/assertions.js +6 -7
- package/dist/tests/assertions.js.map +1 -1
- package/dist/tests/auth.test.js.map +1 -1
- package/dist/tests/auxtest.test.js +19 -1
- package/dist/tests/auxtest.test.js.map +1 -1
- package/dist/tests/calc.test.js +11 -1
- package/dist/tests/calc.test.js.map +1 -1
- package/dist/tests/common_helpers.js +7 -8
- package/dist/tests/common_helpers.js.map +1 -1
- package/dist/tests/db.test.js.map +1 -1
- package/dist/tests/discover.test.js.map +1 -1
- package/dist/tests/exact_views.test.js +185 -17
- package/dist/tests/exact_views.test.js.map +1 -1
- package/dist/tests/field.test.js +11 -9
- package/dist/tests/field.test.js.map +1 -1
- package/dist/tests/fieldviews.test.js.map +1 -1
- package/dist/tests/file.test.js.map +1 -1
- package/dist/tests/mocks.d.ts.map +1 -1
- package/dist/tests/mocks.js.map +1 -1
- package/dist/tests/page_group.test.js.map +1 -1
- package/dist/tests/remote_query_helper.d.ts.map +1 -1
- package/dist/tests/table.test.js +23 -0
- package/dist/tests/table.test.js.map +1 -1
- package/dist/tests/table_history.test.js.map +1 -1
- package/dist/tests/tag.test.js.map +1 -1
- package/dist/tests/user.test.js.map +1 -1
- package/dist/tests/view.test.js +1 -1
- package/dist/tests/view.test.js.map +1 -1
- package/dist/tests/workflow.test.js +3 -0
- package/dist/tests/workflow.test.js.map +1 -1
- package/dist/translate.d.ts.map +1 -1
- package/dist/utils.d.ts +8 -8
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +1 -1
- package/dist/utils.js.map +1 -1
- package/dist/web-mobile-commons.d.ts +1 -1
- package/dist/web-mobile-commons.d.ts.map +1 -1
- package/dist/web-mobile-commons.js +18 -2
- package/dist/web-mobile-commons.js.map +1 -1
- package/package.json +11 -11
|
@@ -31,7 +31,7 @@ export function run(table_id: number, viewname: string, cfg: any, state: string,
|
|
|
31
31
|
* @param {object} extra
|
|
32
32
|
* @returns {Promise<Form[]>}
|
|
33
33
|
*/
|
|
34
|
-
export function runMany(table_id: number, viewname: string, { columns, layout, auto_save, split_paste, confirm_leave }: {
|
|
34
|
+
export function runMany(table_id: number, viewname: string, { columns, layout, auto_save, split_paste, confirm_leave, enable_realtime, update_events, }: {
|
|
35
35
|
columns: any;
|
|
36
36
|
layout: any;
|
|
37
37
|
}, state: State, extra: object, { editManyQuery, getRowQuery, optionsQuery }: {
|
|
@@ -110,8 +110,9 @@ export function authorise_post({ body, table_id, req }: {
|
|
|
110
110
|
}, { authorizePostQuery }: {
|
|
111
111
|
authorizePostQuery: any;
|
|
112
112
|
}): Promise<boolean>;
|
|
113
|
-
export function virtual_triggers(table_id: any, viewname: any, { enable_realtime }: {
|
|
113
|
+
export function virtual_triggers(table_id: any, viewname: any, { enable_realtime, update_events }: {
|
|
114
114
|
enable_realtime: any;
|
|
115
|
+
update_events: any;
|
|
115
116
|
}): {
|
|
116
117
|
when_trigger: string;
|
|
117
118
|
table_id: any;
|
|
@@ -172,7 +173,7 @@ export declare let name: string;
|
|
|
172
173
|
export declare let description: string;
|
|
173
174
|
export declare function authorise_get({ query, table_id, req }: {
|
|
174
175
|
query: object;
|
|
175
|
-
rest: any;
|
|
176
|
+
rest: any[];
|
|
176
177
|
}, { authorizeGetQuery }: {
|
|
177
178
|
authorizeGetQuery: any;
|
|
178
179
|
}): Promise<boolean>;
|
|
@@ -184,7 +185,7 @@ export declare function authorise_get({ query, table_id, req }: {
|
|
|
184
185
|
export declare function getStringsForI18n({ layout }: {
|
|
185
186
|
layout: Layout;
|
|
186
187
|
}): string[];
|
|
187
|
-
export declare function queries({ table_id, name, configuration: { columns, default_state, layout, auto_save, split_paste, destination_type, fixed, confirm_leave, auto_create, delete_unchanged_auto_create, enable_realtime, }, req, res, }: {
|
|
188
|
+
export declare function queries({ table_id, name, configuration: { columns, default_state, layout, auto_save, split_paste, destination_type, fixed, confirm_leave, auto_create, delete_unchanged_auto_create, enable_realtime, update_events, }, req, res, }: {
|
|
188
189
|
table_id: any;
|
|
189
190
|
name: any;
|
|
190
191
|
configuration: {
|
|
@@ -199,6 +200,7 @@ export declare function queries({ table_id, name, configuration: { columns, defa
|
|
|
199
200
|
auto_create: any;
|
|
200
201
|
delete_unchanged_auto_create: any;
|
|
201
202
|
enable_realtime: any;
|
|
203
|
+
update_events: any;
|
|
202
204
|
};
|
|
203
205
|
req: any;
|
|
204
206
|
res: any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../../base-plugin/viewtemplates/edit.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../../base-plugin/viewtemplates/edit.js"],"names":[],"mappings":"AA+FA;;;GAGG;AAEH,4CAJW,MAAM,GACJ,QAAQ,CA4YjB;AA+CJ;;;;;;;;;;;GAWG;AACH,8BAXW,MAAM,YACN,MAAM,mBAIN,MAAM,4CAEd;IAAwB,GAAG,EAAnB,MAAM;IACU,GAAG,EAAnB,MAAM;CACd;;IAAU,OAAO,CAAC,IAAI,CAAC,CAYzB;AAED;;;;;;;;;GASG;AACH,kCATW,MAAM,YACN,MAAM,+FAEd;IAAgB,OAAO,EAAf,GAAC;IACO,MAAM,EAAd,GAAC;CACT,SAAQ,KAAK,SACL,MAAM;;;;IACJ,OAAO,CAAC,IAAI,EAAE,CAAC,CAoD3B;AAwsBD;;;;;;;;;;;;;;;;GAgBG;AACH,kCAhBW,MAAM,YACN,MAAM,0JAEd;IAA0B,OAAO,EAAzB,MAAM,EAAE;IACQ,MAAM,EAAtB,MAAM;IACU,KAAK,EAArB,MAAM;IACW,cAAc,EAA/B,OAAO;IACW,oBAAoB,EAAtC,MAAM,EAAE;CAChB,SAAQ,MAAM,QACN,GAAC,0BAET;IAAwB,GAAG,EAAnB,MAAM;IACU,GAAG,EAAnB,MAAM;IACU,QAAQ,EAAxB,MAAM;CACd;;;;;;;;iBAAU,OAAO,CAAC,IAAI,CAAC,CAmUzB;AA0FD,mKA6BC;AAGD,sHA6BC;AAlzCD;;;;;;GAMG;AACH,2CANW,GAAC,YACD,GAAC,eAET;IAAgB,OAAO,EAAf,GAAC;CACT,GAAU,OAAO,CAAC,MAAM,EAAE,CAAC,CAQ7B;AA6BD,uBAAuB;AACvB,sCAAuD;AA8uDvD;;;;;;iBAwGC;AA1pBD;;;;;;GAMG;AACH,wDALG;IAAqB,IAAI,EAAjB,MAAM;IACO,QAAQ,EAArB,MAAM;IACO,GAAG,EAAhB,MAAM;CACd;;IAAU,OAAO,CAAC,OAAO,CAAC,CAO5B;AAgpBD;;;;;;;;;;IAmEC;;;;AAlpBD;;;;;;;;;;;GAWG;AACH,sCAXW,MAAM,YACN,GAAC,uBAET;IAAuB,OAAO,EAAtB,MAAM,EAAE;IACA,MAAM,EAAd,GAAC;CACT,QAAQ,GAAC,gBAET;IAAwB,GAAG,EAAnB,MAAM;IACK,GAAG,EAAd,GAAC;CACT;;IAAU,OAAO,CAAC,MAAM,CAAC,CAe3B;AAED;;;;;;;;;;;;;;;;;;;;;;kBA0GC;;yBAghBY,MAAM;gCAEN,MAAM;AAmBF,gEAJZ;IAAqB,KAAK,EAAlB,MAAM;IACK,IAAI,EAAZ,GAAC,EAAA;CACZ;;IAAU,OAAO,CAAC,OAAO,CAAC,CAI5B;AACD;;;;GAIG;AACH,sDAHG;IAAqB,MAAM,EAAnB,MAAM;CACd,GAAU,MAAM,EAAE,CAIpB;AACQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqcP;;;;;AAEF,yGAkBC;AACY;;;GA2DZ;AACiB,6HAEjB"}
|
|
@@ -23,7 +23,7 @@ const { get_expression_function, expressionChecker, eval_expression, freeVariabl
|
|
|
23
23
|
const { InvalidConfiguration, isNode, isWeb, isTest, mergeIntoWhere, dollarizeObject, getSessionId, interpolate, asyncMap, removeEmptyStrings, } = require("../../utils");
|
|
24
24
|
const Library = require("../../models/library");
|
|
25
25
|
const { check_view_columns } = require("../../plugin-testing");
|
|
26
|
-
const { initial_config_all_fields, calcfldViewOptions, calcfldViewConfig, get_parent_views, picked_fields_to_query, stateFieldsToWhere, stateFieldsToQuery, getActionConfigFields, run_action_column, add_free_variables_to_joinfields, readState, stateToQueryString, pathToState, displayType, } = require("../../plugin-helper");
|
|
26
|
+
const { initial_config_all_fields, calcfldViewOptions, calcfldViewConfig, get_parent_views, picked_fields_to_query, stateFieldsToWhere, stateFieldsToQuery, getActionConfigFields, run_action_column, add_free_variables_to_joinfields, readState, stateToQueryString, pathToState, displayType, runCollabEvents, } = require("../../plugin-helper");
|
|
27
27
|
const { splitUniques, getForm, fill_presets, parse_view_select, get_view_link_query, objToQueryString, action_url, action_link, view_linker, edit_build_in_actions, } = require("./viewable_fields");
|
|
28
28
|
const { traverse, getStringsForI18n, translateLayout, traverseSync, splitLayoutContainerFields, findLayoutBranchWith, } = require("../../models/layout");
|
|
29
29
|
const { extractFromLayout } = require("../../diagram/node_extract_utils");
|
|
@@ -239,6 +239,7 @@ const configuration_workflow = (req) => new Workflow({
|
|
|
239
239
|
}));
|
|
240
240
|
const pages = await Page.find();
|
|
241
241
|
const groups = await PageGroup.find();
|
|
242
|
+
const triggers = Trigger.find();
|
|
242
243
|
return new Form({
|
|
243
244
|
fields: [
|
|
244
245
|
{
|
|
@@ -280,6 +281,21 @@ const configuration_workflow = (req) => new Workflow({
|
|
|
280
281
|
type: "Bool",
|
|
281
282
|
default: false,
|
|
282
283
|
},
|
|
284
|
+
new FieldRepeat({
|
|
285
|
+
name: "update_events",
|
|
286
|
+
showIf: { enable_realtime: true },
|
|
287
|
+
fields: [
|
|
288
|
+
{
|
|
289
|
+
type: "String",
|
|
290
|
+
name: "event",
|
|
291
|
+
label: req.__("Update event"),
|
|
292
|
+
sublabel: req.__("Custom event for real-time updates"),
|
|
293
|
+
attributes: {
|
|
294
|
+
options: triggers.map((t) => t.name),
|
|
295
|
+
},
|
|
296
|
+
},
|
|
297
|
+
],
|
|
298
|
+
}),
|
|
283
299
|
{
|
|
284
300
|
name: "destination_type",
|
|
285
301
|
label: "Destination type",
|
|
@@ -432,7 +448,7 @@ const run = async (table_id, viewname, cfg, state, { res, req, isPreview, hidden
|
|
|
432
448
|
* @param {object} extra
|
|
433
449
|
* @returns {Promise<Form[]>}
|
|
434
450
|
*/
|
|
435
|
-
const runMany = async (table_id, viewname, { columns, layout, auto_save, split_paste, confirm_leave }, state, extra, { editManyQuery, getRowQuery, optionsQuery }) => {
|
|
451
|
+
const runMany = async (table_id, viewname, { columns, layout, auto_save, split_paste, confirm_leave, enable_realtime, update_events, }, state, extra, { editManyQuery, getRowQuery, optionsQuery }) => {
|
|
436
452
|
let { table, fields, rows } = await editManyQuery(state, {
|
|
437
453
|
limit: extra.limit,
|
|
438
454
|
offset: extra.offset,
|
|
@@ -462,6 +478,8 @@ const runMany = async (table_id, viewname, { columns, layout, auto_save, split_p
|
|
|
462
478
|
split_paste,
|
|
463
479
|
isRemote,
|
|
464
480
|
confirm_leave,
|
|
481
|
+
enable_realtime,
|
|
482
|
+
update_events,
|
|
465
483
|
});
|
|
466
484
|
return { html, row };
|
|
467
485
|
});
|
|
@@ -476,7 +494,8 @@ const runMany = async (table_id, viewname, { columns, layout, auto_save, split_p
|
|
|
476
494
|
* @throws {InvalidConfiguration}
|
|
477
495
|
* @returns {Promise<void>}
|
|
478
496
|
*/
|
|
479
|
-
const transformForm = async ({ form, table, req, row, res, getRowQuery, viewname, optionsQuery, }) => {
|
|
497
|
+
const transformForm = async ({ form, table, req, row, res, getRowQuery, viewname, optionsQuery, state, }) => {
|
|
498
|
+
let originalState = state;
|
|
480
499
|
let pseudo_row = {};
|
|
481
500
|
if (!row) {
|
|
482
501
|
table.fields.forEach((f) => {
|
|
@@ -653,6 +672,11 @@ const transformForm = async ({ form, table, req, row, res, getRowQuery, viewname
|
|
|
653
672
|
segment.field_repeat = fr;
|
|
654
673
|
return;
|
|
655
674
|
} // end edit in edit
|
|
675
|
+
const outerState = {};
|
|
676
|
+
Object.entries(originalState || {}).forEach(([k, v]) => {
|
|
677
|
+
if (k.startsWith("_"))
|
|
678
|
+
outerState[k] = v;
|
|
679
|
+
});
|
|
656
680
|
let state = {};
|
|
657
681
|
let urlFormula;
|
|
658
682
|
let needFields = new Set();
|
|
@@ -673,7 +697,7 @@ const transformForm = async ({ form, table, req, row, res, getRowQuery, viewname
|
|
|
673
697
|
const type = relation.type;
|
|
674
698
|
if (!row && type == RelationType.OWN) {
|
|
675
699
|
segment.type = "blank";
|
|
676
|
-
urlFormula = `add_extra_state('/view/${view.name}/?${relFmlQS}', ${JSON.stringify(segment.extra_state_fml)}, row)`;
|
|
700
|
+
urlFormula = `add_extra_state('/view/${view.name}/?${relFmlQS}', ${JSON.stringify(segment.extra_state_fml)}, row, ${JSON.stringify(outerState)})`;
|
|
677
701
|
segment.contents = segment.contents = div({
|
|
678
702
|
class: "d-inline",
|
|
679
703
|
"data-sc-embed-viewname": view.name,
|
|
@@ -685,7 +709,7 @@ const transformForm = async ({ form, table, req, row, res, getRowQuery, viewname
|
|
|
685
709
|
else if (!row &&
|
|
686
710
|
type !== RelationType.INDEPENDENT &&
|
|
687
711
|
!relation.isFixedRelation()) {
|
|
688
|
-
urlFormula = `add_extra_state('/view/${view.name}/?${relFmlQS}', ${JSON.stringify(segment.extra_state_fml)}, row)`;
|
|
712
|
+
urlFormula = `add_extra_state('/view/${view.name}/?${relFmlQS}', ${JSON.stringify(segment.extra_state_fml)}, row, ${JSON.stringify(outerState)})`;
|
|
689
713
|
segment.contents = segment.contents = div({
|
|
690
714
|
class: "d-inline",
|
|
691
715
|
"data-sc-embed-viewname": view.name,
|
|
@@ -696,7 +720,7 @@ const transformForm = async ({ form, table, req, row, res, getRowQuery, viewname
|
|
|
696
720
|
}
|
|
697
721
|
const userId = req?.user?.id;
|
|
698
722
|
state = pathToState(relation, relation.isFixedRelation() ? () => userId : (k) => row[k]);
|
|
699
|
-
urlFormula = `add_extra_state('/view/${view.name}?${relFmlQS}', ${JSON.stringify(segment.extra_state_fml)}, row)`;
|
|
723
|
+
urlFormula = `add_extra_state('/view/${view.name}?${relFmlQS}', ${JSON.stringify(segment.extra_state_fml)}, row, ${JSON.stringify(outerState)})`;
|
|
700
724
|
}
|
|
701
725
|
}
|
|
702
726
|
else {
|
|
@@ -707,23 +731,23 @@ const transformForm = async ({ form, table, req, row, res, getRowQuery, viewname
|
|
|
707
731
|
switch (view_select.type) {
|
|
708
732
|
case "Own":
|
|
709
733
|
state = { id: row?.id };
|
|
710
|
-
urlFormula = `add_extra_state('/view/${view.name}/?id='+row.id, ${JSON.stringify(segment.extra_state_fml)}, row)`;
|
|
734
|
+
urlFormula = `add_extra_state('/view/${view.name}/?id='+row.id, ${JSON.stringify(segment.extra_state_fml)}, row, ${JSON.stringify(outerState)})`;
|
|
711
735
|
needFields.add("id");
|
|
712
736
|
break;
|
|
713
737
|
case "Independent":
|
|
714
738
|
state = {};
|
|
715
|
-
urlFormula = `add_extra_state('/view/${view.name}/?id='+row.id, ${JSON.stringify(segment.extra_state_fml)}, row)`;
|
|
739
|
+
urlFormula = `add_extra_state('/view/${view.name}/?id='+row.id, ${JSON.stringify(segment.extra_state_fml)}, row, ${JSON.stringify(outerState)})`;
|
|
716
740
|
needFields.add("id");
|
|
717
741
|
break;
|
|
718
742
|
case "ChildList":
|
|
719
743
|
case "OneToOneShow":
|
|
720
744
|
state = { [view_select.field_name]: row?.id };
|
|
721
|
-
urlFormula = `add_extra_state('/view/${view.name}/?${view_select.field_name}='+row.id, ${JSON.stringify(segment.extra_state_fml)}, row)`;
|
|
745
|
+
urlFormula = `add_extra_state('/view/${view.name}/?${view_select.field_name}='+row.id, ${JSON.stringify(segment.extra_state_fml)}, row, ${JSON.stringify(outerState)})`;
|
|
722
746
|
needFields.add("id");
|
|
723
747
|
break;
|
|
724
748
|
case "ParentShow":
|
|
725
749
|
state = { id: row?.[view_select.field_name] };
|
|
726
|
-
urlFormula = `add_extra_state('/view/${view.name}/?id='+row.${view_select.field_name}, ${JSON.stringify(segment.extra_state_fml)}, row)`;
|
|
750
|
+
urlFormula = `add_extra_state('/view/${view.name}/?id='+row.${view_select.field_name}, ${JSON.stringify(segment.extra_state_fml)}, row, ${JSON.stringify(outerState)})`;
|
|
727
751
|
needFields.add(view_select.field_name);
|
|
728
752
|
break;
|
|
729
753
|
}
|
|
@@ -745,7 +769,7 @@ const transformForm = async ({ form, table, req, row, res, getRowQuery, viewname
|
|
|
745
769
|
...(row || pseudo_row),
|
|
746
770
|
}, req.user, `Extra state formula for embedding view ${view.name}`)
|
|
747
771
|
: {};
|
|
748
|
-
const qs = stateToQueryString({ ...state, ...extra_state }, true);
|
|
772
|
+
const qs = stateToQueryString({ ...state, ...outerState, ...extra_state }, true);
|
|
749
773
|
segment.contents = div({
|
|
750
774
|
class: "d-inline",
|
|
751
775
|
"data-sc-embed-viewname": view.name,
|
|
@@ -753,7 +777,7 @@ const transformForm = async ({ form, table, req, row, res, getRowQuery, viewname
|
|
|
753
777
|
"data-view-source-current": `/view/${view.name}${qs}`,
|
|
754
778
|
"data-view-source-need-fields": [...needFields].join(","),
|
|
755
779
|
"data-view-source": encodeURIComponent(urlFormula),
|
|
756
|
-
}, await view.run({ ...state, ...extra_state }, { req, res }, view.isRemoteTable()));
|
|
780
|
+
}, await view.run({ ...state, ...outerState, ...extra_state }, { req, res }, view.isRemoteTable()));
|
|
757
781
|
},
|
|
758
782
|
});
|
|
759
783
|
translateLayout(form.layout, req.getLocale());
|
|
@@ -761,22 +785,33 @@ const transformForm = async ({ form, table, req, row, res, getRowQuery, viewname
|
|
|
761
785
|
form.xhrSubmit = true;
|
|
762
786
|
setDateLocales(form, req.getLocale());
|
|
763
787
|
};
|
|
764
|
-
const realTimeScript = (viewname, table_id, row) => {
|
|
788
|
+
const realTimeScript = (viewname, table_id, row, scriptId) => {
|
|
765
789
|
const view = View.findOne({ name: viewname });
|
|
766
790
|
const table = Table.findOne({ id: table_id });
|
|
767
791
|
const rowId = row[table.pk_name];
|
|
768
792
|
return `
|
|
769
793
|
const collabCfg = {
|
|
770
794
|
events: {
|
|
771
|
-
'${view.getRealTimeEventName(`UPDATE_EVENT?id=${rowId}`)}': (data) => {
|
|
795
|
+
'${view.getRealTimeEventName(`UPDATE_EVENT?id=${rowId}`)}': async (data) => {
|
|
772
796
|
console.log("Update event received for view ${viewname}", data);
|
|
797
|
+
const script = document.getElementById('${scriptId}');
|
|
798
|
+
const closestDiv = script?.closest(
|
|
799
|
+
'div[data-sc-embed-viewname="${viewname}"]'
|
|
800
|
+
);
|
|
773
801
|
if (data.updates) {
|
|
774
|
-
common_done({set_fields: data.updates, no_onchange: true},
|
|
802
|
+
if (closestDiv) await common_done({set_fields: data.updates, no_onchange: true}, closestDiv);
|
|
803
|
+
else await common_done({set_fields: data.updates, no_onchange: true}, "${viewname}");
|
|
804
|
+
}
|
|
805
|
+
if (data.actions) {
|
|
806
|
+
for (const action of data.actions) {
|
|
807
|
+
if (closestDiv) await common_done(action, closestDiv);
|
|
808
|
+
else await common_done(action, "${viewname}");
|
|
809
|
+
}
|
|
775
810
|
}
|
|
776
811
|
}
|
|
777
812
|
}
|
|
778
813
|
};
|
|
779
|
-
init_collab_room('${viewname}', collabCfg)
|
|
814
|
+
init_collab_room('${viewname}', collabCfg);`.trim();
|
|
780
815
|
};
|
|
781
816
|
/**
|
|
782
817
|
* @param {object} opts
|
|
@@ -937,12 +972,16 @@ const render = async ({ table, fields, viewname, columns, layout, row, req, stat
|
|
|
937
972
|
: `form${Math.floor(Math.random() * 16777215).toString(16)}`;
|
|
938
973
|
const identicalFieldsScript = script(domReady(`const editForm = document.getElementById('${formId}'); if (editForm) editForm.addEventListener("change", handle_identical_fields, true);`));
|
|
939
974
|
const dynamic_updates_enabled = getState().getConfig("enable_dynamic_updates", true);
|
|
975
|
+
const rndid = isTest()
|
|
976
|
+
? "test-script-id"
|
|
977
|
+
: Math.floor(Math.random() * 16777215).toString(16);
|
|
940
978
|
const realTimeCollabScript = enable_realtime && row && !(req.headers?.pjaxpageload === "true")
|
|
941
979
|
? (!dynamic_updates_enabled
|
|
942
980
|
? script({
|
|
943
981
|
src: `/static_assets/${db.connectObj.version_tag}/socket.io.min.js`,
|
|
944
982
|
})
|
|
945
|
-
: "") +
|
|
983
|
+
: "") +
|
|
984
|
+
script({ id: rndid }, domReady(realTimeScript(viewname, table.id, row, rndid)))
|
|
946
985
|
: "";
|
|
947
986
|
if (actually_auto_save) {
|
|
948
987
|
for (const field of form.fields) {
|
|
@@ -959,6 +998,7 @@ const render = async ({ table, fields, viewname, columns, layout, row, req, stat
|
|
|
959
998
|
getRowQuery,
|
|
960
999
|
viewname,
|
|
961
1000
|
optionsQuery,
|
|
1001
|
+
state,
|
|
962
1002
|
});
|
|
963
1003
|
form.id = formId;
|
|
964
1004
|
return (renderForm(form, !isRemote && req.csrfToken ? req.csrfToken() : false) +
|
|
@@ -1756,7 +1796,7 @@ const createBasicView = async ({ table, viewname, template_view, template_table,
|
|
|
1756
1796
|
cfg.split_paste = template_view.configuration.split_paste;
|
|
1757
1797
|
return cfg;
|
|
1758
1798
|
};
|
|
1759
|
-
const virtual_triggers = (table_id, viewname, { enable_realtime }) => {
|
|
1799
|
+
const virtual_triggers = (table_id, viewname, { enable_realtime, update_events }) => {
|
|
1760
1800
|
if (!enable_realtime)
|
|
1761
1801
|
return [];
|
|
1762
1802
|
const table = Table.findOne({ id: table_id });
|
|
@@ -1792,15 +1832,21 @@ const virtual_triggers = (table_id, viewname, { enable_realtime }) => {
|
|
|
1792
1832
|
}
|
|
1793
1833
|
else {
|
|
1794
1834
|
// build and emit updates
|
|
1795
|
-
const
|
|
1835
|
+
const updates = {};
|
|
1796
1836
|
for (const fieldName of changedLayoutFields) {
|
|
1797
1837
|
const newVal = row[fieldName];
|
|
1798
|
-
|
|
1838
|
+
updates[fieldName] = newVal;
|
|
1799
1839
|
}
|
|
1800
1840
|
const rowId = row[table.pk_name];
|
|
1801
|
-
|
|
1841
|
+
const actionResults = await runCollabEvents(update_events, user, {
|
|
1842
|
+
new_row: row,
|
|
1843
|
+
old_row: old_row,
|
|
1844
|
+
updates: updates,
|
|
1845
|
+
});
|
|
1846
|
+
getState().log(6, "Emitting real-time update for row", rowId, updates);
|
|
1802
1847
|
view.emitRealTimeEvent(`UPDATE_EVENT?id=${rowId}`, {
|
|
1803
|
-
updates:
|
|
1848
|
+
updates: updates,
|
|
1849
|
+
actions: actionResults,
|
|
1804
1850
|
});
|
|
1805
1851
|
}
|
|
1806
1852
|
},
|
|
@@ -1840,7 +1886,7 @@ module.exports = {
|
|
|
1840
1886
|
getStringsForI18n({ layout }) {
|
|
1841
1887
|
return getStringsForI18n(layout);
|
|
1842
1888
|
},
|
|
1843
|
-
queries: ({ table_id, name, configuration: { columns, default_state, layout, auto_save, split_paste, destination_type, fixed, confirm_leave, auto_create, delete_unchanged_auto_create, enable_realtime, }, req, res, }) => ({
|
|
1889
|
+
queries: ({ table_id, name, configuration: { columns, default_state, layout, auto_save, split_paste, destination_type, fixed, confirm_leave, auto_create, delete_unchanged_auto_create, enable_realtime, update_events, }, req, res, }) => ({
|
|
1844
1890
|
async editQuery(state, mobileReferrer, isPreview, hiddenLoginDest) {
|
|
1845
1891
|
const table = Table.findOne({ id: table_id });
|
|
1846
1892
|
const fields = table.getFields();
|
|
@@ -1922,6 +1968,7 @@ module.exports = {
|
|
|
1922
1968
|
auto_created_row,
|
|
1923
1969
|
hiddenLoginDest,
|
|
1924
1970
|
enable_realtime,
|
|
1971
|
+
update_events,
|
|
1925
1972
|
});
|
|
1926
1973
|
},
|
|
1927
1974
|
async editManyQuery(state, { limit, offset, orderBy, orderDesc, where }) {
|