@saltcorn/server 1.1.3-beta.0 → 1.1.3-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/app.js +38 -6
- package/auth/admin.js +2 -0
- package/auth/resetpw.js +37 -9
- package/auth/roleadmin.js +1 -0
- package/auth/routes.js +22 -8
- package/docs/assets/search.js +1 -1
- package/docs/classes/_saltcorn_common_code.Relation.html +8 -8
- package/docs/classes/_saltcorn_common_code.RelationsFinder.html +5 -5
- package/docs/classes/_saltcorn_data.models.Crash-1.html +18 -18
- package/docs/classes/_saltcorn_data.models.EventLog-1.html +19 -19
- package/docs/classes/_saltcorn_data.models.Field.html +71 -71
- package/docs/classes/_saltcorn_data.models.FieldRepeat-1.html +17 -17
- package/docs/classes/_saltcorn_data.models.File-1.html +48 -48
- package/docs/classes/_saltcorn_data.models.Form-1.html +38 -38
- package/docs/classes/_saltcorn_data.models.Library.html +13 -13
- package/docs/classes/_saltcorn_data.models.Page.html +23 -23
- 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 +90 -111
- package/docs/classes/_saltcorn_data.models.TableConstraint-1.html +14 -14
- package/docs/classes/_saltcorn_data.models.Trigger.html +34 -34
- package/docs/classes/_saltcorn_data.models.User-1.html +47 -47
- package/docs/classes/_saltcorn_data.models.View-1.html +55 -53
- package/docs/classes/_saltcorn_data.models.Workflow-1.html +17 -17
- package/docs/classes/_saltcorn_data.models.WorkflowRun.html +57 -36
- package/docs/classes/_saltcorn_data.models.WorkflowStep.html +39 -24
- package/docs/classes/_saltcorn_data.models.WorkflowTrace.html +18 -18
- package/docs/classes/_saltcorn_mobile_builder.MobileBuilder.html +36 -43
- 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 +1 -1
- package/docs/functions/_saltcorn_data.models.discovery.discoverable_tables.html +1 -1
- 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.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.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.single_tenant.enable_multi_tenant.html +1 -1
- package/docs/functions/_saltcorn_db_common.single_tenant.getTenantSchema.html +1 -1
- package/docs/functions/_saltcorn_db_common.single_tenant.init.html +1 -1
- package/docs/functions/_saltcorn_db_common.single_tenant.is_it_multi_tenant.html +1 -1
- package/docs/functions/_saltcorn_db_common.single_tenant.runWithTenant.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_mobile_builder.common_build_utils.androidFeatures.html +95 -0
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.androidPermissions.html +95 -0
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.buildTablesFile.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyPrepopulatedDb.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyServerFiles.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyShareExtFiles.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copySiteLogo.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyTranslationFiles.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.createSqliteDb.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.decodeProvisioningProfile.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.extractDomain.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.generateAndroidVersionCode.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyAndroidManifest.html +6 -6
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyConfigXml.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyGradleConfig.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyInfoPlist.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyXcodeProjectFile.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepAppIcon.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareAppIcon.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareBuildDir.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareExportOptionsPlist.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareSplashIcon.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareSplashPage.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeCapacitorConfig.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeCfgFile.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeDataExtractionRules.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeNetworkSecurityConfig.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writePodfile.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writePrivacyInfo.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.bundleMobileAppCode.html +2 -1
- package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.bundlePackagesAndPlugins.html +2 -1
- package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.copyMobileAppDirs.html +74 -0
- package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.copyPublicDirs.html +2 -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.slugify.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 +2 -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 +13 -11
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_field.AbstractField.html +14 -14
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_field.AbstractFieldRepeat.html +3 -3
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_form.AbstractForm.html +26 -26
- 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 +7 -7
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_trigger.AbstractTrigger.html +16 -16
- 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.Crash.html +2 -2
- package/docs/modules/_saltcorn_data.models.EventLog.html +2 -2
- package/docs/modules/_saltcorn_data.models.FieldRepeat.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.TableConstraint.html +2 -2
- package/docs/modules/_saltcorn_data.models.User.html +2 -2
- package/docs/modules/_saltcorn_data.models.View.html +2 -2
- package/docs/modules/_saltcorn_data.models.Workflow.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_db_common.single_tenant.html +1 -1
- package/docs/modules/_saltcorn_markup.html +2 -2
- package/docs/modules/_saltcorn_mobile_builder.common_build_utils.html +6 -2
- package/docs/modules/_saltcorn_mobile_builder.html +1 -1
- package/docs/modules/_saltcorn_mobile_builder.package_bundle_utils.html +3 -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 +3 -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.Crash.CrashCfg.html +1 -1
- package/docs/types/_saltcorn_data.models.EventLog.EventLogCfg.html +1 -1
- package/docs/types/_saltcorn_data.models.FieldRepeat.FieldRepeatCfg.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.TableConstraint.TableConstraintCfg.html +1 -1
- package/docs/types/_saltcorn_data.models.User.UserCfg.html +1 -1
- package/docs/types/_saltcorn_data.models.View.FindViewsPred.html +1 -1
- package/docs/types/_saltcorn_data.models.Workflow.WorkflowCfg.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.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.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.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 +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.AuthenticationMethod.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.CapacitorPlugin.html +110 -0
- package/docs/types/_saltcorn_types.Types.base_types.CodePagePack.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.Column.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.ConnectedObjects.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.CopilotSkill.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.FieldLike.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.FieldView.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.Header.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.JoinFieldOption.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.Layout.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.MobileConfig.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.ModelPattern.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.Pack.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.Plugin.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginFunction.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginLayout.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginRoute.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginSourceType.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginType.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginWrap.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginWrapArg.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.RelationOption.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.Req.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.Res.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.RouteAction.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.RunExtra.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.TableProvider.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.TableQuery.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.Tablely.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.ViewTemplate.html +5 -2
- 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.sleep.html +1 -1
- package/docs/variables/_saltcorn_db_common.multi_tenant.tenantNamespace.html +1 -1
- package/help/Where formula.tmd +2 -0
- package/help/index.js +13 -8
- package/locales/ar.json +22 -3
- package/locales/de.json +66 -45
- package/locales/en.json +20 -1
- package/locales/es.json +20 -1
- package/locales/fr.json +22 -3
- package/locales/hi.json +21 -2
- package/locales/pl.json +109 -80
- package/locales/pt.json +23 -4
- package/locales/ru.json +21 -2
- package/locales/si.json +23 -4
- package/locales/uk.json +23 -4
- package/locales/zh.json +20 -1
- package/markup/admin.js +13 -1
- package/package.json +9 -9
- package/public/saltcorn-common.js +52 -29
- package/public/saltcorn.js +5 -3
- package/routes/actions.js +48 -15
- package/routes/admin.js +74 -21
- package/routes/common_lists.js +29 -11
- package/routes/delete.js +1 -0
- package/routes/fields.js +5 -2
- package/routes/infoarch.js +1 -0
- package/routes/list.js +11 -7
- package/routes/menu.js +1 -0
- package/routes/page.js +9 -1
- package/routes/page_groupedit.js +1 -0
- package/routes/pageedit.js +1 -0
- package/routes/plugins.js +2 -0
- package/routes/registry.js +11 -7
- package/routes/tables.js +99 -6
- package/routes/utils.js +12 -7
- package/routes/viewedit.js +21 -1
- package/tests/viewedit.test.js +2 -0
|
@@ -520,6 +520,7 @@ function apply_showif() {
|
|
|
520
520
|
var el = $(this);
|
|
521
521
|
var date = new Date(el.attr("datetime"));
|
|
522
522
|
const options = parse(el.attr("locale-date-options"));
|
|
523
|
+
options.timeZone = "UTC";
|
|
523
524
|
el.text(date.toLocaleDateString(locale, options));
|
|
524
525
|
});
|
|
525
526
|
$("time[locale-date-format]").each(function () {
|
|
@@ -596,6 +597,7 @@ function get_form_record(e_in, select_labels) {
|
|
|
596
597
|
$(e_in).prop("data-join-values", {});
|
|
597
598
|
const keyVals = {};
|
|
598
599
|
for (const { ref, target, refTable } of joinFields) {
|
|
600
|
+
if (!rec[ref]) continue;
|
|
599
601
|
keyVals[ref] = rec[ref];
|
|
600
602
|
$.ajax(`/api/${refTable}?id=${rec[ref]}`, {
|
|
601
603
|
success: (val) => {
|
|
@@ -912,6 +914,29 @@ function doMobileTransforms() {
|
|
|
912
914
|
);
|
|
913
915
|
}
|
|
914
916
|
|
|
917
|
+
function validate_expression_elem(target) {
|
|
918
|
+
const next = target.next();
|
|
919
|
+
if (next.hasClass("expr-error")) next.remove();
|
|
920
|
+
const val = target.val();
|
|
921
|
+
if (target.hasClass("validate-expression-conditional")) {
|
|
922
|
+
const box = target
|
|
923
|
+
.closest(".form-namespace")
|
|
924
|
+
.find(`[name="${target.attr("name")}_formula"]`);
|
|
925
|
+
if (!box.prop("checked")) return;
|
|
926
|
+
}
|
|
927
|
+
if (!val) return;
|
|
928
|
+
try {
|
|
929
|
+
const AsyncFunction = Object.getPrototypeOf(
|
|
930
|
+
async function () {}
|
|
931
|
+
).constructor;
|
|
932
|
+
AsyncFunction("return " + val);
|
|
933
|
+
} catch (error) {
|
|
934
|
+
target.after(`<small class="text-danger font-monospace d-block expr-error">
|
|
935
|
+
${error.message}
|
|
936
|
+
</small>`);
|
|
937
|
+
}
|
|
938
|
+
}
|
|
939
|
+
|
|
915
940
|
function initialize_page() {
|
|
916
941
|
if (window._sc_locale && window.dayjs) dayjs.locale(window._sc_locale);
|
|
917
942
|
const isNode = getIsNode();
|
|
@@ -941,28 +966,6 @@ function initialize_page() {
|
|
|
941
966
|
validate_identifier_elem(target);
|
|
942
967
|
});
|
|
943
968
|
|
|
944
|
-
const validate_expression_elem = (target) => {
|
|
945
|
-
const next = target.next();
|
|
946
|
-
if (next.hasClass("expr-error")) next.remove();
|
|
947
|
-
const val = target.val();
|
|
948
|
-
if (target.hasClass("validate-expression-conditional")) {
|
|
949
|
-
const box = target
|
|
950
|
-
.closest(".form-namespace")
|
|
951
|
-
.find(`[name="${target.attr("name")}_formula"]`);
|
|
952
|
-
if (!box.prop("checked")) return;
|
|
953
|
-
}
|
|
954
|
-
if (!val) return;
|
|
955
|
-
try {
|
|
956
|
-
const AsyncFunction = Object.getPrototypeOf(
|
|
957
|
-
async function () {}
|
|
958
|
-
).constructor;
|
|
959
|
-
AsyncFunction("return " + val);
|
|
960
|
-
} catch (error) {
|
|
961
|
-
target.after(`<small class="text-danger font-monospace d-block expr-error">
|
|
962
|
-
${error.message}
|
|
963
|
-
</small>`);
|
|
964
|
-
}
|
|
965
|
-
};
|
|
966
969
|
$(".validate-expression").bind("input", function (e) {
|
|
967
970
|
const target = $(e.target);
|
|
968
971
|
validate_expression_elem(target);
|
|
@@ -1192,6 +1195,7 @@ function initialize_page() {
|
|
|
1192
1195
|
if (_sc_lightmode === "dark") cmOpts.theme = "blackboard";
|
|
1193
1196
|
const cm = CodeMirror.fromTextArea(el, cmOpts);
|
|
1194
1197
|
$(el).addClass("codemirror-enabled");
|
|
1198
|
+
if ($(el).hasClass("enlarge-in-card")) enlarge_in_code($(el), cm);
|
|
1195
1199
|
cm.on(
|
|
1196
1200
|
"change",
|
|
1197
1201
|
$.debounce(
|
|
@@ -1294,6 +1298,22 @@ function initialize_page() {
|
|
|
1294
1298
|
|
|
1295
1299
|
$(initialize_page);
|
|
1296
1300
|
|
|
1301
|
+
function enlarge_in_code($textarea, cm) {
|
|
1302
|
+
const $card = $textarea.closest("div.card");
|
|
1303
|
+
if (!$card.length) return;
|
|
1304
|
+
const cardTop = $card.position().top;
|
|
1305
|
+
const cardHeight = $card.height();
|
|
1306
|
+
const vh = $(window).height();
|
|
1307
|
+
const cmHeight = cm.getWrapperElement().offsetHeight;
|
|
1308
|
+
const newCardHeight = vh - cardTop - 35;
|
|
1309
|
+
if (newCardHeight > cardHeight) {
|
|
1310
|
+
const extending = newCardHeight - cardHeight;
|
|
1311
|
+
cm.setSize("100%", `${cmHeight + extending}px`);
|
|
1312
|
+
cm.refresh();
|
|
1313
|
+
$card.css("min-height", newCardHeight + "px");
|
|
1314
|
+
}
|
|
1315
|
+
}
|
|
1316
|
+
|
|
1297
1317
|
function cancel_inline_edit(e, opts1) {
|
|
1298
1318
|
var opts = JSON.parse(decodeURIComponent(opts1 || "") || "{}");
|
|
1299
1319
|
var form = $(e.target).closest("form");
|
|
@@ -1484,7 +1504,7 @@ function getIsNode() {
|
|
|
1484
1504
|
}
|
|
1485
1505
|
}
|
|
1486
1506
|
|
|
1487
|
-
function buildToast(txt, type, spin) {
|
|
1507
|
+
function buildToast(txt, type, spin, title) {
|
|
1488
1508
|
const realtype = type === "error" ? "danger" : type;
|
|
1489
1509
|
const icon =
|
|
1490
1510
|
realtype === "success"
|
|
@@ -1513,7 +1533,7 @@ function buildToast(txt, type, spin) {
|
|
|
1513
1533
|
<div class="toast-header bg-${realtype} text-white py-1 ">
|
|
1514
1534
|
<i class="fas ${icon} me-2"></i>
|
|
1515
1535
|
<strong class="me-auto" >
|
|
1516
|
-
${type}
|
|
1536
|
+
${title || type}
|
|
1517
1537
|
</strong>
|
|
1518
1538
|
${
|
|
1519
1539
|
spin
|
|
@@ -1563,7 +1583,7 @@ function notifyAlert(note, spin) {
|
|
|
1563
1583
|
txt = JSON.stringify(note, null, 2);
|
|
1564
1584
|
}
|
|
1565
1585
|
|
|
1566
|
-
const { id, html } = buildToast(txt, type, spin);
|
|
1586
|
+
const { id, html } = buildToast(txt, type, spin, note.toast_title);
|
|
1567
1587
|
let $modal = $("#scmodal");
|
|
1568
1588
|
if ($modal.length && $modal.hasClass("show"))
|
|
1569
1589
|
$("#modal-toasts-area").append(html);
|
|
@@ -1638,16 +1658,19 @@ async function common_done(res, viewnameOrElem0, isWeb = true) {
|
|
|
1638
1658
|
if (evalres) await common_done(evalres, viewnameOrElem, isWeb);
|
|
1639
1659
|
}
|
|
1640
1660
|
};
|
|
1641
|
-
if (res.notify)
|
|
1661
|
+
if (res.notify)
|
|
1662
|
+
await handle(res.notify, (text) =>
|
|
1663
|
+
notifyAlert({ type: "info", text, toast_title: res.toast_title })
|
|
1664
|
+
);
|
|
1642
1665
|
if (res.error) {
|
|
1643
1666
|
if (window._sc_loglevel > 4) console.trace("error response", res.error);
|
|
1644
1667
|
await handle(res.error, (text) =>
|
|
1645
|
-
notifyAlert({ type: "danger", text:
|
|
1668
|
+
notifyAlert({ type: "danger", text, toast_title: res.toast_title })
|
|
1646
1669
|
);
|
|
1647
1670
|
}
|
|
1648
1671
|
if (res.notify_success)
|
|
1649
1672
|
await handle(res.notify_success, (text) =>
|
|
1650
|
-
notifyAlert({ type: "success", text:
|
|
1673
|
+
notifyAlert({ type: "success", text, toast_title: res.toast_title })
|
|
1651
1674
|
);
|
|
1652
1675
|
if (res.set_fields && (viewname || res.set_fields._viewname)) {
|
|
1653
1676
|
const form =
|
|
@@ -2145,7 +2168,7 @@ function update_time_of_week(nm) {
|
|
|
2145
2168
|
};
|
|
2146
2169
|
}
|
|
2147
2170
|
|
|
2148
|
-
function select_by_view_click(element, event, required) {
|
|
2171
|
+
function select_by_view_click(element, event, required, multiple) {
|
|
2149
2172
|
const isAlreadySelected = $(element).hasClass("selected");
|
|
2150
2173
|
$(element)
|
|
2151
2174
|
.closest(".select-by-view-container")
|
package/public/saltcorn.js
CHANGED
|
@@ -76,7 +76,7 @@ function removeQueryStringParameter(uri1, key, value) {
|
|
|
76
76
|
let re;
|
|
77
77
|
if (value) {
|
|
78
78
|
re = new RegExp(
|
|
79
|
-
"([?&])" + escapeRegExp(key) + "=" + value + "?(&|$)",
|
|
79
|
+
"([?&])" + escapeRegExp(key) + "=" + encodeURIComponent(value) + "?(&|$)",
|
|
80
80
|
"gi"
|
|
81
81
|
);
|
|
82
82
|
} else {
|
|
@@ -131,11 +131,13 @@ function set_state_field(key, value, e) {
|
|
|
131
131
|
function check_state_field(that, e) {
|
|
132
132
|
const checked = that.checked;
|
|
133
133
|
const name = that.name;
|
|
134
|
-
const value =
|
|
134
|
+
const value = that.value;
|
|
135
135
|
let dest;
|
|
136
136
|
if (checked)
|
|
137
137
|
dest = addQueryStringParameter(get_current_state_url(e), name, value);
|
|
138
138
|
else dest = removeQueryStringParameter(get_current_state_url(e), name, value);
|
|
139
|
+
console.log({ dest, name, value, tvalue: that.value });
|
|
140
|
+
|
|
139
141
|
pjax_to(dest.replace("&&", "&").replace("?&", "?"), e);
|
|
140
142
|
}
|
|
141
143
|
|
|
@@ -922,7 +924,7 @@ function poll_mobile_build_finished(
|
|
|
922
924
|
data: { out_dir_name: outDirName, mode: mode },
|
|
923
925
|
success: function (res) {
|
|
924
926
|
if (!res.finished) {
|
|
925
|
-
if (pollCount >=
|
|
927
|
+
if (pollCount >= 150) {
|
|
926
928
|
removeSpinner("buildMobileAppBtnId", orginalBtnHtml);
|
|
927
929
|
notifyAlert({
|
|
928
930
|
type: "danger",
|
package/routes/actions.js
CHANGED
|
@@ -562,7 +562,10 @@ const getWorkflowConfig = async (req, id, table, trigger) => {
|
|
|
562
562
|
const idnext = cls.split(" ").find(c=>c.startsWith("btw-nodes-")).
|
|
563
563
|
substr(10);
|
|
564
564
|
const [idprev, nmnext] = idnext.split("-");
|
|
565
|
-
|
|
565
|
+
if(cls.includes("init-for-body"))
|
|
566
|
+
location.href = '/actions/stepedit/${trigger.id}?after_step_for='+idprev+'&before_step='+nmnext;
|
|
567
|
+
else
|
|
568
|
+
location.href = '/actions/stepedit/${trigger.id}?after_step='+idprev+'&before_step='+nmnext;
|
|
566
569
|
})
|
|
567
570
|
$("g.node").on("click", (e)=>{
|
|
568
571
|
const $e = $(e.target || e).closest("g.node")
|
|
@@ -613,7 +616,8 @@ const getWorkflowStepForm = async (
|
|
|
613
616
|
req,
|
|
614
617
|
step_id,
|
|
615
618
|
after_step,
|
|
616
|
-
before_step
|
|
619
|
+
before_step,
|
|
620
|
+
after_step_for
|
|
617
621
|
) => {
|
|
618
622
|
const table = trigger.table_id ? Table.findOne(trigger.table_id) : null;
|
|
619
623
|
const actionExplainers = {};
|
|
@@ -632,6 +636,7 @@ const getWorkflowStepForm = async (
|
|
|
632
636
|
try {
|
|
633
637
|
const cfgFields = await getActionConfigFields(action, table, {
|
|
634
638
|
mode: "workflow",
|
|
639
|
+
req,
|
|
635
640
|
});
|
|
636
641
|
|
|
637
642
|
for (const field of cfgFields) {
|
|
@@ -655,7 +660,9 @@ const getWorkflowStepForm = async (
|
|
|
655
660
|
//if (cfgFld.input_type === "code") cfgFld.input_type = "textarea";
|
|
656
661
|
actionConfigFields.push(cfgFld);
|
|
657
662
|
}
|
|
658
|
-
} catch {
|
|
663
|
+
} catch {
|
|
664
|
+
//ignore
|
|
665
|
+
}
|
|
659
666
|
}
|
|
660
667
|
actionConfigFields.push({
|
|
661
668
|
label: "Subcontext",
|
|
@@ -778,9 +785,11 @@ const getWorkflowStepForm = async (
|
|
|
778
785
|
});
|
|
779
786
|
form.hidden("wf_step_id");
|
|
780
787
|
form.hidden("_after_step");
|
|
788
|
+
form.hidden("_after_step_for");
|
|
781
789
|
if (before_step) form.values.wf_next_step = before_step;
|
|
782
790
|
if (after_step == "0") form.values.wf_initial_step = true;
|
|
783
791
|
else if (after_step) form.values._after_step = after_step;
|
|
792
|
+
else if (after_step_for) form.values._after_step_for = after_step_for;
|
|
784
793
|
if (step_id) {
|
|
785
794
|
const step = await WorkflowStep.findOne({ id: step_id });
|
|
786
795
|
if (!step) throw new Error("Step not found");
|
|
@@ -812,7 +821,7 @@ const getMultiStepForm = async (req, id, table) => {
|
|
|
812
821
|
const actionConfigFields = [];
|
|
813
822
|
for (const [name, action] of Object.entries(stateActions)) {
|
|
814
823
|
if (!stateActionKeys.includes(name)) continue;
|
|
815
|
-
const cfgFields = await getActionConfigFields(action, table);
|
|
824
|
+
const cfgFields = await getActionConfigFields(action, table, { req });
|
|
816
825
|
|
|
817
826
|
for (const field of cfgFields) {
|
|
818
827
|
const cfgFld = {
|
|
@@ -1034,6 +1043,7 @@ router.get(
|
|
|
1034
1043
|
const cfgFields = await getActionConfigFields(action, table, {
|
|
1035
1044
|
mode: "trigger",
|
|
1036
1045
|
when_trigger: trigger.when_trigger,
|
|
1046
|
+
req,
|
|
1037
1047
|
});
|
|
1038
1048
|
// create form
|
|
1039
1049
|
const form = new Form({
|
|
@@ -1092,6 +1102,7 @@ router.post(
|
|
|
1092
1102
|
const cfgFields = await getActionConfigFields(action, table, {
|
|
1093
1103
|
mode: "trigger",
|
|
1094
1104
|
when_trigger: trigger.when_trigger,
|
|
1105
|
+
req,
|
|
1095
1106
|
});
|
|
1096
1107
|
form = new Form({
|
|
1097
1108
|
action: `/actions/configure/${id}`,
|
|
@@ -1309,14 +1320,15 @@ router.get(
|
|
|
1309
1320
|
isAdminOrHasConfigMinRole("min_role_edit_triggers"),
|
|
1310
1321
|
error_catcher(async (req, res) => {
|
|
1311
1322
|
const { trigger_id, step_id } = req.params;
|
|
1312
|
-
const { initial_step, after_step, before_step } = req.query;
|
|
1323
|
+
const { initial_step, after_step, before_step, after_step_for } = req.query;
|
|
1313
1324
|
const trigger = await Trigger.findOne({ id: trigger_id });
|
|
1314
1325
|
const form = await getWorkflowStepForm(
|
|
1315
1326
|
trigger,
|
|
1316
1327
|
req,
|
|
1317
1328
|
step_id,
|
|
1318
1329
|
after_step,
|
|
1319
|
-
before_step
|
|
1330
|
+
before_step,
|
|
1331
|
+
after_step_for
|
|
1320
1332
|
);
|
|
1321
1333
|
|
|
1322
1334
|
if (initial_step) form.values.wf_initial_step = true;
|
|
@@ -1384,6 +1396,7 @@ router.post(
|
|
|
1384
1396
|
wf_only_if,
|
|
1385
1397
|
wf_step_id,
|
|
1386
1398
|
_after_step,
|
|
1399
|
+
_after_step_for,
|
|
1387
1400
|
...configuration
|
|
1388
1401
|
} = form.values;
|
|
1389
1402
|
Object.entries(configuration).forEach(([k, v]) => {
|
|
@@ -1430,7 +1443,21 @@ router.post(
|
|
|
1430
1443
|
});
|
|
1431
1444
|
if (astep) await astep.update({ next_step: step.name });
|
|
1432
1445
|
}
|
|
1446
|
+
if (_after_step_for && _after_step_for !== "undefined") {
|
|
1447
|
+
const astep = await WorkflowStep.findOne({
|
|
1448
|
+
id: _after_step_for,
|
|
1449
|
+
trigger_id,
|
|
1450
|
+
});
|
|
1451
|
+
if (astep)
|
|
1452
|
+
await astep.update({
|
|
1453
|
+
configuration: {
|
|
1454
|
+
...step.configuration,
|
|
1455
|
+
loop_body_initial_step: step.name,
|
|
1456
|
+
},
|
|
1457
|
+
});
|
|
1458
|
+
}
|
|
1433
1459
|
} catch (e) {
|
|
1460
|
+
console.error(e);
|
|
1434
1461
|
const emsg =
|
|
1435
1462
|
e.message ===
|
|
1436
1463
|
'duplicate key value violates unique constraint "workflow_steps_name_uniq"'
|
|
@@ -1499,13 +1526,13 @@ router.get(
|
|
|
1499
1526
|
|
|
1500
1527
|
const wfTable = mkTable(
|
|
1501
1528
|
[
|
|
1502
|
-
{ label: "Trigger", key: (run) => trNames[run.trigger_id] },
|
|
1503
|
-
{ label: "Started", key: (run) => localeDateTime(run.started_at) },
|
|
1529
|
+
{ label: req.__("Trigger"), key: (run) => trNames[run.trigger_id] },
|
|
1530
|
+
{ label: req.__("Started"), key: (run) => localeDateTime(run.started_at) },
|
|
1504
1531
|
{
|
|
1505
|
-
label: "Updated",
|
|
1532
|
+
label: req.__("Updated"),
|
|
1506
1533
|
key: (run) => localeDateTime(run.status_updated_at),
|
|
1507
1534
|
},
|
|
1508
|
-
{ label: "Status", key: "status" },
|
|
1535
|
+
{ label: req.__("Status"), key: "status" },
|
|
1509
1536
|
{
|
|
1510
1537
|
label: "",
|
|
1511
1538
|
key: (run) => {
|
|
@@ -1710,11 +1737,17 @@ router.get(
|
|
|
1710
1737
|
trigger_id: trigger.id,
|
|
1711
1738
|
name: run.current_step_name,
|
|
1712
1739
|
});
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1740
|
+
try {
|
|
1741
|
+
const form = await getWorkflowStepUserForm(run, trigger, step, req);
|
|
1742
|
+
if (req.xhr) form.xhrSubmit = true;
|
|
1743
|
+
const title = run.wait_info.output ? "Workflow output" : "Fill form";
|
|
1744
|
+
res.sendWrap(title, renderForm(form, req.csrfToken()));
|
|
1745
|
+
} catch (e) {
|
|
1746
|
+
console.error(e);
|
|
1747
|
+
await run.markAsError(e, step, req.user);
|
|
1748
|
+
const title = req.__("Error running workflow");
|
|
1749
|
+
res.sendWrap(title, renderForm(e.message, req.csrfToken()));
|
|
1750
|
+
}
|
|
1718
1751
|
})
|
|
1719
1752
|
);
|
|
1720
1753
|
|
package/routes/admin.js
CHANGED
|
@@ -295,6 +295,37 @@ router.get(
|
|
|
295
295
|
})
|
|
296
296
|
);
|
|
297
297
|
|
|
298
|
+
router.get(
|
|
299
|
+
"/help-plugin/:plugin/:topic",
|
|
300
|
+
isAdmin,
|
|
301
|
+
error_catcher(async (req, res) => {
|
|
302
|
+
const { plugin, topic } = req.params;
|
|
303
|
+
const location = getState().plugin_locations[plugin];
|
|
304
|
+
if (location) {
|
|
305
|
+
const safeFile = path
|
|
306
|
+
.normalize(topic + ".tmd")
|
|
307
|
+
.replace(/^(\.\.(\/|\\|$))+/, "");
|
|
308
|
+
const fullpath = path.join(location, "help", safeFile);
|
|
309
|
+
if (fs.existsSync(fullpath)) {
|
|
310
|
+
const { markup } = await get_help_markup(
|
|
311
|
+
fullpath,
|
|
312
|
+
req.query,
|
|
313
|
+
req,
|
|
314
|
+
true
|
|
315
|
+
);
|
|
316
|
+
|
|
317
|
+
res.sendWrap(`Help: ${topic}`, { above: [markup] });
|
|
318
|
+
} else {
|
|
319
|
+
getState().log(6, `Plugin serve help: file not found ${fullpath}`);
|
|
320
|
+
res.status(404).send(req.__("Not found"));
|
|
321
|
+
}
|
|
322
|
+
} else {
|
|
323
|
+
getState().log(6, `Plugin serve heko: plogin not found ${plugin}`);
|
|
324
|
+
res.status(404).send(req.__("Not found"));
|
|
325
|
+
}
|
|
326
|
+
})
|
|
327
|
+
);
|
|
328
|
+
|
|
298
329
|
router.get(
|
|
299
330
|
"/jsdoc/*filepath",
|
|
300
331
|
isAdminOrHasConfigMinRole("min_role_edit_triggers"),
|
|
@@ -727,11 +758,13 @@ router.post(
|
|
|
727
758
|
);
|
|
728
759
|
}
|
|
729
760
|
res.redirect(
|
|
730
|
-
type
|
|
731
|
-
? `/
|
|
732
|
-
:
|
|
733
|
-
?
|
|
734
|
-
:
|
|
761
|
+
type == "codepage"
|
|
762
|
+
? `/admin/edit-codepage/${name}`
|
|
763
|
+
: type === "trigger"
|
|
764
|
+
? `/actions`
|
|
765
|
+
: /^[a-z]+$/g.test(type)
|
|
766
|
+
? `/${type}edit`
|
|
767
|
+
: "/"
|
|
735
768
|
);
|
|
736
769
|
})
|
|
737
770
|
);
|
|
@@ -1114,6 +1147,7 @@ router.post(
|
|
|
1114
1147
|
else
|
|
1115
1148
|
req.flash("success", req.__("No changes detected, snapshot skipped"));
|
|
1116
1149
|
} catch (e) {
|
|
1150
|
+
console.error(e);
|
|
1117
1151
|
req.flash("error", e.message);
|
|
1118
1152
|
}
|
|
1119
1153
|
res.json({ reload_page: true });
|
|
@@ -1610,6 +1644,7 @@ const doInstall = async (req, res, version, deepClean, runPull) => {
|
|
|
1610
1644
|
try {
|
|
1611
1645
|
await cleanNodeModules();
|
|
1612
1646
|
} catch (e) {
|
|
1647
|
+
console.error(e);
|
|
1613
1648
|
res_write(req.__("Error cleaning node_modules: %s\n", e.message));
|
|
1614
1649
|
}
|
|
1615
1650
|
}
|
|
@@ -1870,6 +1905,7 @@ router.post(
|
|
|
1870
1905
|
notify: "Certificate added, please restart server",
|
|
1871
1906
|
});
|
|
1872
1907
|
} catch (e) {
|
|
1908
|
+
console.error(e);
|
|
1873
1909
|
res.json({ error: e.message });
|
|
1874
1910
|
}
|
|
1875
1911
|
} else {
|
|
@@ -1957,6 +1993,7 @@ router.post(
|
|
|
1957
1993
|
);
|
|
1958
1994
|
res.redirect("/useradmin/ssl");
|
|
1959
1995
|
} catch (e) {
|
|
1996
|
+
console.error(e);
|
|
1960
1997
|
req.flash("error", e.message);
|
|
1961
1998
|
res.redirect("/useradmin/ssl");
|
|
1962
1999
|
}
|
|
@@ -2126,7 +2163,10 @@ const buildDialogScript = (capacitorBuilderAvailable, isSbadmin2) =>
|
|
|
2126
2163
|
|
|
2127
2164
|
const imageAvailable = async () => {
|
|
2128
2165
|
try {
|
|
2129
|
-
const
|
|
2166
|
+
const state = getState();
|
|
2167
|
+
const image = new Docker().getImage(
|
|
2168
|
+
`saltcorn/capacitor-builder:${state.scVersion}`
|
|
2169
|
+
);
|
|
2130
2170
|
await image.inspect();
|
|
2131
2171
|
return true;
|
|
2132
2172
|
} catch (e) {
|
|
@@ -4069,15 +4109,6 @@ router.get(
|
|
|
4069
4109
|
values: { code: existing },
|
|
4070
4110
|
noSubmitButton: true,
|
|
4071
4111
|
labelCols: 0,
|
|
4072
|
-
additionalButtons: [
|
|
4073
|
-
{
|
|
4074
|
-
label: req.__("Delete code page"),
|
|
4075
|
-
class: "btn btn-outline-danger btn-sm",
|
|
4076
|
-
onclick: `if(confirm('Are you sure you would like to delete this code page?'))ajax_post('/admin/delete-codepage/${encodeURIComponent(
|
|
4077
|
-
name
|
|
4078
|
-
)}')`,
|
|
4079
|
-
},
|
|
4080
|
-
],
|
|
4081
4112
|
fields: [
|
|
4082
4113
|
{
|
|
4083
4114
|
name: "code",
|
|
@@ -4094,7 +4125,7 @@ router.get(
|
|
|
4094
4125
|
),
|
|
4095
4126
|
input_type: "code",
|
|
4096
4127
|
attributes: { mode: "text/javascript" },
|
|
4097
|
-
class: "validate-statements",
|
|
4128
|
+
class: "validate-statements enlarge-in-card",
|
|
4098
4129
|
validator(s) {
|
|
4099
4130
|
try {
|
|
4100
4131
|
let AsyncFunction = Object.getPrototypeOf(
|
|
@@ -4114,7 +4145,8 @@ router.get(
|
|
|
4114
4145
|
{}
|
|
4115
4146
|
);
|
|
4116
4147
|
const tags = await Tag.find();
|
|
4117
|
-
const tagMarkup =
|
|
4148
|
+
const tagMarkup = span(
|
|
4149
|
+
{ class: "ms-1" },
|
|
4118
4150
|
"Tags:",
|
|
4119
4151
|
(function_code_pages_tags[name] || []).map((tagnm) =>
|
|
4120
4152
|
span(
|
|
@@ -4176,7 +4208,28 @@ router.get(
|
|
|
4176
4208
|
contents: {
|
|
4177
4209
|
type: "card",
|
|
4178
4210
|
title: req.__(`%s code page`, name),
|
|
4179
|
-
contents: [
|
|
4211
|
+
contents: [
|
|
4212
|
+
renderForm(form, req.csrfToken()),
|
|
4213
|
+
a(
|
|
4214
|
+
{
|
|
4215
|
+
href: `javascript:if(confirm('Are you sure you would like to delete this code page?'))ajax_post('/admin/delete-codepage/${encodeURIComponent(
|
|
4216
|
+
name
|
|
4217
|
+
)}')`,
|
|
4218
|
+
class: "me-1 text-danger",
|
|
4219
|
+
},
|
|
4220
|
+
req.__("Delete code page")
|
|
4221
|
+
),
|
|
4222
|
+
" | ",
|
|
4223
|
+
a(
|
|
4224
|
+
{
|
|
4225
|
+
href: `javascript:ajax_modal('/admin/snapshot-restore/codepage/${name}')`,
|
|
4226
|
+
class: "ms-1 me-1",
|
|
4227
|
+
},
|
|
4228
|
+
req.__("Restore")
|
|
4229
|
+
),
|
|
4230
|
+
" | ",
|
|
4231
|
+
tagMarkup,
|
|
4232
|
+
],
|
|
4180
4233
|
},
|
|
4181
4234
|
});
|
|
4182
4235
|
})
|
|
@@ -4194,9 +4247,9 @@ router.post(
|
|
|
4194
4247
|
...code_pages,
|
|
4195
4248
|
[name]: code,
|
|
4196
4249
|
});
|
|
4197
|
-
await getState().refresh_codepages();
|
|
4198
|
-
|
|
4199
|
-
res.json({ success: true });
|
|
4250
|
+
const err = await getState().refresh_codepages();
|
|
4251
|
+
if (err) res.json({ success: false, error: `Error evaluating code pages: ${err}` });
|
|
4252
|
+
else res.json({ success: true });
|
|
4200
4253
|
})
|
|
4201
4254
|
);
|
|
4202
4255
|
router.post(
|
package/routes/common_lists.js
CHANGED
|
@@ -93,7 +93,8 @@ const tablesList = async (
|
|
|
93
93
|
{
|
|
94
94
|
label: tagsDropdown(
|
|
95
95
|
tags,
|
|
96
|
-
filterOnTag ? `Tag:${filterOnTag.name}` : undefined
|
|
96
|
+
filterOnTag ? `Tag:${filterOnTag.name}` : undefined,
|
|
97
|
+
req
|
|
97
98
|
),
|
|
98
99
|
key: (r) => tagBadges(r),
|
|
99
100
|
},
|
|
@@ -240,7 +241,7 @@ const tagBadge = (tag, type) =>
|
|
|
240
241
|
tag.name
|
|
241
242
|
);
|
|
242
243
|
|
|
243
|
-
const tagsDropdown = (tags, altHeader) =>
|
|
244
|
+
const tagsDropdown = (tags, altHeader, req) =>
|
|
244
245
|
div(
|
|
245
246
|
{ class: "dropdown" },
|
|
246
247
|
div(
|
|
@@ -253,7 +254,7 @@ const tagsDropdown = (tags, altHeader) =>
|
|
|
253
254
|
"aria-haspopup": "true",
|
|
254
255
|
"aria-expanded": "false",
|
|
255
256
|
},
|
|
256
|
-
altHeader || "Tags",
|
|
257
|
+
altHeader || req.__("Tags"),
|
|
257
258
|
i({ class: "ms-1 fas fa-caret-down" })
|
|
258
259
|
),
|
|
259
260
|
div(
|
|
@@ -267,7 +268,7 @@ const tagsDropdown = (tags, altHeader) =>
|
|
|
267
268
|
// TODO check url why view for page, what do we need for page group
|
|
268
269
|
href: `javascript:unset_state_field('_tag', this)`,
|
|
269
270
|
},
|
|
270
|
-
"All tags"
|
|
271
|
+
req.__("All tags")
|
|
271
272
|
),
|
|
272
273
|
tags.map((tag) =>
|
|
273
274
|
a(
|
|
@@ -285,7 +286,7 @@ const tagsDropdown = (tags, altHeader) =>
|
|
|
285
286
|
// TODO check url why view for page, what do we need for page group
|
|
286
287
|
href: `tag`,
|
|
287
288
|
},
|
|
288
|
-
"Manage tags..."
|
|
289
|
+
req.__("Manage tags...")
|
|
289
290
|
)
|
|
290
291
|
)
|
|
291
292
|
);
|
|
@@ -314,7 +315,7 @@ const mkAddBtn = (tags, entityType, id, req, myTagIds, on_done_redirect_str) =>
|
|
|
314
315
|
post_dropdown_item(
|
|
315
316
|
`/tag-entries/add-tag-entity/${encodeURIComponent(
|
|
316
317
|
t.name
|
|
317
|
-
)}/${entityType}/${id}${on_done_redirect_str||""}`,
|
|
318
|
+
)}/${entityType}/${id}${on_done_redirect_str || ""}`,
|
|
318
319
|
t.name,
|
|
319
320
|
req
|
|
320
321
|
)
|
|
@@ -345,7 +346,14 @@ const viewsList = async (
|
|
|
345
346
|
const tagBadges = (view) => {
|
|
346
347
|
const myTags = tag_entries.filter((te) => te.view_id === view.id);
|
|
347
348
|
const myTagIds = new Set(myTags.map((t) => t.tag_id));
|
|
348
|
-
const addBtn = mkAddBtn(
|
|
349
|
+
const addBtn = mkAddBtn(
|
|
350
|
+
tags,
|
|
351
|
+
"views",
|
|
352
|
+
view.id,
|
|
353
|
+
req,
|
|
354
|
+
myTagIds,
|
|
355
|
+
on_done_redirect_str
|
|
356
|
+
);
|
|
349
357
|
return (
|
|
350
358
|
myTags.map((te) => tagBadge(tagsById[te.tag_id], "views")).join(nbsp) +
|
|
351
359
|
addBtn
|
|
@@ -380,7 +388,8 @@ const viewsList = async (
|
|
|
380
388
|
{
|
|
381
389
|
label: tagsDropdown(
|
|
382
390
|
tags,
|
|
383
|
-
filterOnTag ? `Tag:${filterOnTag.name}` : undefined
|
|
391
|
+
filterOnTag ? `Tag:${filterOnTag.name}` : undefined,
|
|
392
|
+
req
|
|
384
393
|
),
|
|
385
394
|
key: (r) => tagBadges(r),
|
|
386
395
|
},
|
|
@@ -585,7 +594,8 @@ const getPageList = async (
|
|
|
585
594
|
{
|
|
586
595
|
label: tagsDropdown(
|
|
587
596
|
tags,
|
|
588
|
-
filterOnTag ? `Tag:${filterOnTag.name}` : undefined
|
|
597
|
+
filterOnTag ? `Tag:${filterOnTag.name}` : undefined,
|
|
598
|
+
req
|
|
589
599
|
),
|
|
590
600
|
key: (r) => tagBadges(r),
|
|
591
601
|
},
|
|
@@ -709,7 +719,14 @@ const getTriggerList = async (
|
|
|
709
719
|
const myTagIds = new Set(myTags.map((t) => t.tag_id));
|
|
710
720
|
return (
|
|
711
721
|
myTags.map((te) => tagBadge(tagsById[te.tag_id], "triggers")).join(nbsp) +
|
|
712
|
-
mkAddBtn(
|
|
722
|
+
mkAddBtn(
|
|
723
|
+
tags,
|
|
724
|
+
"triggers",
|
|
725
|
+
trigger.id,
|
|
726
|
+
req,
|
|
727
|
+
myTagIds,
|
|
728
|
+
on_done_redirect_str
|
|
729
|
+
)
|
|
713
730
|
);
|
|
714
731
|
};
|
|
715
732
|
return mkTable(
|
|
@@ -729,7 +746,8 @@ const getTriggerList = async (
|
|
|
729
746
|
{
|
|
730
747
|
label: tagsDropdown(
|
|
731
748
|
tags,
|
|
732
|
-
filterOnTag ? `Tag:${filterOnTag.name}` : undefined
|
|
749
|
+
filterOnTag ? `Tag:${filterOnTag.name}` : undefined,
|
|
750
|
+
req
|
|
733
751
|
),
|
|
734
752
|
key: (r) => tagBadges(r),
|
|
735
753
|
},
|
package/routes/delete.js
CHANGED
package/routes/fields.js
CHANGED
|
@@ -230,7 +230,7 @@ const translateAttributes = (attrs, req) =>
|
|
|
230
230
|
* @returns {object}
|
|
231
231
|
*/
|
|
232
232
|
const translateAttribute = (attr, req) => {
|
|
233
|
-
let res = { ...attr };
|
|
233
|
+
let res = { ...attr, label: req.__(attr.label) };
|
|
234
234
|
if (res.sublabel) res.sublabel = req.__(res.sublabel);
|
|
235
235
|
if (res.isRepeat) res = new FieldRepeat(res);
|
|
236
236
|
return res;
|
|
@@ -322,6 +322,7 @@ const fieldFlow = (req) =>
|
|
|
322
322
|
}
|
|
323
323
|
);
|
|
324
324
|
} catch (e) {
|
|
325
|
+
console.error(e);
|
|
325
326
|
return {
|
|
326
327
|
redirect: `/table/${context.table_id}`,
|
|
327
328
|
flash: ["error", e.message],
|
|
@@ -340,6 +341,7 @@ const fieldFlow = (req) =>
|
|
|
340
341
|
}
|
|
341
342
|
);
|
|
342
343
|
} catch (e) {
|
|
344
|
+
console.error(e);
|
|
343
345
|
return {
|
|
344
346
|
redirect: `/table/${context.table_id}`,
|
|
345
347
|
flash: ["error", e.message],
|
|
@@ -1430,7 +1432,8 @@ router.post(
|
|
|
1430
1432
|
[field],
|
|
1431
1433
|
false,
|
|
1432
1434
|
0,
|
|
1433
|
-
mode
|
|
1435
|
+
mode,
|
|
1436
|
+
req
|
|
1434
1437
|
);
|
|
1435
1438
|
const formFields = fieldViewConfigForms[field.name][fv_name];
|
|
1436
1439
|
if (!formFields) {
|