@saltcorn/data 1.3.1-beta.9 → 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.
Files changed (230) hide show
  1. package/dist/base-plugin/actions.d.ts +5 -5
  2. package/dist/base-plugin/actions.d.ts.map +1 -1
  3. package/dist/base-plugin/actions.js +1 -1
  4. package/dist/base-plugin/actions.js.map +1 -1
  5. package/dist/base-plugin/fieldviews.d.ts.map +1 -1
  6. package/dist/base-plugin/fieldviews.js.map +1 -1
  7. package/dist/base-plugin/fileviews.js.map +1 -1
  8. package/dist/base-plugin/index.d.ts +26 -24
  9. package/dist/base-plugin/index.d.ts.map +1 -1
  10. package/dist/base-plugin/types.d.ts +5 -4
  11. package/dist/base-plugin/types.d.ts.map +1 -1
  12. package/dist/base-plugin/types.js +10 -2
  13. package/dist/base-plugin/types.js.map +1 -1
  14. package/dist/base-plugin/viewtemplates/edit.d.ts +6 -4
  15. package/dist/base-plugin/viewtemplates/edit.d.ts.map +1 -1
  16. package/dist/base-plugin/viewtemplates/edit.js +53 -13
  17. package/dist/base-plugin/viewtemplates/edit.js.map +1 -1
  18. package/dist/base-plugin/viewtemplates/feed.d.ts.map +1 -1
  19. package/dist/base-plugin/viewtemplates/feed.js.map +1 -1
  20. package/dist/base-plugin/viewtemplates/filter.d.ts.map +1 -1
  21. package/dist/base-plugin/viewtemplates/filter.js +2 -2
  22. package/dist/base-plugin/viewtemplates/filter.js.map +1 -1
  23. package/dist/base-plugin/viewtemplates/list.d.ts +1 -1
  24. package/dist/base-plugin/viewtemplates/list.d.ts.map +1 -1
  25. package/dist/base-plugin/viewtemplates/list.js +42 -4
  26. package/dist/base-plugin/viewtemplates/list.js.map +1 -1
  27. package/dist/base-plugin/viewtemplates/listshowlist.d.ts.map +1 -1
  28. package/dist/base-plugin/viewtemplates/listshowlist.js.map +1 -1
  29. package/dist/base-plugin/viewtemplates/room.d.ts.map +1 -1
  30. package/dist/base-plugin/viewtemplates/room.js.map +1 -1
  31. package/dist/base-plugin/viewtemplates/show.d.ts.map +1 -1
  32. package/dist/base-plugin/viewtemplates/show.js.map +1 -1
  33. package/dist/base-plugin/viewtemplates/viewable_fields.d.ts +4 -4
  34. package/dist/base-plugin/viewtemplates/viewable_fields.d.ts.map +1 -1
  35. package/dist/base-plugin/viewtemplates/viewable_fields.js +73 -9
  36. package/dist/base-plugin/viewtemplates/viewable_fields.js.map +1 -1
  37. package/dist/base-plugin/viewtemplates/workflow-room.d.ts.map +1 -1
  38. package/dist/base-plugin/viewtemplates/workflow-room.js.map +1 -1
  39. package/dist/db/connect.d.ts.map +1 -1
  40. package/dist/db/connect.js.map +1 -1
  41. package/dist/db/fixtures.d.ts.map +1 -1
  42. package/dist/db/fixtures.js +14 -1
  43. package/dist/db/fixtures.js.map +1 -1
  44. package/dist/db/index.js.map +1 -1
  45. package/dist/db/reset_schema.d.ts.map +1 -1
  46. package/dist/db/reset_schema.js.map +1 -1
  47. package/dist/db/state.d.ts +13 -4
  48. package/dist/db/state.d.ts.map +1 -1
  49. package/dist/db/state.js +155 -17
  50. package/dist/db/state.js.map +1 -1
  51. package/dist/diagram/cy_generate_utils.js +2 -3
  52. package/dist/diagram/cy_generate_utils.js.map +1 -1
  53. package/dist/diagram/cy_raster.js.map +1 -1
  54. package/dist/diagram/node_extract_utils.js +4 -5
  55. package/dist/diagram/node_extract_utils.js.map +1 -1
  56. package/dist/diagram/nodes/table_node.js.map +1 -1
  57. package/dist/index.js +17 -7
  58. package/dist/index.js.map +1 -1
  59. package/dist/migrate.d.ts.map +1 -1
  60. package/dist/migrate.js.map +1 -1
  61. package/dist/migrations/202007091707.d.ts.map +1 -1
  62. package/dist/migrations/202007202144.d.ts.map +1 -1
  63. package/dist/migrations/202008031500.d.ts.map +1 -1
  64. package/dist/migrations/202009221105.d.ts.map +1 -1
  65. package/dist/migrations/202009231331.d.ts.map +1 -1
  66. package/dist/migrations/202010231444.d.ts.map +1 -1
  67. package/dist/migrations/202011021749.d.ts.map +1 -1
  68. package/dist/migrations/202012011203.d.ts.map +1 -1
  69. package/dist/migrations/202012100841.d.ts.map +1 -1
  70. package/dist/migrations/202012281835.d.ts.map +1 -1
  71. package/dist/migrations/202101061051.d.ts.map +1 -1
  72. package/dist/migrations/202101141128.d.ts.map +1 -1
  73. package/dist/migrations/202102091312.d.ts.map +1 -1
  74. package/dist/migrations/202102091312.js.map +1 -1
  75. package/dist/migrations/202102172148.d.ts.map +1 -1
  76. package/dist/migrations/202106102347.d.ts.map +1 -1
  77. package/dist/migrations/202106112120.d.ts.map +1 -1
  78. package/dist/migrations/202106120012.d.ts.map +1 -1
  79. package/dist/migrations/202106120220.d.ts.map +1 -1
  80. package/dist/migrations/202106121701.d.ts.map +1 -1
  81. package/dist/migrations/202107281619.d.ts.map +1 -1
  82. package/dist/migrations/202109201624.d.ts.map +1 -1
  83. package/dist/migrations/202207022002.d.ts.map +1 -1
  84. package/dist/migrations/202210051058.js.map +1 -1
  85. package/dist/migrations/202210101540.js.map +1 -1
  86. package/dist/migrations/202301130917.d.ts.map +1 -1
  87. package/dist/migrations/202304281224.js.map +1 -1
  88. package/dist/migrations/202307211459.js.map +1 -1
  89. package/dist/migrations/202308211648.d.ts.map +1 -1
  90. package/dist/migrations/202402071125.d.ts.map +1 -1
  91. package/dist/migrations/202501081226.d.ts.map +1 -1
  92. package/dist/migrations/202502131103.js.map +1 -1
  93. package/dist/migrations/202503071353.d.ts.map +1 -1
  94. package/dist/mobile-mocks/node/child_process.d.ts.map +1 -1
  95. package/dist/mobile-mocks/node/fs/promises.js +5 -6
  96. package/dist/mobile-mocks/node/fs/promises.js.map +1 -1
  97. package/dist/mobile-mocks/node/fs.js +3 -4
  98. package/dist/mobile-mocks/node/fs.js.map +1 -1
  99. package/dist/mobile-mocks/node/latest-version.js +1 -1
  100. package/dist/mobile-mocks/node/latest-version.js.map +1 -1
  101. package/dist/mobile-mocks/node/v8.js +2 -3
  102. package/dist/mobile-mocks/node/v8.js.map +1 -1
  103. package/dist/model-helper.d.ts +2 -2
  104. package/dist/model-helper.js.map +1 -1
  105. package/dist/models/config.d.ts.map +1 -1
  106. package/dist/models/config.js +28 -16
  107. package/dist/models/config.js.map +1 -1
  108. package/dist/models/crash.js +17 -7
  109. package/dist/models/crash.js.map +1 -1
  110. package/dist/models/discovery.d.ts +6 -5
  111. package/dist/models/discovery.d.ts.map +1 -1
  112. package/dist/models/discovery.js +14 -12
  113. package/dist/models/discovery.js.map +1 -1
  114. package/dist/models/email.d.ts +5 -5
  115. package/dist/models/email.d.ts.map +1 -1
  116. package/dist/models/email.js +17 -7
  117. package/dist/models/email.js.map +1 -1
  118. package/dist/models/eventlog.js.map +1 -1
  119. package/dist/models/expression.d.ts +8 -2
  120. package/dist/models/expression.d.ts.map +1 -1
  121. package/dist/models/expression.js +21 -20
  122. package/dist/models/expression.js.map +1 -1
  123. package/dist/models/field.js.map +1 -1
  124. package/dist/models/fieldrepeat.js.map +1 -1
  125. package/dist/models/file.d.ts +0 -1
  126. package/dist/models/file.d.ts.map +1 -1
  127. package/dist/models/file.js.map +1 -1
  128. package/dist/models/form.js.map +1 -1
  129. package/dist/models/index.d.ts +26 -19
  130. package/dist/models/index.d.ts.map +1 -1
  131. package/dist/models/internal/async_json_stream.js +1 -1
  132. package/dist/models/internal/async_json_stream.js.map +1 -1
  133. package/dist/models/internal/push_message_helper.js.map +1 -1
  134. package/dist/models/internal/query.d.ts +21 -2
  135. package/dist/models/internal/query.d.ts.map +1 -1
  136. package/dist/models/internal/query.js +44 -1
  137. package/dist/models/internal/query.js.map +1 -1
  138. package/dist/models/internal/table_helper.d.ts.map +1 -1
  139. package/dist/models/internal/table_helper.js.map +1 -1
  140. package/dist/models/layout.d.ts +2 -2
  141. package/dist/models/layout.d.ts.map +1 -1
  142. package/dist/models/layout.js.map +1 -1
  143. package/dist/models/model.d.ts.map +1 -1
  144. package/dist/models/model.js.map +1 -1
  145. package/dist/models/model_instance.d.ts +0 -1
  146. package/dist/models/model_instance.d.ts.map +1 -1
  147. package/dist/models/model_instance.js +17 -7
  148. package/dist/models/model_instance.js.map +1 -1
  149. package/dist/models/notification.js.map +1 -1
  150. package/dist/models/page.d.ts.map +1 -1
  151. package/dist/models/page.js +60 -23
  152. package/dist/models/page.js.map +1 -1
  153. package/dist/models/page_group.js +17 -7
  154. package/dist/models/page_group.js.map +1 -1
  155. package/dist/models/page_group_member.js.map +1 -1
  156. package/dist/models/plugin.js.map +1 -1
  157. package/dist/models/random.d.ts.map +1 -1
  158. package/dist/models/random.js.map +1 -1
  159. package/dist/models/scheduler.d.ts +10 -3
  160. package/dist/models/scheduler.d.ts.map +1 -1
  161. package/dist/models/scheduler.js.map +1 -1
  162. package/dist/models/table.d.ts.map +1 -1
  163. package/dist/models/table.js +19 -48
  164. package/dist/models/table.js.map +1 -1
  165. package/dist/models/table_constraints.js.map +1 -1
  166. package/dist/models/tag.js.map +1 -1
  167. package/dist/models/trigger.d.ts.map +1 -1
  168. package/dist/models/trigger.js +22 -8
  169. package/dist/models/trigger.js.map +1 -1
  170. package/dist/models/user.js.map +1 -1
  171. package/dist/models/view.d.ts +5 -0
  172. package/dist/models/view.d.ts.map +1 -1
  173. package/dist/models/view.js +26 -7
  174. package/dist/models/view.js.map +1 -1
  175. package/dist/models/workflow.js +17 -7
  176. package/dist/models/workflow.js.map +1 -1
  177. package/dist/models/workflow_run.js +17 -7
  178. package/dist/models/workflow_run.js.map +1 -1
  179. package/dist/models/workflow_step.js.map +1 -1
  180. package/dist/plugin-helper.d.ts +10 -2
  181. package/dist/plugin-helper.d.ts.map +1 -1
  182. package/dist/plugin-helper.js +69 -5
  183. package/dist/plugin-helper.js.map +1 -1
  184. package/dist/plugin-testing.d.ts +1 -1
  185. package/dist/plugin-testing.d.ts.map +1 -1
  186. package/dist/plugin-testing.js.map +1 -1
  187. package/dist/standard-menu.d.ts.map +1 -1
  188. package/dist/standard-menu.js +10 -10
  189. package/dist/standard-menu.js.map +1 -1
  190. package/dist/tests/actions.test.js +19 -7
  191. package/dist/tests/actions.test.js.map +1 -1
  192. package/dist/tests/assertions.js +6 -7
  193. package/dist/tests/assertions.js.map +1 -1
  194. package/dist/tests/auth.test.js.map +1 -1
  195. package/dist/tests/auxtest.test.js +19 -1
  196. package/dist/tests/auxtest.test.js.map +1 -1
  197. package/dist/tests/calc.test.js +11 -1
  198. package/dist/tests/calc.test.js.map +1 -1
  199. package/dist/tests/common_helpers.js +7 -8
  200. package/dist/tests/common_helpers.js.map +1 -1
  201. package/dist/tests/db.test.js.map +1 -1
  202. package/dist/tests/discover.test.js.map +1 -1
  203. package/dist/tests/exact_views.test.js +183 -15
  204. package/dist/tests/exact_views.test.js.map +1 -1
  205. package/dist/tests/field.test.js +11 -9
  206. package/dist/tests/field.test.js.map +1 -1
  207. package/dist/tests/fieldviews.test.js.map +1 -1
  208. package/dist/tests/file.test.js.map +1 -1
  209. package/dist/tests/mocks.d.ts.map +1 -1
  210. package/dist/tests/mocks.js.map +1 -1
  211. package/dist/tests/page_group.test.js.map +1 -1
  212. package/dist/tests/remote_query_helper.d.ts.map +1 -1
  213. package/dist/tests/table.test.js.map +1 -1
  214. package/dist/tests/table_history.test.js.map +1 -1
  215. package/dist/tests/tag.test.js.map +1 -1
  216. package/dist/tests/user.test.js.map +1 -1
  217. package/dist/tests/view.test.js +1 -1
  218. package/dist/tests/view.test.js.map +1 -1
  219. package/dist/tests/workflow.test.js +3 -0
  220. package/dist/tests/workflow.test.js.map +1 -1
  221. package/dist/translate.d.ts.map +1 -1
  222. package/dist/utils.d.ts +8 -8
  223. package/dist/utils.d.ts.map +1 -1
  224. package/dist/utils.js +1 -1
  225. package/dist/utils.js.map +1 -1
  226. package/dist/web-mobile-commons.d.ts +1 -1
  227. package/dist/web-mobile-commons.d.ts.map +1 -1
  228. package/dist/web-mobile-commons.js +18 -2
  229. package/dist/web-mobile-commons.js.map +1 -1
  230. 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":"AA8FA;;;GAGG;AAEH,4CAJW,MAAM,GACJ,QAAQ,CAwXjB;AA+CJ;;;;;;;;;;;GAWG;AACH,8BAXW,MAAM,YACN,MAAM,mBAIN,MAAM;IAEU,GAAG,EAAnB,MAAM;IACU,GAAG,EAAnB,MAAM;;;IACJ,QAAQ,IAAI,CAAC,CAYzB;AAED;;;;;;;;;GASG;AACH,kCATW,MAAM,YACN,MAAM;IAEE,OAAO;IACP,MAAM;wBAEd,MAAM;;;;IACJ,QAAQ,IAAI,EAAE,CAAC,CA0C3B;AAsrBD;;;;;;;;;;;;;;;;GAgBG;AACH,kCAhBW,MAAM,YACN,MAAM;IAEY,OAAO,EAAzB,MAAM,EAAE;IACQ,MAAM;IACN,KAAK,EAArB,MAAM;IACW,cAAc,EAA/B,OAAO;IACW,oBAAoB,EAAtC,MAAM,EAAE;UACR,MAAM;IAGU,GAAG,EAAnB,MAAM;IACU,GAAG,EAAnB,MAAM;IACU,QAAQ,EAAxB,MAAM;;;;;;;;;iBACJ,QAAQ,IAAI,CAAC,CAmUzB;AA0FD,mKA6BC;AAGD,sHA6BC;AAtxCD;;;;;;GAMG;AACH;IAHmB,OAAO;IACb,QAAQ,MAAM,EAAE,CAAC,CAQ7B;AA6BD,uBAAuB;AACvB,sCAAuD;AAktDvD;;;;;;iBAwGC;AA1pBD;;;;;;GAMG;AACH;IALwB,IAAI,EAAjB,MAAM;IACO,QAAQ,EAArB,MAAM;IACO,GAAG,EAAhB,MAAM;;;IACJ,QAAQ,OAAO,CAAC,CAO5B;AAgpBD;;;;;;;;;IAyDC;;;;AAxoBD;;;;;;;;;;;GAWG;AACH,sCAXW,MAAM;IAGS,OAAO,EAAtB,MAAM,EAAE;IACA,MAAM;;IAGE,GAAG,EAAnB,MAAM;IACK,GAAG;;;IACZ,QAAQ,MAAM,CAAC,CAe3B;AAED;;;;;;;;;;;;;;;;;;;;;;kBA0GC;;yBAsgBY,MAAM;gCAEN,MAAM;AAmBF;;;;;qBAEd;AACD;;;;GAIG;AACH;;aAEC;AACQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmcP;;;;;AAEF,yGAkBC;AACY;;;GA2DZ;AACiB,6HAEjB"}
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
  });
