@saltcorn/server 1.3.1-beta.11 → 1.3.1-beta.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (387) hide show
  1. package/docs/assets/search.js +1 -1
  2. package/docs/classes/_saltcorn_common_code.Relation.html +10 -10
  3. package/docs/classes/_saltcorn_common_code.RelationsFinder.html +5 -5
  4. package/docs/classes/_saltcorn_data.models.Crash.html +17 -17
  5. package/docs/classes/_saltcorn_data.models.EventLog-1.html +19 -19
  6. package/docs/classes/_saltcorn_data.models.Field.html +74 -74
  7. package/docs/classes/_saltcorn_data.models.FieldRepeat.html +16 -16
  8. package/docs/classes/_saltcorn_data.models.File-1.html +48 -48
  9. package/docs/classes/_saltcorn_data.models.Form-1.html +39 -39
  10. package/docs/classes/_saltcorn_data.models.Library.html +13 -13
  11. package/docs/classes/_saltcorn_data.models.Page.html +24 -24
  12. package/docs/classes/_saltcorn_data.models.PageGroup-1.html +25 -25
  13. package/docs/classes/_saltcorn_data.models.Plugin.html +25 -25
  14. package/docs/classes/_saltcorn_data.models.Role.html +9 -9
  15. package/docs/classes/_saltcorn_data.models.Table-1.html +92 -92
  16. package/docs/classes/_saltcorn_data.models.TableConstraint.html +14 -14
  17. package/docs/classes/_saltcorn_data.models.Trigger.html +37 -37
  18. package/docs/classes/_saltcorn_data.models.User.html +48 -48
  19. package/docs/classes/_saltcorn_data.models.View-1.html +55 -55
  20. package/docs/classes/_saltcorn_data.models.Workflow.html +17 -17
  21. package/docs/classes/_saltcorn_data.models.WorkflowRun.html +35 -35
  22. package/docs/classes/_saltcorn_data.models.WorkflowStep.html +25 -25
  23. package/docs/classes/_saltcorn_data.models.WorkflowTrace.html +18 -18
  24. package/docs/classes/_saltcorn_mobile_builder.MobileBuilder.html +37 -37
  25. package/docs/enums/_saltcorn_common_code.RelationType.html +7 -7
  26. package/docs/enums/_saltcorn_common_code.ViewDisplayType.html +4 -4
  27. package/docs/functions/_saltcorn_admin_models.backup.create_backup.html +1 -1
  28. package/docs/functions/_saltcorn_admin_models.backup.create_csv_from_rows.html +1 -1
  29. package/docs/functions/_saltcorn_admin_models.backup.restore.html +1 -1
  30. package/docs/functions/_saltcorn_admin_models.pack.add_to_menu.html +1 -1
  31. package/docs/functions/_saltcorn_admin_models.pack.can_install_pack.html +1 -1
  32. package/docs/functions/_saltcorn_admin_models.pack.fetch_available_packs.html +1 -1
  33. package/docs/functions/_saltcorn_admin_models.pack.fetch_pack_by_name.html +1 -1
  34. package/docs/functions/_saltcorn_admin_models.pack.install_pack.html +1 -1
  35. package/docs/functions/_saltcorn_admin_models.pack.library_pack.html +1 -1
  36. package/docs/functions/_saltcorn_admin_models.pack.model_instance_pack.html +1 -1
  37. package/docs/functions/_saltcorn_admin_models.pack.model_pack.html +1 -1
  38. package/docs/functions/_saltcorn_admin_models.pack.page_group_pack.html +1 -1
  39. package/docs/functions/_saltcorn_admin_models.pack.page_pack.html +1 -1
  40. package/docs/functions/_saltcorn_admin_models.pack.plugin_pack.html +1 -1
  41. package/docs/functions/_saltcorn_admin_models.pack.role_pack.html +1 -1
  42. package/docs/functions/_saltcorn_admin_models.pack.table_pack.html +1 -1
  43. package/docs/functions/_saltcorn_admin_models.pack.trigger_pack.html +1 -1
  44. package/docs/functions/_saltcorn_admin_models.pack.uninstall_pack.html +1 -1
  45. package/docs/functions/_saltcorn_admin_models.pack.view_pack.html +1 -1
  46. package/docs/functions/_saltcorn_admin_models.tenant.copy_tenant_template.html +1 -1
  47. package/docs/functions/_saltcorn_admin_models.tenant.create_tenant.html +1 -1
  48. package/docs/functions/_saltcorn_admin_models.tenant.deleteTenant.html +1 -1
  49. package/docs/functions/_saltcorn_admin_models.tenant.domain_sanitize.html +1 -1
  50. package/docs/functions/_saltcorn_admin_models.tenant.eachTenant.html +1 -1
  51. package/docs/functions/_saltcorn_admin_models.tenant.getAllTenantRows.html +1 -1
  52. package/docs/functions/_saltcorn_admin_models.tenant.getAllTenants.html +1 -1
  53. package/docs/functions/_saltcorn_admin_models.tenant.insertTenant.html +1 -1
  54. package/docs/functions/_saltcorn_admin_models.tenant.switchToTenant.html +1 -1
  55. package/docs/functions/_saltcorn_common_code.buildTableCaches.html +1 -1
  56. package/docs/functions/_saltcorn_common_code.parseLegacyRelation.html +1 -1
  57. package/docs/functions/_saltcorn_common_code.parseRelationPath.html +1 -1
  58. package/docs/functions/_saltcorn_data.models.config.check_email_mask.html +1 -1
  59. package/docs/functions/_saltcorn_data.models.config.deleteConfig.html +1 -1
  60. package/docs/functions/_saltcorn_data.models.config.getAllConfig.html +1 -1
  61. package/docs/functions/_saltcorn_data.models.config.getConfig.html +1 -1
  62. package/docs/functions/_saltcorn_data.models.config.get_base_url.html +1 -1
  63. package/docs/functions/_saltcorn_data.models.config.get_latest_npm_version.html +1 -1
  64. package/docs/functions/_saltcorn_data.models.config.remove_from_menu.html +1 -1
  65. package/docs/functions/_saltcorn_data.models.config.save_menu_items.html +1 -1
  66. package/docs/functions/_saltcorn_data.models.config.setConfig.html +1 -1
  67. package/docs/functions/_saltcorn_data.models.discovery.discover_tables.html +5 -3
  68. package/docs/functions/_saltcorn_data.models.discovery.discoverable_tables.html +7 -3
  69. package/docs/functions/_saltcorn_data.models.discovery.findType.html +1 -1
  70. package/docs/functions/_saltcorn_data.models.discovery.get_existing_views.html +1 -1
  71. package/docs/functions/_saltcorn_data.models.discovery.implement_discovery.html +1 -1
  72. package/docs/functions/_saltcorn_data.models.email.getMailTransport.html +1 -1
  73. package/docs/functions/_saltcorn_data.models.email.send_verification_email.html +1 -1
  74. package/docs/functions/_saltcorn_data.models.email.viewToEmailHtml.html +1 -1
  75. package/docs/functions/_saltcorn_data.models.expression.apply_calculated_fields.html +1 -1
  76. package/docs/functions/_saltcorn_data.models.expression.apply_calculated_fields_stored.html +1 -1
  77. package/docs/functions/_saltcorn_data.models.expression.eval_expression.html +1 -1
  78. package/docs/functions/_saltcorn_data.models.expression.expressionValidator.html +1 -1
  79. package/docs/functions/_saltcorn_data.models.expression.get_async_expression_function.html +1 -1
  80. package/docs/functions/_saltcorn_data.models.expression.get_expression_function.html +1 -1
  81. package/docs/functions/_saltcorn_data.models.expression.jsexprToWhere.html +1 -1
  82. package/docs/functions/_saltcorn_data.models.expression.recalculate_for_stored.html +1 -1
  83. package/docs/functions/_saltcorn_data.models.expression.transform_for_async.html +1 -1
  84. package/docs/functions/_saltcorn_data.models.layout.eachView.html +1 -1
  85. package/docs/functions/_saltcorn_data.models.layout.getStringsForI18n.html +1 -1
  86. package/docs/functions/_saltcorn_data.models.layout.getViews.html +1 -1
  87. package/docs/functions/_saltcorn_data.models.layout.translateLayout.html +1 -1
  88. package/docs/functions/_saltcorn_data.models.layout.traverse.html +1 -1
  89. package/docs/functions/_saltcorn_data.models.layout.traverseSync.html +1 -1
  90. package/docs/functions/_saltcorn_data.models.random.all_views.html +1 -1
  91. package/docs/functions/_saltcorn_data.models.random.fill_table_row.html +1 -1
  92. package/docs/functions/_saltcorn_data.models.random.initial_view.html +1 -1
  93. package/docs/functions/_saltcorn_data.models.random.random_table.html +1 -1
  94. package/docs/functions/_saltcorn_db_common.buildInsertBulkSql.html +1 -1
  95. package/docs/functions/_saltcorn_db_common.buildInsertSql.html +1 -1
  96. package/docs/functions/_saltcorn_db_common.commitAndBeginNewTransaction.html +1 -1
  97. package/docs/functions/_saltcorn_db_common.doCount.html +1 -1
  98. package/docs/functions/_saltcorn_db_common.doDeleteWhere.html +1 -1
  99. package/docs/functions/_saltcorn_db_common.doListScTables.html +1 -1
  100. package/docs/functions/_saltcorn_db_common.doListTables.html +1 -1
  101. package/docs/functions/_saltcorn_db_common.doListUserDefinedTables.html +1 -1
  102. package/docs/functions/_saltcorn_db_common.do_add_index.html +1 -1
  103. package/docs/functions/_saltcorn_db_common.do_drop_index.html +1 -1
  104. package/docs/functions/_saltcorn_db_common.ftsFieldsSqlExpr.html +1 -1
  105. package/docs/functions/_saltcorn_db_common.mkSelectOptions.html +1 -1
  106. package/docs/functions/_saltcorn_db_common.mkVal.html +1 -1
  107. package/docs/functions/_saltcorn_db_common.mkWhere.html +1 -1
  108. package/docs/functions/_saltcorn_db_common.multi_tenant.enable_multi_tenant.html +1 -1
  109. package/docs/functions/_saltcorn_db_common.multi_tenant.getRequestContext.html +1 -1
  110. package/docs/functions/_saltcorn_db_common.multi_tenant.getTenantSchema.html +1 -1
  111. package/docs/functions/_saltcorn_db_common.multi_tenant.init.html +1 -1
  112. package/docs/functions/_saltcorn_db_common.multi_tenant.is_it_multi_tenant.html +1 -1
  113. package/docs/functions/_saltcorn_db_common.multi_tenant.runWithTenant.html +1 -1
  114. package/docs/functions/_saltcorn_db_common.orderByIsObject.html +1 -1
  115. package/docs/functions/_saltcorn_db_common.orderByIsOperator.html +1 -1
  116. package/docs/functions/_saltcorn_db_common.prefixFieldsInWhere.html +1 -1
  117. package/docs/functions/_saltcorn_db_common.reprAsJson.html +1 -1
  118. package/docs/functions/_saltcorn_db_common.slugify.html +1 -1
  119. package/docs/functions/_saltcorn_db_common.sqlBinOp.html +1 -1
  120. package/docs/functions/_saltcorn_db_common.sqlFun.html +1 -1
  121. package/docs/functions/_saltcorn_db_common.sqlsanitize.html +1 -1
  122. package/docs/functions/_saltcorn_db_common.sqlsanitizeAllowDots.html +1 -1
  123. package/docs/functions/_saltcorn_db_common.subSelectWhere.html +1 -1
  124. package/docs/functions/_saltcorn_db_common.tryCatchInTransaction.html +1 -1
  125. package/docs/functions/_saltcorn_db_common.withTransaction.html +1 -1
  126. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.androidFeatures.html +1 -1
  127. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.androidPermissions.html +1 -1
  128. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.buildTablesFile.html +1 -1
  129. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyPrepopulatedDb.html +1 -1
  130. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyServerFiles.html +1 -1
  131. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyShareExtFiles.html +1 -1
  132. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copySiteLogo.html +1 -1
  133. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyTranslationFiles.html +1 -1
  134. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.createSqliteDb.html +1 -1
  135. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.decodeProvisioningProfile.html +1 -1
  136. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.extractDomain.html +1 -1
  137. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.generateAndroidVersionCode.html +1 -1
  138. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyAndroidManifest.html +1 -1
  139. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyConfigXml.html +1 -1
  140. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyGradleConfig.html +1 -1
  141. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyInfoPlist.html +1 -1
  142. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyXcodeProjectFile.html +1 -1
  143. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepAppIcon.html +1 -1
  144. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareAppIcon.html +1 -1
  145. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareBuildDir.html +1 -1
  146. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareExportOptionsPlist.html +1 -1
  147. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareSplashIcon.html +1 -1
  148. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareSplashPage.html +1 -1
  149. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeCapacitorConfig.html +1 -1
  150. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeCfgFile.html +1 -1
  151. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeDataExtractionRules.html +1 -1
  152. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeNetworkSecurityConfig.html +1 -1
  153. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writePodfile.html +1 -1
  154. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writePrivacyInfo.html +1 -1
  155. package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.bundleMobileAppCode.html +1 -1
  156. package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.bundlePackagesAndPlugins.html +1 -1
  157. package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.copyMobileAppDirs.html +1 -1
  158. package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.copyPublicDirs.html +1 -1
  159. package/docs/functions/_saltcorn_sqlite.add_index.html +1 -1
  160. package/docs/functions/_saltcorn_sqlite.add_unique_constraint.html +1 -1
  161. package/docs/functions/_saltcorn_sqlite.begin.html +1 -1
  162. package/docs/functions/_saltcorn_sqlite.changeConnection.html +1 -1
  163. package/docs/functions/_saltcorn_sqlite.close.html +1 -1
  164. package/docs/functions/_saltcorn_sqlite.commit.html +1 -1
  165. package/docs/functions/_saltcorn_sqlite.count.html +1 -1
  166. package/docs/functions/_saltcorn_sqlite.deleteWhere.html +1 -1
  167. package/docs/functions/_saltcorn_sqlite.dropTable.html +1 -1
  168. package/docs/functions/_saltcorn_sqlite.dropTables.html +1 -1
  169. package/docs/functions/_saltcorn_sqlite.drop_index.html +1 -1
  170. package/docs/functions/_saltcorn_sqlite.drop_reset_schema.html +1 -1
  171. package/docs/functions/_saltcorn_sqlite.drop_unique_constraint.html +1 -1
  172. package/docs/functions/_saltcorn_sqlite.getVersion.html +1 -1
  173. package/docs/functions/_saltcorn_sqlite.get_db_filepath.html +1 -1
  174. package/docs/functions/_saltcorn_sqlite.get_sql_logging.html +1 -1
  175. package/docs/functions/_saltcorn_sqlite.init.html +1 -1
  176. package/docs/functions/_saltcorn_sqlite.insert.html +1 -1
  177. package/docs/functions/_saltcorn_sqlite.listScTables.html +1 -1
  178. package/docs/functions/_saltcorn_sqlite.listTables.html +1 -1
  179. package/docs/functions/_saltcorn_sqlite.listUserDefinedTables.html +1 -1
  180. package/docs/functions/_saltcorn_sqlite.query.html +1 -1
  181. package/docs/functions/_saltcorn_sqlite.rollback.html +1 -1
  182. package/docs/functions/_saltcorn_sqlite.select.html +1 -1
  183. package/docs/functions/_saltcorn_sqlite.selectMaybeOne.html +1 -1
  184. package/docs/functions/_saltcorn_sqlite.selectOne.html +1 -1
  185. package/docs/functions/_saltcorn_sqlite.set_sql_logging.html +1 -1
  186. package/docs/functions/_saltcorn_sqlite.sql_log.html +1 -1
  187. package/docs/functions/_saltcorn_sqlite.update.html +1 -1
  188. package/docs/functions/_saltcorn_sqlite.updateWhere.html +1 -1
  189. package/docs/functions/_saltcorn_sqlite_mobile.add_index.html +1 -1
  190. package/docs/functions/_saltcorn_sqlite_mobile.add_unique_constraint.html +1 -1
  191. package/docs/functions/_saltcorn_sqlite_mobile.count.html +1 -1
  192. package/docs/functions/_saltcorn_sqlite_mobile.deleteWhere.html +1 -1
  193. package/docs/functions/_saltcorn_sqlite_mobile.drop_index.html +1 -1
  194. package/docs/functions/_saltcorn_sqlite_mobile.drop_reset_schema.html +1 -1
  195. package/docs/functions/_saltcorn_sqlite_mobile.drop_unique_constraint.html +1 -1
  196. package/docs/functions/_saltcorn_sqlite_mobile.init.html +1 -1
  197. package/docs/functions/_saltcorn_sqlite_mobile.insert.html +1 -1
  198. package/docs/functions/_saltcorn_sqlite_mobile.insertRows.html +1 -1
  199. package/docs/functions/_saltcorn_sqlite_mobile.listScTables.html +1 -1
  200. package/docs/functions/_saltcorn_sqlite_mobile.listTables.html +1 -1
  201. package/docs/functions/_saltcorn_sqlite_mobile.listUserDefinedTables.html +1 -1
  202. package/docs/functions/_saltcorn_sqlite_mobile.query.html +1 -1
  203. package/docs/functions/_saltcorn_sqlite_mobile.select.html +1 -1
  204. package/docs/functions/_saltcorn_sqlite_mobile.selectMaybeOne.html +1 -1
  205. package/docs/functions/_saltcorn_sqlite_mobile.selectOne.html +1 -1
  206. package/docs/functions/_saltcorn_sqlite_mobile.setConnectionObject.html +1 -1
  207. package/docs/functions/_saltcorn_sqlite_mobile.tableExists.html +1 -1
  208. package/docs/functions/_saltcorn_sqlite_mobile.time.html +1 -1
  209. package/docs/functions/_saltcorn_sqlite_mobile.update.html +1 -1
  210. package/docs/functions/_saltcorn_types.ModelAbstracts.abstract_field.instanceOfField.html +1 -1
  211. package/docs/functions/_saltcorn_types.ModelAbstracts.abstract_page.instanceOfPage.html +1 -1
  212. package/docs/functions/_saltcorn_types.ModelAbstracts.abstract_view.instanceOfView.html +1 -1
  213. package/docs/functions/_saltcorn_types.Types.base_types.instanceOWithHtmlFile.html +1 -1
  214. package/docs/functions/_saltcorn_types.Types.common_types.instanceOfErrorMsg.html +1 -1
  215. package/docs/functions/_saltcorn_types.Types.common_types.instanceOfSuccessMsg.html +1 -1
  216. package/docs/functions/_saltcorn_types.Types.common_types.instanceOfType.html +1 -1
  217. package/docs/functions/_saltcorn_types.generators.generateBool.html +1 -1
  218. package/docs/functions/_saltcorn_types.generators.generateString.html +1 -1
  219. package/docs/functions/_saltcorn_types.generators.num_between.html +1 -1
  220. package/docs/functions/_saltcorn_types.generators.oneOf.html +1 -1
  221. package/docs/interfaces/_saltcorn_mobile_builder.common_build_utils.ScCapacitorConfig.html +10 -10
  222. package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_field.AbstractField.html +15 -15
  223. package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_field.AbstractFieldRepeat.html +3 -3
  224. package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_form.AbstractForm.html +27 -27
  225. package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_page.AbstractPage.html +7 -7
  226. package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_role.AbstractRole.html +3 -3
  227. package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_table.AbstractTable.html +11 -11
  228. package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_trigger.AbstractTrigger.html +17 -17
  229. package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_view.AbstractView.html +10 -10
  230. package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_workflow.AbstractWorkflow.html +13 -13
  231. package/docs/modules/_saltcorn_admin_models.backup.html +1 -1
  232. package/docs/modules/_saltcorn_admin_models.html +1 -1
  233. package/docs/modules/_saltcorn_admin_models.pack.html +1 -1
  234. package/docs/modules/_saltcorn_admin_models.tenant.html +1 -1
  235. package/docs/modules/_saltcorn_common_code.html +1 -1
  236. package/docs/modules/_saltcorn_data.html +3 -3
  237. package/docs/modules/_saltcorn_data.models.EventLog.html +2 -2
  238. package/docs/modules/_saltcorn_data.models.File.html +2 -2
  239. package/docs/modules/_saltcorn_data.models.Form.html +2 -2
  240. package/docs/modules/_saltcorn_data.models.PageGroup.html +2 -2
  241. package/docs/modules/_saltcorn_data.models.Table.html +2 -2
  242. package/docs/modules/_saltcorn_data.models.View.html +2 -2
  243. package/docs/modules/_saltcorn_data.models.config.html +1 -1
  244. package/docs/modules/_saltcorn_data.models.discovery.html +1 -1
  245. package/docs/modules/_saltcorn_data.models.email.html +1 -1
  246. package/docs/modules/_saltcorn_data.models.expression.html +1 -1
  247. package/docs/modules/_saltcorn_data.models.html +1 -1
  248. package/docs/modules/_saltcorn_data.models.layout.html +1 -1
  249. package/docs/modules/_saltcorn_data.models.random.html +1 -1
  250. package/docs/modules/_saltcorn_data.models.scheduler.html +1 -1
  251. package/docs/modules/_saltcorn_data.plugin_helper.html +1 -1
  252. package/docs/modules/_saltcorn_data.utils.html +1 -1
  253. package/docs/modules/_saltcorn_db_common.html +2 -2
  254. package/docs/modules/_saltcorn_db_common.multi_tenant.html +1 -1
  255. package/docs/modules/_saltcorn_markup.html +2 -2
  256. package/docs/modules/_saltcorn_mobile_builder.common_build_utils.html +1 -1
  257. package/docs/modules/_saltcorn_mobile_builder.html +1 -1
  258. package/docs/modules/_saltcorn_mobile_builder.package_bundle_utils.html +1 -1
  259. package/docs/modules/_saltcorn_sqlite.html +1 -1
  260. package/docs/modules/_saltcorn_sqlite_mobile.html +1 -1
  261. package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_field.html +1 -1
  262. package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_form.html +1 -1
  263. package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_library.html +1 -1
  264. package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_page.html +1 -1
  265. package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_plugin.html +1 -1
  266. package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_role.html +1 -1
  267. package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_table.html +1 -1
  268. package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_trigger.html +1 -1
  269. package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_view.html +1 -1
  270. package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_workflow.html +1 -1
  271. package/docs/modules/_saltcorn_types.ModelAbstracts.html +1 -1
  272. package/docs/modules/_saltcorn_types.Types.base_types.html +1 -1
  273. package/docs/modules/_saltcorn_types.Types.common_types.html +1 -1
  274. package/docs/modules/_saltcorn_types.Types.html +1 -1
  275. package/docs/modules/_saltcorn_types.generators.html +1 -1
  276. package/docs/modules/_saltcorn_types.html +1 -1
  277. package/docs/types/_saltcorn_data.models.EventLog.EventLogCfg.html +1 -1
  278. package/docs/types/_saltcorn_data.models.File.FileCfg.html +1 -1
  279. package/docs/types/_saltcorn_data.models.Form.AdditionalButton.html +1 -1
  280. package/docs/types/_saltcorn_data.models.Form.FormCfg.html +1 -1
  281. package/docs/types/_saltcorn_data.models.PageGroup.ScreenInfoParams.html +1 -1
  282. package/docs/types/_saltcorn_data.models.Table.ChildRelations.html +1 -1
  283. package/docs/types/_saltcorn_data.models.Table.ParentRelations.html +1 -1
  284. package/docs/types/_saltcorn_data.models.Table.RelationData.html +1 -1
  285. package/docs/types/_saltcorn_data.models.View.FindViewsPred.html +1 -1
  286. package/docs/types/_saltcorn_db_common.AggregationOptions.html +1 -1
  287. package/docs/types/_saltcorn_db_common.CoordOpts.html +1 -1
  288. package/docs/types/_saltcorn_db_common.DatabaseClient.html +1 -1
  289. package/docs/types/_saltcorn_db_common.JoinField.html +1 -1
  290. package/docs/types/_saltcorn_db_common.JoinFields.html +1 -1
  291. package/docs/types/_saltcorn_db_common.JoinOptions.html +1 -1
  292. package/docs/types/_saltcorn_db_common.JsonPath.html +1 -1
  293. package/docs/types/_saltcorn_db_common.JsonPathElem.html +1 -1
  294. package/docs/types/_saltcorn_db_common.Operator.html +1 -1
  295. package/docs/types/_saltcorn_db_common.PartialSome.html +1 -1
  296. package/docs/types/_saltcorn_db_common.PrimaryKeyValue.html +1 -1
  297. package/docs/types/_saltcorn_db_common.Row.html +1 -1
  298. package/docs/types/_saltcorn_db_common.SelectOptions.html +1 -1
  299. package/docs/types/_saltcorn_db_common.SqlAndValues.html +1 -1
  300. package/docs/types/_saltcorn_db_common.StrongRow.html +1 -1
  301. package/docs/types/_saltcorn_db_common.SubselectOptions.html +1 -1
  302. package/docs/types/_saltcorn_db_common.Value.html +1 -1
  303. package/docs/types/_saltcorn_db_common.Where.html +1 -1
  304. package/docs/types/_saltcorn_mobile_builder.IosCfg.html +1 -1
  305. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_field.FieldCfg.html +1 -1
  306. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_field.InputType.html +1 -1
  307. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_form.AdditionalButton.html +1 -1
  308. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_library.LibraryCfg.html +1 -1
  309. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_library.LibraryPack.html +1 -1
  310. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_page.PageCfg.html +1 -1
  311. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_page.PagePack.html +1 -1
  312. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_plugin.PluginCfg.html +1 -1
  313. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_plugin.PluginPack.html +1 -1
  314. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_role.RoleCfg.html +1 -1
  315. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_role.RolePack.html +1 -1
  316. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_table.TableCfg.html +1 -1
  317. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_table.TablePack.html +1 -1
  318. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_trigger.TriggerCfg.html +1 -1
  319. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_trigger.TriggerPack.html +1 -1
  320. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_view.ViewCfg.html +1 -1
  321. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_view.ViewPack.html +1 -1
  322. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_workflow.ConfigWorkflowStep.html +1 -1
  323. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_workflow.RunResult.html +1 -1
  324. package/docs/types/_saltcorn_types.Types.base_types.Action.html +1 -1
  325. package/docs/types/_saltcorn_types.Types.base_types.AuthenticationMethod.html +1 -1
  326. package/docs/types/_saltcorn_types.Types.base_types.CalcJoinfield.html +1 -1
  327. package/docs/types/_saltcorn_types.Types.base_types.CapacitorPlugin.html +1 -1
  328. package/docs/types/_saltcorn_types.Types.base_types.CodePagePack.html +1 -1
  329. package/docs/types/_saltcorn_types.Types.base_types.Column.html +1 -1
  330. package/docs/types/_saltcorn_types.Types.base_types.ConnectObjType.html +1 -1
  331. package/docs/types/_saltcorn_types.Types.base_types.ConnectedObjects.html +1 -1
  332. package/docs/types/_saltcorn_types.Types.base_types.CopilotSkill.html +1 -1
  333. package/docs/types/_saltcorn_types.Types.base_types.ErrorObj.html +1 -1
  334. package/docs/types/_saltcorn_types.Types.base_types.FieldLike.html +1 -1
  335. package/docs/types/_saltcorn_types.Types.base_types.FieldView.html +1 -1
  336. package/docs/types/_saltcorn_types.Types.base_types.Header.html +1 -1
  337. package/docs/types/_saltcorn_types.Types.base_types.JoinFieldOption.html +1 -1
  338. package/docs/types/_saltcorn_types.Types.base_types.Layout.html +1 -1
  339. package/docs/types/_saltcorn_types.Types.base_types.MobileConfig.html +4 -2
  340. package/docs/types/_saltcorn_types.Types.base_types.ModelPattern.html +1 -1
  341. package/docs/types/_saltcorn_types.Types.base_types.Pack.html +1 -1
  342. package/docs/types/_saltcorn_types.Types.base_types.Plugin.html +1 -1
  343. package/docs/types/_saltcorn_types.Types.base_types.PluginFunction.html +1 -1
  344. package/docs/types/_saltcorn_types.Types.base_types.PluginLayout.html +1 -1
  345. package/docs/types/_saltcorn_types.Types.base_types.PluginRoute.html +1 -1
  346. package/docs/types/_saltcorn_types.Types.base_types.PluginSourceType.html +1 -1
  347. package/docs/types/_saltcorn_types.Types.base_types.PluginType.html +1 -1
  348. package/docs/types/_saltcorn_types.Types.base_types.PluginWrap.html +1 -1
  349. package/docs/types/_saltcorn_types.Types.base_types.PluginWrapArg.html +1 -1
  350. package/docs/types/_saltcorn_types.Types.base_types.RelationOption.html +1 -1
  351. package/docs/types/_saltcorn_types.Types.base_types.Req.html +1 -1
  352. package/docs/types/_saltcorn_types.Types.base_types.Res.html +1 -1
  353. package/docs/types/_saltcorn_types.Types.base_types.ResultType.html +1 -1
  354. package/docs/types/_saltcorn_types.Types.base_types.RouteAction.html +1 -1
  355. package/docs/types/_saltcorn_types.Types.base_types.RunExtra.html +1 -1
  356. package/docs/types/_saltcorn_types.Types.base_types.SlugStepType.html +1 -1
  357. package/docs/types/_saltcorn_types.Types.base_types.StepResType.html +1 -1
  358. package/docs/types/_saltcorn_types.Types.base_types.SubField.html +1 -1
  359. package/docs/types/_saltcorn_types.Types.base_types.TableProvider.html +5 -5
  360. package/docs/types/_saltcorn_types.Types.base_types.TableQuery.html +1 -1
  361. package/docs/types/_saltcorn_types.Types.base_types.Tablely.html +1 -1
  362. package/docs/types/_saltcorn_types.Types.base_types.ViewTemplate.html +1 -1
  363. package/docs/types/_saltcorn_types.Types.common_types.ErrorMessage.html +1 -1
  364. package/docs/types/_saltcorn_types.Types.common_types.GenObj.html +1 -1
  365. package/docs/types/_saltcorn_types.Types.common_types.ReqRes.html +1 -1
  366. package/docs/types/_saltcorn_types.Types.common_types.ResultMessage.html +1 -1
  367. package/docs/types/_saltcorn_types.Types.common_types.SuccessMessage.html +1 -1
  368. package/docs/types/_saltcorn_types.Types.common_types.Type.html +1 -1
  369. package/docs/variables/_saltcorn_data.db.html +1 -1
  370. package/docs/variables/_saltcorn_data.migrations.html +1 -1
  371. package/docs/variables/_saltcorn_data.models.config.available_languages.html +1 -1
  372. package/docs/variables/_saltcorn_data.models.config.configTypes.html +1 -1
  373. package/docs/variables/_saltcorn_data.models.scheduler.runScheduler.html +1 -1
  374. package/docs/variables/_saltcorn_data.plugin_helper.run_action_column.html +1 -1
  375. package/docs/variables/_saltcorn_data.utils.NotAuthorized.html +1 -1
  376. package/docs/variables/_saltcorn_data.utils.isPushEnabled.html +1 -1
  377. package/docs/variables/_saltcorn_data.utils.sleep.html +1 -1
  378. package/docs/variables/_saltcorn_db_common.multi_tenant.tenantNamespace.html +1 -1
  379. package/help/Entry point by role.tmd +1 -0
  380. package/package.json +9 -9
  381. package/public/saltcorn-common.js +12 -3
  382. package/routes/admin.js +197 -131
  383. package/routes/tables.js +2 -2
  384. package/serve.js +52 -3
  385. package/tests/admin.test.js +3 -3
  386. package/tests/auth.test.js +5 -1
  387. package/wrapper.js +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@saltcorn/server",
