@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.
- package/docs/assets/search.js +1 -1
- package/docs/classes/_saltcorn_common_code.Relation.html +10 -10
- package/docs/classes/_saltcorn_common_code.RelationsFinder.html +5 -5
- package/docs/classes/_saltcorn_data.models.Crash.html +17 -17
- package/docs/classes/_saltcorn_data.models.EventLog-1.html +19 -19
- package/docs/classes/_saltcorn_data.models.Field.html +74 -74
- package/docs/classes/_saltcorn_data.models.FieldRepeat.html +16 -16
- package/docs/classes/_saltcorn_data.models.File-1.html +48 -48
- package/docs/classes/_saltcorn_data.models.Form-1.html +39 -39
- package/docs/classes/_saltcorn_data.models.Library.html +13 -13
- package/docs/classes/_saltcorn_data.models.Page.html +24 -24
- package/docs/classes/_saltcorn_data.models.PageGroup-1.html +25 -25
- package/docs/classes/_saltcorn_data.models.Plugin.html +25 -25
- package/docs/classes/_saltcorn_data.models.Role.html +9 -9
- package/docs/classes/_saltcorn_data.models.Table-1.html +92 -92
- package/docs/classes/_saltcorn_data.models.TableConstraint.html +14 -14
- package/docs/classes/_saltcorn_data.models.Trigger.html +37 -37
- package/docs/classes/_saltcorn_data.models.User.html +48 -48
- package/docs/classes/_saltcorn_data.models.View-1.html +55 -55
- package/docs/classes/_saltcorn_data.models.Workflow.html +17 -17
- package/docs/classes/_saltcorn_data.models.WorkflowRun.html +35 -35
- package/docs/classes/_saltcorn_data.models.WorkflowStep.html +25 -25
- package/docs/classes/_saltcorn_data.models.WorkflowTrace.html +18 -18
- package/docs/classes/_saltcorn_mobile_builder.MobileBuilder.html +37 -37
- package/docs/enums/_saltcorn_common_code.RelationType.html +7 -7
- package/docs/enums/_saltcorn_common_code.ViewDisplayType.html +4 -4
- package/docs/functions/_saltcorn_admin_models.backup.create_backup.html +1 -1
- package/docs/functions/_saltcorn_admin_models.backup.create_csv_from_rows.html +1 -1
- package/docs/functions/_saltcorn_admin_models.backup.restore.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.add_to_menu.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.can_install_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.fetch_available_packs.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.fetch_pack_by_name.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.install_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.library_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.model_instance_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.model_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.page_group_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.page_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.plugin_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.role_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.table_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.trigger_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.uninstall_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.view_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.copy_tenant_template.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.create_tenant.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.deleteTenant.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.domain_sanitize.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.eachTenant.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.getAllTenantRows.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.getAllTenants.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.insertTenant.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.switchToTenant.html +1 -1
- package/docs/functions/_saltcorn_common_code.buildTableCaches.html +1 -1
- package/docs/functions/_saltcorn_common_code.parseLegacyRelation.html +1 -1
- package/docs/functions/_saltcorn_common_code.parseRelationPath.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.check_email_mask.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.deleteConfig.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.getAllConfig.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.getConfig.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.get_base_url.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.get_latest_npm_version.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.remove_from_menu.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.save_menu_items.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.setConfig.html +1 -1
- package/docs/functions/_saltcorn_data.models.discovery.discover_tables.html +5 -3
- package/docs/functions/_saltcorn_data.models.discovery.discoverable_tables.html +7 -3
- package/docs/functions/_saltcorn_data.models.discovery.findType.html +1 -1
- package/docs/functions/_saltcorn_data.models.discovery.get_existing_views.html +1 -1
- package/docs/functions/_saltcorn_data.models.discovery.implement_discovery.html +1 -1
- package/docs/functions/_saltcorn_data.models.email.getMailTransport.html +1 -1
- package/docs/functions/_saltcorn_data.models.email.send_verification_email.html +1 -1
- package/docs/functions/_saltcorn_data.models.email.viewToEmailHtml.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.apply_calculated_fields.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.apply_calculated_fields_stored.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.eval_expression.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.expressionValidator.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.get_async_expression_function.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.get_expression_function.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.jsexprToWhere.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.recalculate_for_stored.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.transform_for_async.html +1 -1
- package/docs/functions/_saltcorn_data.models.layout.eachView.html +1 -1
- package/docs/functions/_saltcorn_data.models.layout.getStringsForI18n.html +1 -1
- package/docs/functions/_saltcorn_data.models.layout.getViews.html +1 -1
- package/docs/functions/_saltcorn_data.models.layout.translateLayout.html +1 -1
- package/docs/functions/_saltcorn_data.models.layout.traverse.html +1 -1
- package/docs/functions/_saltcorn_data.models.layout.traverseSync.html +1 -1
- package/docs/functions/_saltcorn_data.models.random.all_views.html +1 -1
- package/docs/functions/_saltcorn_data.models.random.fill_table_row.html +1 -1
- package/docs/functions/_saltcorn_data.models.random.initial_view.html +1 -1
- package/docs/functions/_saltcorn_data.models.random.random_table.html +1 -1
- package/docs/functions/_saltcorn_db_common.buildInsertBulkSql.html +1 -1
- package/docs/functions/_saltcorn_db_common.buildInsertSql.html +1 -1
- package/docs/functions/_saltcorn_db_common.commitAndBeginNewTransaction.html +1 -1
- package/docs/functions/_saltcorn_db_common.doCount.html +1 -1
- package/docs/functions/_saltcorn_db_common.doDeleteWhere.html +1 -1
- package/docs/functions/_saltcorn_db_common.doListScTables.html +1 -1
- package/docs/functions/_saltcorn_db_common.doListTables.html +1 -1
- package/docs/functions/_saltcorn_db_common.doListUserDefinedTables.html +1 -1
- package/docs/functions/_saltcorn_db_common.do_add_index.html +1 -1
- package/docs/functions/_saltcorn_db_common.do_drop_index.html +1 -1
- package/docs/functions/_saltcorn_db_common.ftsFieldsSqlExpr.html +1 -1
- package/docs/functions/_saltcorn_db_common.mkSelectOptions.html +1 -1
- package/docs/functions/_saltcorn_db_common.mkVal.html +1 -1
- package/docs/functions/_saltcorn_db_common.mkWhere.html +1 -1
- package/docs/functions/_saltcorn_db_common.multi_tenant.enable_multi_tenant.html +1 -1
- package/docs/functions/_saltcorn_db_common.multi_tenant.getRequestContext.html +1 -1
- package/docs/functions/_saltcorn_db_common.multi_tenant.getTenantSchema.html +1 -1
- package/docs/functions/_saltcorn_db_common.multi_tenant.init.html +1 -1
- package/docs/functions/_saltcorn_db_common.multi_tenant.is_it_multi_tenant.html +1 -1
- package/docs/functions/_saltcorn_db_common.multi_tenant.runWithTenant.html +1 -1
- package/docs/functions/_saltcorn_db_common.orderByIsObject.html +1 -1
- package/docs/functions/_saltcorn_db_common.orderByIsOperator.html +1 -1
- package/docs/functions/_saltcorn_db_common.prefixFieldsInWhere.html +1 -1
- package/docs/functions/_saltcorn_db_common.reprAsJson.html +1 -1
- package/docs/functions/_saltcorn_db_common.slugify.html +1 -1
- package/docs/functions/_saltcorn_db_common.sqlBinOp.html +1 -1
- package/docs/functions/_saltcorn_db_common.sqlFun.html +1 -1
- package/docs/functions/_saltcorn_db_common.sqlsanitize.html +1 -1
- package/docs/functions/_saltcorn_db_common.sqlsanitizeAllowDots.html +1 -1
- package/docs/functions/_saltcorn_db_common.subSelectWhere.html +1 -1
- package/docs/functions/_saltcorn_db_common.tryCatchInTransaction.html +1 -1
- package/docs/functions/_saltcorn_db_common.withTransaction.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.androidFeatures.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.androidPermissions.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.buildTablesFile.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyPrepopulatedDb.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyServerFiles.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyShareExtFiles.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copySiteLogo.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyTranslationFiles.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.createSqliteDb.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.decodeProvisioningProfile.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.extractDomain.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.generateAndroidVersionCode.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyAndroidManifest.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyConfigXml.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyGradleConfig.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyInfoPlist.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyXcodeProjectFile.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepAppIcon.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareAppIcon.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareBuildDir.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareExportOptionsPlist.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareSplashIcon.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareSplashPage.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeCapacitorConfig.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeCfgFile.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeDataExtractionRules.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeNetworkSecurityConfig.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writePodfile.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writePrivacyInfo.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.bundleMobileAppCode.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.bundlePackagesAndPlugins.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.copyMobileAppDirs.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.copyPublicDirs.html +1 -1
- package/docs/functions/_saltcorn_sqlite.add_index.html +1 -1
- package/docs/functions/_saltcorn_sqlite.add_unique_constraint.html +1 -1
- package/docs/functions/_saltcorn_sqlite.begin.html +1 -1
- package/docs/functions/_saltcorn_sqlite.changeConnection.html +1 -1
- package/docs/functions/_saltcorn_sqlite.close.html +1 -1
- package/docs/functions/_saltcorn_sqlite.commit.html +1 -1
- package/docs/functions/_saltcorn_sqlite.count.html +1 -1
- package/docs/functions/_saltcorn_sqlite.deleteWhere.html +1 -1
- package/docs/functions/_saltcorn_sqlite.dropTable.html +1 -1
- package/docs/functions/_saltcorn_sqlite.dropTables.html +1 -1
- package/docs/functions/_saltcorn_sqlite.drop_index.html +1 -1
- package/docs/functions/_saltcorn_sqlite.drop_reset_schema.html +1 -1
- package/docs/functions/_saltcorn_sqlite.drop_unique_constraint.html +1 -1
- package/docs/functions/_saltcorn_sqlite.getVersion.html +1 -1
- package/docs/functions/_saltcorn_sqlite.get_db_filepath.html +1 -1
- package/docs/functions/_saltcorn_sqlite.get_sql_logging.html +1 -1
- package/docs/functions/_saltcorn_sqlite.init.html +1 -1
- package/docs/functions/_saltcorn_sqlite.insert.html +1 -1
- package/docs/functions/_saltcorn_sqlite.listScTables.html +1 -1
- package/docs/functions/_saltcorn_sqlite.listTables.html +1 -1
- package/docs/functions/_saltcorn_sqlite.listUserDefinedTables.html +1 -1
- package/docs/functions/_saltcorn_sqlite.query.html +1 -1
- package/docs/functions/_saltcorn_sqlite.rollback.html +1 -1
- package/docs/functions/_saltcorn_sqlite.select.html +1 -1
- package/docs/functions/_saltcorn_sqlite.selectMaybeOne.html +1 -1
- package/docs/functions/_saltcorn_sqlite.selectOne.html +1 -1
- package/docs/functions/_saltcorn_sqlite.set_sql_logging.html +1 -1
- package/docs/functions/_saltcorn_sqlite.sql_log.html +1 -1
- package/docs/functions/_saltcorn_sqlite.update.html +1 -1
- package/docs/functions/_saltcorn_sqlite.updateWhere.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.add_index.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.add_unique_constraint.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.count.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.deleteWhere.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.drop_index.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.drop_reset_schema.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.drop_unique_constraint.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.init.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.insert.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.insertRows.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.listScTables.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.listTables.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.listUserDefinedTables.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.query.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.select.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.selectMaybeOne.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.selectOne.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.setConnectionObject.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.tableExists.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.time.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.update.html +1 -1
- package/docs/functions/_saltcorn_types.ModelAbstracts.abstract_field.instanceOfField.html +1 -1
- package/docs/functions/_saltcorn_types.ModelAbstracts.abstract_page.instanceOfPage.html +1 -1
- package/docs/functions/_saltcorn_types.ModelAbstracts.abstract_view.instanceOfView.html +1 -1
- package/docs/functions/_saltcorn_types.Types.base_types.instanceOWithHtmlFile.html +1 -1
- package/docs/functions/_saltcorn_types.Types.common_types.instanceOfErrorMsg.html +1 -1
- package/docs/functions/_saltcorn_types.Types.common_types.instanceOfSuccessMsg.html +1 -1
- package/docs/functions/_saltcorn_types.Types.common_types.instanceOfType.html +1 -1
- package/docs/functions/_saltcorn_types.generators.generateBool.html +1 -1
- package/docs/functions/_saltcorn_types.generators.generateString.html +1 -1
- package/docs/functions/_saltcorn_types.generators.num_between.html +1 -1
- package/docs/functions/_saltcorn_types.generators.oneOf.html +1 -1
- package/docs/interfaces/_saltcorn_mobile_builder.common_build_utils.ScCapacitorConfig.html +10 -10
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_field.AbstractField.html +15 -15
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_field.AbstractFieldRepeat.html +3 -3
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_form.AbstractForm.html +27 -27
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_page.AbstractPage.html +7 -7
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_role.AbstractRole.html +3 -3
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_table.AbstractTable.html +11 -11
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_trigger.AbstractTrigger.html +17 -17
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_view.AbstractView.html +10 -10
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_workflow.AbstractWorkflow.html +13 -13
- package/docs/modules/_saltcorn_admin_models.backup.html +1 -1
- package/docs/modules/_saltcorn_admin_models.html +1 -1
- package/docs/modules/_saltcorn_admin_models.pack.html +1 -1
- package/docs/modules/_saltcorn_admin_models.tenant.html +1 -1
- package/docs/modules/_saltcorn_common_code.html +1 -1
- package/docs/modules/_saltcorn_data.html +3 -3
- package/docs/modules/_saltcorn_data.models.EventLog.html +2 -2
- package/docs/modules/_saltcorn_data.models.File.html +2 -2
- package/docs/modules/_saltcorn_data.models.Form.html +2 -2
- package/docs/modules/_saltcorn_data.models.PageGroup.html +2 -2
- package/docs/modules/_saltcorn_data.models.Table.html +2 -2
- package/docs/modules/_saltcorn_data.models.View.html +2 -2
- package/docs/modules/_saltcorn_data.models.config.html +1 -1
- package/docs/modules/_saltcorn_data.models.discovery.html +1 -1
- package/docs/modules/_saltcorn_data.models.email.html +1 -1
- package/docs/modules/_saltcorn_data.models.expression.html +1 -1
- package/docs/modules/_saltcorn_data.models.html +1 -1
- package/docs/modules/_saltcorn_data.models.layout.html +1 -1
- package/docs/modules/_saltcorn_data.models.random.html +1 -1
- package/docs/modules/_saltcorn_data.models.scheduler.html +1 -1
- package/docs/modules/_saltcorn_data.plugin_helper.html +1 -1
- package/docs/modules/_saltcorn_data.utils.html +1 -1
- package/docs/modules/_saltcorn_db_common.html +2 -2
- package/docs/modules/_saltcorn_db_common.multi_tenant.html +1 -1
- package/docs/modules/_saltcorn_markup.html +2 -2
- package/docs/modules/_saltcorn_mobile_builder.common_build_utils.html +1 -1
- package/docs/modules/_saltcorn_mobile_builder.html +1 -1
- package/docs/modules/_saltcorn_mobile_builder.package_bundle_utils.html +1 -1
- package/docs/modules/_saltcorn_sqlite.html +1 -1
- package/docs/modules/_saltcorn_sqlite_mobile.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_field.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_form.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_library.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_page.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_plugin.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_role.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_table.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_trigger.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_view.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_workflow.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.html +1 -1
- package/docs/modules/_saltcorn_types.Types.base_types.html +1 -1
- package/docs/modules/_saltcorn_types.Types.common_types.html +1 -1
- package/docs/modules/_saltcorn_types.Types.html +1 -1
- package/docs/modules/_saltcorn_types.generators.html +1 -1
- package/docs/modules/_saltcorn_types.html +1 -1
- package/docs/types/_saltcorn_data.models.EventLog.EventLogCfg.html +1 -1
- package/docs/types/_saltcorn_data.models.File.FileCfg.html +1 -1
- package/docs/types/_saltcorn_data.models.Form.AdditionalButton.html +1 -1
- package/docs/types/_saltcorn_data.models.Form.FormCfg.html +1 -1
- package/docs/types/_saltcorn_data.models.PageGroup.ScreenInfoParams.html +1 -1
- package/docs/types/_saltcorn_data.models.Table.ChildRelations.html +1 -1
- package/docs/types/_saltcorn_data.models.Table.ParentRelations.html +1 -1
- package/docs/types/_saltcorn_data.models.Table.RelationData.html +1 -1
- package/docs/types/_saltcorn_data.models.View.FindViewsPred.html +1 -1
- package/docs/types/_saltcorn_db_common.AggregationOptions.html +1 -1
- package/docs/types/_saltcorn_db_common.CoordOpts.html +1 -1
- package/docs/types/_saltcorn_db_common.DatabaseClient.html +1 -1
- package/docs/types/_saltcorn_db_common.JoinField.html +1 -1
- package/docs/types/_saltcorn_db_common.JoinFields.html +1 -1
- package/docs/types/_saltcorn_db_common.JoinOptions.html +1 -1
- package/docs/types/_saltcorn_db_common.JsonPath.html +1 -1
- package/docs/types/_saltcorn_db_common.JsonPathElem.html +1 -1
- package/docs/types/_saltcorn_db_common.Operator.html +1 -1
- package/docs/types/_saltcorn_db_common.PartialSome.html +1 -1
- package/docs/types/_saltcorn_db_common.PrimaryKeyValue.html +1 -1
- package/docs/types/_saltcorn_db_common.Row.html +1 -1
- package/docs/types/_saltcorn_db_common.SelectOptions.html +1 -1
- package/docs/types/_saltcorn_db_common.SqlAndValues.html +1 -1
- package/docs/types/_saltcorn_db_common.StrongRow.html +1 -1
- package/docs/types/_saltcorn_db_common.SubselectOptions.html +1 -1
- package/docs/types/_saltcorn_db_common.Value.html +1 -1
- package/docs/types/_saltcorn_db_common.Where.html +1 -1
- package/docs/types/_saltcorn_mobile_builder.IosCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_field.FieldCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_field.InputType.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_form.AdditionalButton.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_library.LibraryCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_library.LibraryPack.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_page.PageCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_page.PagePack.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_plugin.PluginCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_plugin.PluginPack.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_role.RoleCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_role.RolePack.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_table.TableCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_table.TablePack.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_trigger.TriggerCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_trigger.TriggerPack.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_view.ViewCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_view.ViewPack.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_workflow.ConfigWorkflowStep.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_workflow.RunResult.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.Action.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.AuthenticationMethod.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.CalcJoinfield.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.CapacitorPlugin.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.CodePagePack.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.Column.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.ConnectObjType.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.ConnectedObjects.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.CopilotSkill.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.ErrorObj.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.FieldLike.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.FieldView.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.Header.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.JoinFieldOption.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.Layout.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.MobileConfig.html +4 -2
- package/docs/types/_saltcorn_types.Types.base_types.ModelPattern.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.Pack.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.Plugin.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginFunction.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginLayout.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginRoute.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginSourceType.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginType.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginWrap.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginWrapArg.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.RelationOption.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.Req.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.Res.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.ResultType.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.RouteAction.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.RunExtra.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.SlugStepType.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.StepResType.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.SubField.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.TableProvider.html +5 -5
- package/docs/types/_saltcorn_types.Types.base_types.TableQuery.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.Tablely.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.ViewTemplate.html +1 -1
- package/docs/types/_saltcorn_types.Types.common_types.ErrorMessage.html +1 -1
- package/docs/types/_saltcorn_types.Types.common_types.GenObj.html +1 -1
- package/docs/types/_saltcorn_types.Types.common_types.ReqRes.html +1 -1
- package/docs/types/_saltcorn_types.Types.common_types.ResultMessage.html +1 -1
- package/docs/types/_saltcorn_types.Types.common_types.SuccessMessage.html +1 -1
- package/docs/types/_saltcorn_types.Types.common_types.Type.html +1 -1
- package/docs/variables/_saltcorn_data.db.html +1 -1
- package/docs/variables/_saltcorn_data.migrations.html +1 -1
- package/docs/variables/_saltcorn_data.models.config.available_languages.html +1 -1
- package/docs/variables/_saltcorn_data.models.config.configTypes.html +1 -1
- package/docs/variables/_saltcorn_data.models.scheduler.runScheduler.html +1 -1
- package/docs/variables/_saltcorn_data.plugin_helper.run_action_column.html +1 -1
- package/docs/variables/_saltcorn_data.utils.NotAuthorized.html +1 -1
- package/docs/variables/_saltcorn_data.utils.isPushEnabled.html +1 -1
- package/docs/variables/_saltcorn_data.utils.sleep.html +1 -1
- package/docs/variables/_saltcorn_db_common.multi_tenant.tenantNamespace.html +1 -1
- package/help/Entry point by role.tmd +1 -0
- package/package.json +9 -9
- package/public/saltcorn-common.js +12 -3
- package/routes/admin.js +197 -131
- package/routes/tables.js +2 -2
- package/serve.js +52 -3
- package/tests/admin.test.js +3 -3
- package/tests/auth.test.js +5 -1
- 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.
|
|
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.
|
|
12
|
-
"@saltcorn/base-plugin": "1.3.1-beta.
|
|
13
|
-
"@saltcorn/builder": "1.3.1-beta.
|
|
14
|
-
"@saltcorn/data": "1.3.1-beta.
|
|
15
|
-
"@saltcorn/filemanager": "1.3.1-beta.
|
|
16
|
-
"@saltcorn/markup": "1.3.1-beta.
|
|
17
|
-
"@saltcorn/plugins-loader": "1.3.1-beta.
|
|
18
|
-
"@saltcorn/sbadmin2": "1.3.1-beta.
|
|
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
|
-
|
|
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
|
|
2131
|
+
if (ack?.status === "ok")
|
|
2128
2132
|
console.log(`Joined collaboration room for view '${viewname}'`);
|
|
2129
|
-
else
|
|
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
|
-
|
|
2321
|
-
|
|
2322
|
-
|
|
2323
|
-
|
|
2324
|
-
|
|
2325
|
-
|
|
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
|
-
{
|
|
2452
|
-
|
|
2453
|
-
|
|
2454
|
-
|
|
2455
|
-
|
|
2456
|
-
|
|
2457
|
-
|
|
2458
|
-
|
|
2459
|
-
|
|
2460
|
-
|
|
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
|
-
|
|
2463
|
-
|
|
2464
|
-
builderSettings.entryPointType === "view"
|
|
2465
|
-
? "active"
|
|
2466
|
-
: ""
|
|
2467
|
-
}`,
|
|
2468
|
-
id: "viewNavLinkID",
|
|
2494
|
+
for: "entryPointByRole",
|
|
2495
|
+
class: "form-label",
|
|
2469
2496
|
},
|
|
2470
|
-
req.__("
|
|
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
|
-
|
|
2474
|
-
|
|
2475
|
-
|
|
2476
|
-
|
|
2477
|
-
|
|
2478
|
-
|
|
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:
|
|
2481
|
-
|
|
2482
|
-
? "active"
|
|
2483
|
-
: ""
|
|
2484
|
-
}`,
|
|
2485
|
-
id: "pageNavLinkID",
|
|
2517
|
+
class: "nav-item",
|
|
2518
|
+
onClick: "showEntrySelect('view')",
|
|
2486
2519
|
},
|
|
2487
|
-
|
|
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('
|
|
2536
|
+
onClick: "showEntrySelect('page')",
|
|
2493
2537
|
},
|
|
2494
2538
|
div(
|
|
2495
2539
|
{
|
|
2496
2540
|
class: `nav-link ${
|
|
2497
|
-
builderSettings.entryPointType === "
|
|
2541
|
+
builderSettings.entryPointType === "page"
|
|
2498
2542
|
? "active"
|
|
2499
2543
|
: ""
|
|
2500
2544
|
}`,
|
|
2501
|
-
id: "
|
|
2545
|
+
id: "pageNavLinkID",
|
|
2502
2546
|
},
|
|
2503
|
-
req.__("
|
|
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
|
-
|
|
2528
|
-
|
|
2529
|
-
builderSettings.entryPointType === "view" &&
|
|
2530
|
-
builderSettings.entryPoint === view.name,
|
|
2551
|
+
class: "nav-item",
|
|
2552
|
+
onClick: "showEntrySelect('pagegroup')",
|
|
2531
2553
|
},
|
|
2532
|
-
|
|
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
|
-
|
|
2536
|
-
|
|
2537
|
-
|
|
2538
|
-
|
|
2539
|
-
|
|
2540
|
-
|
|
2541
|
-
|
|
2542
|
-
|
|
2543
|
-
|
|
2544
|
-
|
|
2545
|
-
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
:
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
|
|
2553
|
-
|
|
2554
|
-
|
|
2555
|
-
|
|
2556
|
-
|
|
2557
|
-
|
|
2558
|
-
|
|
2559
|
-
|
|
2560
|
-
|
|
2561
|
-
|
|
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
|
-
|
|
2565
|
-
|
|
2566
|
-
|
|
2567
|
-
|
|
2568
|
-
|
|
2569
|
-
|
|
2570
|
-
|
|
2571
|
-
|
|
2572
|
-
|
|
2573
|
-
|
|
2574
|
-
|
|
2575
|
-
|
|
2576
|
-
|
|
2577
|
-
|
|
2578
|
-
:
|
|
2579
|
-
|
|
2580
|
-
|
|
2581
|
-
|
|
2582
|
-
|
|
2583
|
-
|
|
2584
|
-
|
|
2585
|
-
|
|
2586
|
-
|
|
2587
|
-
|
|
2588
|
-
|
|
2589
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 = [
|
|
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
|
-
|
|
643
|
-
if (
|
|
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());
|
package/tests/admin.test.js
CHANGED
|
@@ -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/
|
|
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/
|
|
454
|
+
.expect(toRedirect("/actions/configure/9"));
|
|
455
455
|
await request(app)
|
|
456
|
-
.post("/actions/configure/
|
|
456
|
+
.post("/actions/configure/9")
|
|
457
457
|
.set("Cookie", loginCookie)
|
|
458
458
|
.send("code=return 27")
|
|
459
459
|
.expect(toRedirect("/actions/"));
|
package/tests/auth.test.js
CHANGED
|
@@ -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(
|
|
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 [
|