@@ -767,22 +785,33 @@ const transformForm = async ({ form, table, req, row, res, getRowQuery, viewname
767
785
  form.xhrSubmit = true;
768
786
  setDateLocales(form, req.getLocale());
769
787
  };
770
- const realTimeScript = (viewname, table_id, row) => {
788
+ const realTimeScript = (viewname, table_id, row, scriptId) => {
771
789
  const view = View.findOne({ name: viewname });
772
790
  const table = Table.findOne({ id: table_id });
773
791
  const rowId = row[table.pk_name];
774
792
  return `
775
793
  const collabCfg = {
776
794
  events: {
777
- '${view.getRealTimeEventName(`UPDATE_EVENT?id=${rowId}`)}': (data) => {
795
+ '${view.getRealTimeEventName(`UPDATE_EVENT?id=${rowId}`)}': async (data) => {
778
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
+ );
779
801
  if (data.updates) {
780
- common_done({set_fields: data.updates, no_onchange: true}, "${viewname}");
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
+ }
781
810
  }
782
811
  }
783
812
  }
784
813
  };
785
- init_collab_room('${viewname}', collabCfg);`;
814
+ init_collab_room('${viewname}', collabCfg);`.trim();
786
815
  };
787
816
  /**
788
817
  * @param {object} opts
@@ -943,12 +972,16 @@ const render = async ({ table, fields, viewname, columns, layout, row, req, stat
943
972
  : `form${Math.floor(Math.random() * 16777215).toString(16)}`;
944
973
  const identicalFieldsScript = script(domReady(`const editForm = document.getElementById('${formId}'); if (editForm) editForm.addEventListener("change", handle_identical_fields, true);`));
945
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);
946
978
  const realTimeCollabScript = enable_realtime && row && !(req.headers?.pjaxpageload === "true")
947
979
  ? (!dynamic_updates_enabled
948
980
  ? script({
949
981
  src: `/static_assets/${db.connectObj.version_tag}/socket.io.min.js`,
950
982
  })
951
- : "") + script(domReady(realTimeScript(viewname, table.id, row)))
983
+ : "") +
984
+ script({ id: rndid }, domReady(realTimeScript(viewname, table.id, row, rndid)))
952
985
  : "";
953
986
  if (actually_auto_save) {
954
987
  for (const field of form.fields) {
@@ -1763,7 +1796,7 @@ const createBasicView = async ({ table, viewname, template_view, template_table,
1763
1796
  cfg.split_paste = template_view.configuration.split_paste;
1764
1797
  return cfg;
1765
1798
  };
1766
- const virtual_triggers = (table_id, viewname, { enable_realtime }) => {
1799
+ const virtual_triggers = (table_id, viewname, { enable_realtime, update_events }) => {
1767
1800
  if (!enable_realtime)
1768
1801
  return [];
1769
1802
  const table = Table.findOne({ id: table_id });
@@ -1799,15 +1832,21 @@ const virtual_triggers = (table_id, viewname, { enable_realtime }) => {
1799
1832
  }
1800
1833
  else {
1801
1834
  // build and emit updates
1802
- const updateVals = {};
1835
+ const updates = {};
1803
1836
  for (const fieldName of changedLayoutFields) {
1804
1837
  const newVal = row[fieldName];
1805
- updateVals[fieldName] = newVal;
1838
+ updates[fieldName] = newVal;
1806
1839
  }
1807
1840
  const rowId = row[table.pk_name];
1808
- getState().log(6, "Emitting real-time update for row", rowId, updateVals);
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);
1809
1847
  view.emitRealTimeEvent(`UPDATE_EVENT?id=${rowId}`, {
1810
- updates: updateVals,
1848
+ updates: updates,
1849
+ actions: actionResults,
1811
1850
  });
1812
1851
  }
1813
1852
  },
@@ -1847,7 +1886,7 @@ module.exports = {
1847
1886
  getStringsForI18n({ layout }) {
1848
1887
  return getStringsForI18n(layout);
1849
1888
  },
1850
- 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, }) => ({
1851
1890
  async editQuery(state, mobileReferrer, isPreview, hiddenLoginDest) {
1852
1891
  const table = Table.findOne({ id: table_id });
1853
1892
  const fields = table.getFields();
@@ -1929,6 +1968,7 @@ module.exports = {
1929
1968
  auto_created_row,
1930
1969
  hiddenLoginDest,
1931
1970
  enable_realtime,
1971
+ update_events,
1932
1972
  });
1933
1973
  },
1934
1974
  async editManyQuery(state, { limit, offset, orderBy, orderDesc, where }) {