3
- "version": "1.3.1-beta.11",
3
+ "version": "1.3.1-beta.12",
4
4
  "description": "Server app for Saltcorn, open-source no-code platform",
5
5
  "homepage": "https://saltcorn.com",
6
6
  "main": "index.js",
@@ -8,14 +8,14 @@
8
8
  "dependencies": {
9
9
  "@aws-sdk/client-s3": "^3.735.0",
10
10
  "@dr.pogodin/csurf": "1.15.0",
11
- "@saltcorn/admin-models": "1.3.1-beta.11",
12
- "@saltcorn/base-plugin": "1.3.1-beta.11",
13
- "@saltcorn/builder": "1.3.1-beta.11",
14
- "@saltcorn/data": "1.3.1-beta.11",
15
- "@saltcorn/filemanager": "1.3.1-beta.11",
16
- "@saltcorn/markup": "1.3.1-beta.11",
17
- "@saltcorn/plugins-loader": "1.3.1-beta.11",
18
- "@saltcorn/sbadmin2": "1.3.1-beta.11",
11
+ "@saltcorn/admin-models": "1.3.1-beta.12",
12
+ "@saltcorn/base-plugin": "1.3.1-beta.12",
13
+ "@saltcorn/builder": "1.3.1-beta.12",
14
+ "@saltcorn/data": "1.3.1-beta.12",
15
+ "@saltcorn/filemanager": "1.3.1-beta.12",
16
+ "@saltcorn/markup": "1.3.1-beta.12",
17
+ "@saltcorn/plugins-loader": "1.3.1-beta.12",
18
+ "@saltcorn/sbadmin2": "1.3.1-beta.12",
19
19
  "@socket.io/cluster-adapter": "^0.2.1",
20
20
  "@socket.io/sticky": "^1.0.1",
21
21
  "adm-zip": "0.5.16",
@@ -1812,10 +1812,14 @@ async function common_done(res, viewnameOrElem0, isWeb = true) {
1812
1812
  })
