소스 검색

AMBARI-17516. UI - Customize Atlas Service configs shows incorrect required properties and Next button after toggling type (alexantonenko)

Alex Antonenko 9 년 전
부모
커밋
658996e44e

+ 2 - 2
ambari-web/app/models/configs/objects/service_config.js

@@ -46,9 +46,9 @@ App.ServiceConfig = Ember.Object.extend({
    */
   activeProperties: function() {
     return this.get('configs').filter(function(c) {
-      return c.get('isVisible') && !c.get('hiddenBySection') && (c.get('isRequiredByAgent') || c.get('isRequired'));
+      return c.get('isActive') && (c.get('isRequiredByAgent') || c.get('isRequired'));
     });
-  }.property('configs.@each.isVisible', 'configs.@each.hiddenBySection', 'configs.@each.isRequiredByAgent'),
+  }.property('configs.@each.isActive', 'configs.@each.isRequiredByAgent'),
 
   configsWithErrors: function() {
     return this.get('activeProperties').filter(function(c) {

+ 15 - 0
ambari-web/app/models/configs/objects/service_config_property.js

@@ -185,6 +185,21 @@ App.ServiceConfigProperty = Em.Object.extend({
    */
   hiddenBySection: false,
 
+  /**
+   * Determines config visibility on subsection level when wrapped.
+   * @type {boolean}
+   */
+  hiddenBySubSection: false,
+
+  /**
+   * Determines visibility state including section/subsection state.
+   * When <code>true</code> means that property is shown and may affect validation process.
+   * When <code>false</code> means that property won't affect validation.
+   */
+  isActive: function() {
+    return this.get('isVisible') && !this.get('hiddenBySubSection') && !this.get('hiddenBySection');
+  }.property('isVisible', 'hiddenBySubSection', 'hiddenBySection'),
+
   /**
    * @type {boolean}
    */

+ 4 - 0
ambari-web/app/views/common/configs/widgets/config_widget_view.js

@@ -534,6 +534,9 @@ App.ConfigWidgetView = Em.View.extend(App.SupportsDependentConfigs, App.WidgetPo
         var valueAttribute = App.StackConfigValAttributesMap[key] || key;
         var conditionalConfig = serviceConfigs.filterProperty('filename',conditionalConfigFileName).findProperty('name', conditionalConfigName);
         if (conditionalConfig) {
+          if (key === 'visible') {
+            conditionalConfig.set('hiddenBySection', !valueAttributes[key]);
+          }
           conditionalConfig.set(valueAttribute, valueAttributes[key]);
         }
       }
@@ -559,6 +562,7 @@ App.ConfigWidgetView = Em.View.extend(App.SupportsDependentConfigs, App.WidgetPo
         }
         themeResource.set('isHiddenByConfig', !valueAttributes.visible);
         themeResource.get('configs').setEach('hiddenBySection', !valueAttributes.visible);
+        themeResource.get('configs').setEach('hiddenBySubSection', !valueAttributes.visible);
       }
     }
   },

+ 31 - 23
ambari-web/test/models/configs/objects/service_config_test.js

@@ -21,64 +21,72 @@ var App = require('app');
 require('models/configs/objects/service_config');
 
 var serviceConfig,
-  configs = [
-      Em.Object.create({
+    configs = [
+      App.ServiceConfigProperty.create({
         'name': 'p1',
         'isVisible': true,
         'hiddenBySection': false,
+        'hiddenBySubSection': false,
         'isRequiredByAgent': true,
         'isValid': true,
         'isValidOverride': true
       }),
-      Em.Object.create({
+      App.ServiceConfigProperty.create({
         'name': 'p2',
         'isVisible': false,
         'hiddenBySection': false,
+        'hiddenBySubSection': false,
         'isRequiredByAgent': true,
         'isValid': true,
         'isValidOverride': true
       }),
-      Em.Object.create({
+      App.ServiceConfigProperty.create({
         'name': 'p3',
         'isVisible': true,
         'hiddenBySection': true,
+        'hiddenBySubSection': true,
         'isRequiredByAgent': true,
         'isValid': true,
         'isValidOverride': true
       }),
-      Em.Object.create({
+      App.ServiceConfigProperty.create({
         'name': 'p4',
         'isVisible': true,
         'hiddenBySection': false,
+        'hiddenBySubSection': false,
         'isRequiredByAgent': true,
         'isValid': false,
         'isValidOverride': true
       }),
-      Em.Object.create({
+      App.ServiceConfigProperty.create({
         'name': 'p5',
         'isVisible': true,
         'hiddenBySection': false,
+        'hiddenBySubSection': false,
         'isRequiredByAgent': true,
         'isValid': true,
         'isValidOverride': false
       }),
-    Em.Object.create({
-      'name': 'p6',
-      'isVisible': true,
-      'hiddenBySection': false,
-      'isRequiredByAgent': false,
-      'isValid': true,
-      'isValidOverride': false
-    }),
-    Em.Object.create({
-      'name': 'p7',
-      'isVisible': true,
-      'hiddenBySection': false,
-      'isRequiredByAgent': false,
-      'isValid': true,
-      'isRequired': true,
-      'isValidOverride': false
-    })
+      App.ServiceConfigProperty.create({
+        'name': 'p6',
+        'isVisible': true,
+        'hiddenBySection': false,
+        'hiddenBySubSection': false,
+        'isRequiredByAgent': false,
+        'isRequired': false,
+        'isValid': true,
+        'isValidOverride': false
+      }),
+      App.ServiceConfigProperty.create({
+        'name': 'p7',
+        'isVisible': true,
+        'hiddenBySection': false,
+        'hiddenBySubSection': false,
+        'isRequiredByAgent': false,
+        'isValid': true,
+        'isRequired': true,
+        'isValidOverride': false
+      })
   ];
 
 describe('App.ServiceConfig', function () {