1813
1813
  );
1814
1814
  if (res.set_fields && (viewname || res.set_fields._viewname)) {
1815
- const form =
1815
+ let form =
1816
1816
  typeof viewnameOrElem === "string" || res.set_fields._viewname
1817
1817
  ? $(`form[data-viewname="${res.set_fields._viewname || viewname}"]`)
1818
1818
  : $(viewnameOrElem).closest("form[data-viewname]");
1819
+ if (form.length === 0 && viewnameOrElem?.querySelector) {
1820
+ const temp = viewnameOrElem.querySelector("form[data-viewname]");
1821
+ if (temp) form = $(temp);
1822
+ }
1819
1823
  if (form.length === 0 && set_state_fields) {
1820
1824
  // assume this is a filter
1821
1825
  set_state_fields(
@@ -2124,9 +2128,14 @@ function init_collab_room(viewname, eventCfgs) {
2124
2128
  }
2125
2129
  const joinFn = () => {
2126
2130
  socket.emit("join_collab_room", viewname, (ack) => {
2127
- if (ack && ack.status === "ok")
2131
+ if (ack?.status === "ok")
2128
2132
  console.log(`Joined collaboration room for view '${viewname}'`);
2129
- else console.error("Failed to join collaboration room:", ack);
2133
+ else if (ack?.status === "already_joined") {
2134
+ if (window._sc_loglevel > 5)
2135
+ console.log(
2136
+ `Already joined collaboration room for view '${viewname}'`
2137
+ );
2138
+ } else console.error("Failed to join collaboration room:", ack);
2130
2139
  });
2131
2140
  };
2132
2141
  if (socket.connected) joinFn();
package/routes/admin.js CHANGED
@@ -2305,6 +2305,24 @@ const buildDialogScript = (capacitorBuilderAvailable, isSbadmin2) =>
2305
2305
  }
2306
2306
  else
2307
2307
  console.error('versionInput not found');
2308
+
2309
+ const entryByRoleBox = document.getElementById('entryPointByRoleBoxId');
2310
+ if (entryByRoleBox) {
2311
+ entryByRoleBox.addEventListener('change', () => {
2312
+ const entryByRole = entryByRoleBox.checked;
2313
+ const entryRow = document.getElementById('entryPointRowId');
2314
+ const selector = document.getElementById('entrySelectorsId');
2315
+ if (entryByRole) {
2316
+ entryRow.classList.remove('border', 'border-2', 'p-3', 'rounded');
2317
+ selector.classList.add('d-none');
2318
+ }
2319
+ else {
2320
+ entryRow.classList.add('border', 'border-2', 'p-3', 'rounded');
2321
+ selector.classList.remove('d-none');
2322
+ }
2323
+ });
2324
+ } else
2325
+ console.error('entryByRoleBox not found');
2308
2326
  `)}
2309
2327
  </script>`;
2310
2328
 
@@ -2317,12 +2335,19 @@ const imageAvailable = async (preferedVersion) => {
2317
2335
  await image.inspect();
2318
2336
  return { installed: true, version: preferedVersion };
2319
2337
  } catch (e) {
2320
- const images = await docker.listImages({
2321
- filters: { reference: ["saltcorn/capacitor-builder:*"] },
2322
- });
2323
- const tags = images.flatMap((img) => img.RepoTags || []);
2324
- if (tags.length > 0)
2325
- return { installed: true, version: tags[0].split(":")[1] };
2338
+ try {
2339
+ const images = await docker.listImages({
2340
+ filters: { reference: ["saltcorn/capacitor-builder:*"] },
2341
+ });
2342
+ const tags = images.flatMap((img) => img.RepoTags || []);
2343
+ if (tags.length > 0)
2344
+ return { installed: true, version: tags[0].split(":")[1] };
2345
+ } catch (err) {
2346
+ getState().log(
2347
+ 5,
2348
+ `Error checking for capacitor-builder image: ${err.message || err}`
2349
+ );
2350
+ }
2326
2351
  return { installed: false };
2327
2352
  }
2328
2353
  };
@@ -2387,6 +2412,7 @@ router.get(
2387
2412
  const layout = getState().getLayout(req.user);
2388
2413
  const isSbadmin2 = layout === getState().layouts.sbadmin2;
2389
2414
  const pushEnabled = getState().getConfig("enable_push_notify", false);
2415
+ const isEntrypointByRole = builderSettings.entryPointByRole === "on";
2390
2416
  send_admin_page({
2391
2417
  res,
2392
2418
  req,
@@ -2446,152 +2472,188 @@ router.get(
2446
2472
  )
2447
2473
  ),
2448
2474
  div(
2449
- { class: "row" },
2475
+ { class: "row mb-3" },
2450
2476
  div(
2451
- { class: "col-sm-4" },
2452
- // 'view/page' tabs
2453
- ul(
2454
- { class: "nav nav-pills" },
2455
- li(
2456
- {
2457
- class: "nav-item",
2458
- onClick: "showEntrySelect('view')",
2459
- },
2460
- div(
2477
+ {
2478
+ class: `col-sm-4 mt-2 ${isEntrypointByRole ? "" : "border border-2 p-3 rounded"}`,
2479
+ id: "entryPointRowId",
2480
+ },
2481
+ div(
2482
+ { class: "row pb-2" },
2483
+ div(
2484
+ { class: "col-sm-6" },
2485
+ input({
2486
+ type: "checkbox",
2487
+ id: "entryPointByRoleBoxId",
2488
+ class: "form-check-input me-2",
2489
+ name: "entryPointByRole",
2490
+ checked: isEntrypointByRole,
2491
+ }),
2492
+ label(
2461
2493
  {
2462
- class: `nav-link ${
2463
- !builderSettings.entryPointType ||
2464
- builderSettings.entryPointType === "view"
2465
- ? "active"
2466
- : ""
2467
- }`,
2468
- id: "viewNavLinkID",
2494
+ for: "entryPointByRole",
2495
+ class: "form-label",
2469
2496
  },
2470
- req.__("View")
2497
+ req.__("Entry point by role"),
2498
+ a(
2499
+ {
2500
+ href: "javascript:ajax_modal('/admin/help/Entry point by role?')",
2501
+ },
2502
+ i({ class: "fas fa-question-circle ps-1" })
2503
+ )
2471
2504
  )
2472
- ),
2473
- li(
2474
- {
2475
- class: "nav-item",
2476
- onClick: "showEntrySelect('page')",
2477
- },
2478
- div(
2505
+ )
2506
+ ),
2507
+ // 'view/page/pagegroup' tabs
2508
+ div(
2509
+ {
2510
+ id: "entrySelectorsId",
2511
+ class: isEntrypointByRole ? "d-none" : "",
2512
+ },
2513
+ ul(
2514
+ { class: "nav nav-pills" },
2515
+ li(
2479
2516
  {
2480
- class: `nav-link ${
2481
- builderSettings.entryPointType === "page"
2482
- ? "active"
2483
- : ""
2484
- }`,
2485
- id: "pageNavLinkID",
2517
+ class: "nav-item",
2518
+ onClick: "showEntrySelect('view')",
2486
2519
  },
2487
- req.__("Page")
2520
+ div(
2521
+ {
2522
+ class: `nav-link ${
2523
+ !builderSettings.entryPointType ||
2524
+ builderSettings.entryPointType === "view"
2525
+ ? "active"
2526
+ : ""
2527
+ }`,
2528
+ id: "viewNavLinkID",
2529
+ },
2530
+ req.__("View")
2531
+ )
2488
2532
  ),
2489
2533
  li(
2490
2534
  {
2491
2535
  class: "nav-item",
2492
- onClick: "showEntrySelect('pagegroup')",
2536
+ onClick: "showEntrySelect('page')",
2493
2537
  },
2494
2538
  div(
2495
2539
  {
2496
2540
  class: `nav-link ${
2497
- builderSettings.entryPointType === "pagegroup"
2541
+ builderSettings.entryPointType === "page"
2498
2542
  ? "active"
2499
2543
  : ""
2500
2544
  }`,
2501
- id: "pagegroupNavLinkID",
2545
+ id: "pageNavLinkID",
2502
2546
  },
2503
- req.__("Pagegroup")
2504
- )
2505
- )
2506
- )
2507
- ),
2508
- // select entry-view
2509
- select(
2510
- {
2511
- class: `form-select ${
2512
- builderSettings.entryPointType === "page" ||
2513
- builderSettings.entryPointType === "pagegroup"
2514
- ? "d-none"
2515
- : ""
2516
- }`,
2517
- ...(!builderSettings.entryPointType ||
2518
- builderSettings.entryPointType === "view"
2519
- ? { name: "entryPoint" }
2520
- : {}),
2521
- id: "viewInputID",
2522
- },
2523
- views
2524
- .map((view) =>
2525
- option(
2547
+ req.__("Page")
2548
+ ),
2549
+ li(
2526
2550
  {
2527
- value: view.name,
2528
- selected:
2529
- builderSettings.entryPointType === "view" &&
2530
- builderSettings.entryPoint === view.name,
2551
+ class: "nav-item",
2552
+ onClick: "showEntrySelect('pagegroup')",
2531
2553
  },
2532
- view.name
2554
+ div(
2555
+ {
2556
+ class: `nav-link ${
2557
+ builderSettings.entryPointType ===
2558
+ "pagegroup"
2559
+ ? "active"
2560
+ : ""
2561
+ }`,
2562
+ id: "pagegroupNavLinkID",
2563
+ },
2564
+ req.__("Pagegroup")
2565
+ )
2533
2566
  )
2534
2567
  )
2535
- .join(",")
2536
- ),
2537
- // select entry-page
2538
- select(
2539
- {
2540
- class: `form-select ${
2541
- !builderSettings.entryPointType ||
2542
- builderSettings.entryPointType === "view" ||
2543
- builderSettings.entryPointType === "pagegroup"
2544
- ? "d-none"
2545
- : ""
2546
- }`,
2547
- ...(builderSettings.entryPointType === "page"
2548
- ? { name: "entryPoint" }
2549
- : {}),
2550
- id: "pageInputID",
2551
- },
2552
- pages
2553
- .map((page) =>
2554
- option(
2555
- {
2556
- value: page.name,
2557
- selected:
2558
- builderSettings.entryPointType === "page" &&
2559
- builderSettings.entryPoint === page.name,
2560
- },
2561
- page.name
2568
+ ),
2569
+ // select entry-view
2570
+ select(
2571
+ {
2572
+ class: `form-select ${
2573
+ builderSettings.entryPointType === "page" ||
2574
+ builderSettings.entryPointType === "pagegroup"
2575
+ ? "d-none"
2576
+ : ""
2577
+ }`,
2578
+ ...(!builderSettings.entryPointType ||
2579
+ builderSettings.entryPointType === "view"
2580
+ ? { name: "entryPoint" }
2581
+ : {}),
2582
+ id: "viewInputID",
2583
+ },
2584
+ views
2585
+ .map((view) =>
2586
+ option(
2587
+ {
2588
+ value: view.name,
2589
+ selected:
2590
+ builderSettings.entryPointType === "view" &&
2591
+ builderSettings.entryPoint === view.name,
2592
+ },
2593
+ view.name
2594
+ )
2562
2595
  )
2563
- )
2564
- .join("")
2565
- ),
2566
- // select entry-pagegroup
2567
- select(
2568
- {
2569
- class: `form-select ${
2570
- !builderSettings.entryPointType ||
2571
- builderSettings.entryPointType === "view" ||
2572
- builderSettings.entryPointType === "page"
2573
- ? "d-none"
2574
- : ""
2575
- }`,
2576
- ...(builderSettings.entryPointType === "pagegroup"
2577
- ? { name: "entryPoint" }
2578
- : {}),
2579
- id: "pagegroupInputID",
2580
- },
2581
- pageGroups
2582
- .map((group) =>
2583
- option(
2584
- {
2585
- value: group.name,
2586
- selected:
2587
- builderSettings.entryPointType ===
2588
- "pagegroup" &&
2589
- builderSettings.entryPoint === group.name,
2590
- },
2591
- group.name
2596
+ .join(",")
2597
+ ),
2598
+ // select entry-page
2599
+ select(
2600
+ {
2601
+ class: `form-select ${
2602
+ !builderSettings.entryPointType ||
2603
+ builderSettings.entryPointType === "view" ||
2604
+ builderSettings.entryPointType === "pagegroup"
2605
+ ? "d-none"
2606
+ : ""
2607
+ }`,
2608
+ ...(builderSettings.entryPointType === "page"
2609
+ ? { name: "entryPoint" }
2610
+ : {}),
2611
+ id: "pageInputID",
2612
+ },
2613
+ pages
2614
+ .map((page) =>
2615
+ option(
2616
+ {
2617
+ value: page.name,
2618
+ selected:
2619
+ builderSettings.entryPointType === "page" &&
2620
+ builderSettings.entryPoint === page.name,
2621
+ },
2622
+ page.name
2623
+ )
2592
2624
  )
2593
- )
2594
- .join("")
2625
+ .join("")
2626
+ ),
2627
+ // select entry-pagegroup
2628
+ select(
2629
+ {
2630
+ class: `form-select ${
2631
+ !builderSettings.entryPointType ||
2632
+ builderSettings.entryPointType === "view" ||
2633
+ builderSettings.entryPointType === "page"
2634
+ ? "d-none"
2635
+ : ""
2636
+ }`,
2637
+ ...(builderSettings.entryPointType === "pagegroup"
2638
+ ? { name: "entryPoint" }
2639
+ : {}),
2640
+ id: "pagegroupInputID",
2641
+ },
2642
+ pageGroups
2643
+ .map((group) =>
2644
+ option(
2645
+ {
2646
+ value: group.name,
2647
+ selected:
2648
+ builderSettings.entryPointType ===
2649
+ "pagegroup" &&
2650
+ builderSettings.entryPoint === group.name,
2651
+ },
2652
+ group.name
2653
+ )
2654
+ )
2655
+ .join("")
2656
+ )
2595
2657
  )
2596
2658
  ),
2597
2659
  div(
@@ -3762,6 +3824,7 @@ router.post(
3762
3824
  let {
3763
3825
  entryPoint,
3764
3826
  entryPointType,
3827
+ entryPointByRole,
3765
3828
  androidPlatform,
3766
3829
  iOSPlatform,
3767
3830
  useDocker,
@@ -3865,10 +3928,12 @@ router.post(
3865
3928
  await File.new_folder(outDirName, "/mobile_app");
3866
3929
  const spawnParams = [
3867
3930
  "build-app",
3868
- "-e",
3869
- entryPoint,
3870
3931
  "-t",
3871
- entryPointType === "pagegroup" ? "page" : entryPointType,
3932
+ entryPointByRole
3933
+ ? "byrole"
3934
+ : entryPointType === "pagegroup"
3935
+ ? "page"
3936
+ : entryPointType,
3872
3937
  "-c",
3873
3938
  outDir,
3874
3939
  "-b",
@@ -3876,6 +3941,7 @@ router.post(
3876
3941
  "-u",
3877
3942
  req.user.email, // ensured by isAdmin
3878
3943
  ];
3944
+ if (!entryPointByRole) spawnParams.push("-e", entryPoint);
3879
3945
  if (useDocker) spawnParams.push("-d");
3880
3946
  if (androidPlatform) spawnParams.push("-p", "android");
3881
3947
  if (iOSPlatform) {
package/routes/tables.js CHANGED
@@ -848,7 +848,7 @@ router.get(
848
848
  r.typename +
849
849
  span({ class: "badge bg-danger ms-1" }, "Unknown type"),
850
850
  },
851
- ...(table.external || !user_can_edit_tables
851
+ ...(table.external || !user_can_edit_tables || table.provider_name
852
852
  ? []
853
853
  : [
854
854
  {
@@ -865,7 +865,7 @@ router.get(
865
865
  key: (r) => attribBadges(r),
866
866
  },
867
867
  { label: req.__("Variable name"), key: (t) => code(t.name) },
868
- ...(table.external || !user_can_edit_tables
868
+ ...(table.external || !user_can_edit_tables || table.provider_name
869
869
  ? []
870
870
  : [
871
871
  {
package/serve.js CHANGED
@@ -86,7 +86,12 @@ const ensureJwtSecret = () => {
86
86
  */
87
87
  const ensurePluginsFolder = async () => {
88
88
  const rootFolder = envPaths("saltcorn", { suffix: "plugins" }).data;
89
- const staticDeps = ["@saltcorn/markup", "@saltcorn/data", "jest"];
89
+ const staticDeps = [
90
+ "@saltcorn/markup",
91
+ "@saltcorn/data",
92
+ "@saltcorn/postgres",
93
+ "jest",
94
+ ];
90
95
  const allPluginFolders = new Set();
91
96
  await eachTenant(async () => {
92
97
  try {
@@ -639,8 +644,20 @@ const setupSocket = (subdomainOffset, pruneSessionInterval, ...servers) => {
639
644
  const role_id = user ? user.role_id : 100;
640
645
  if (view.min_role < role_id)
641
646
  throw new Error("Not authorized to join collaboration room");
642
- socket.join(`_${tenant}_collab_room_`);
643
- if (typeof callback === "function") callback({ status: "ok" });
647
+ const roomName = `_${tenant}_collab_room_`;
648
+ if (!socket.rooms.has(roomName)) {
649
+ socket.join(`_${tenant}_collab_room_`);
650
+ if (typeof callback === "function") callback({ status: "ok" });
651
+ const socketIds = await getState().getConfig(
652
+ "joined_real_time_socket_ids",
653
+ []
654
+ );
655
+ socketIds.push(socket.id);
656
+ await getState().setConfig("joined_real_time_socket_ids", [
657
+ ...new Set(socketIds),
658
+ ]);
659
+ } else if (typeof callback === "function")
660
+ callback({ status: "already_joined" });
644
661
  } catch (err) {
645
662
  getState().log(1, `Socket join_collab_room: ${err.stack}`);
646
663
  if (typeof callback === "function")
@@ -662,6 +679,14 @@ const setupSocket = (subdomainOffset, pruneSessionInterval, ...servers) => {
662
679
  if (!user) throw new Error("Not authorized");
663
680
  socket.join(`_${tenant}_dynamic_update_room`);
664
681
  socket.join(`_${tenant}:${user.id}_dynamic_update_room`);
682
+ const socketIds = await getState().getConfig(
683
+ "joined_dynamic_update_socket_ids",
684
+ []
685
+ );
686
+ socketIds.push(socket.id);
687
+ await getState().setConfig("joined_dynamic_update_socket_ids", [
688
+ ...new Set(socketIds),
689
+ ]);
665
690
  if (typeof callback === "function") callback({ status: "ok" });
666
691
  } catch (err) {
667
692
  getState().log(1, `Socket join_dynamic_update_room: ${err.stack}`);
@@ -681,6 +706,30 @@ const setupSocket = (subdomainOffset, pruneSessionInterval, ...servers) => {
681
706
  const socketIds = state.getConfig("joined_log_socket_ids");
682
707
  const newSocketIds = socketIds.filter((id) => id !== socket.id);
683
708
  await state.setConfig("joined_log_socket_ids", newSocketIds);
709
+
710
+ const dynamicSocketIds = state.getConfig(
711
+ "joined_dynamic_update_socket_ids",
712
+ []
713
+ );
714
+ const newDynamicSocketIds = dynamicSocketIds.filter(
715
+ (id) => id !== socket.id
716
+ );
717
+ await state.setConfig(
718
+ "joined_dynamic_update_socket_ids",
719
+ newDynamicSocketIds
720
+ );
721
+
722
+ const realTimeSocketIds = state.getConfig(
723
+ "joined_real_time_socket_ids",
724
+ []
725
+ );
726
+ const newRealTimeSocketIds = realTimeSocketIds.filter(
727
+ (id) => id !== socket.id
728
+ );
729
+ await state.setConfig(
730
+ "joined_real_time_socket_ids",
731
+ newRealTimeSocketIds
732
+ );
684
733
  } else {
685
734
  console.error("No state found in socket disconnect");
686
735
  console.error("The current tenantSchema is:", db.getTenantSchema());
@@ -387,7 +387,7 @@ describe("actions", () => {
387
387
  .send("table_id=2")
388
388
  .send("name=mynewaction")
389
389
  .send("when_trigger=Insert")
390
- .expect(toRedirect("/actions/configure/7"));
390
+ .expect(toRedirect("/actions/configure/8"));
391
391
  });
392
392
  it("show edit", async () => {
393
393
  const app = await getApp({ disableCsrf: true });
@@ -451,9 +451,9 @@ describe("actions", () => {
451
451
  .send("action=run_js_code")
452
452
  .send("when_trigger=API+call")
453
453
  .send("min_role=1")
454
- .expect(toRedirect("/actions/configure/8"));
454
+ .expect(toRedirect("/actions/configure/9"));
455
455
  await request(app)
456
- .post("/actions/configure/8")
456
+ .post("/actions/configure/9")
457
457
  .set("Cookie", loginCookie)
458
458
  .send("code=return 27")
459
459
  .expect(toRedirect("/actions/"));
@@ -21,8 +21,12 @@ const { get_reset_link, generate_email } = require("../auth/resetpw");
21
21
  const i18n = require("i18n");
22
22
  const path = require("path");
23
23
  const fs = require("fs");
24
+ const { sleep } = require("@saltcorn/data/utils");
24
25
 
25
- afterAll(db.close);
26
+ afterAll(async () => {
27
+ await sleep(100);
28
+ db.close();
29
+ });
26
30
  beforeAll(async () => {
27
31
  await resetToFixtures();
28
32
  });
package/wrapper.js CHANGED
@@ -158,7 +158,7 @@ const get_headers = (req, version_tag, description, extras = []) => {
158
158
  }
159
159
  from_cfg.push({
160
160
  scriptBody: `var dynamic_updates_cfg = ${JSON.stringify({
161
- enabled: dynamic_updates_enabled,
161
+ enabled: dynamic_updates_enabled && req.user?.id,
162
162
  })}`,
163
163
  });
164
164
  return [