소스 검색

AMBARI-9193 Properties' panel without properties collapses during remove property on another panel. (ababiichuk)

aBabiichuk 10 년 전
부모
커밋
fe17e117fd

+ 8 - 9
ambari-web/app/views/common/configs/service_configs_by_category_view.js

@@ -265,6 +265,7 @@ App.ServiceConfigsByCategoryView = Em.View.extend(App.UserPref, {
     var filter = this.get('parentView.filter').toLowerCase();
     var selectedFilters = this.get('parentView.columns').filterProperty('selected');
     var filteredResult = this.get('categoryConfigs');
+    var isInitialRendering = !arguments.length || arguments[1] != 'categoryConfigs';
 
     if (selectedFilters.length > 0 || filter.length > 0 || this.get('state') === 'inDOM') {
       filteredResult.forEach(function (config) {
@@ -300,24 +301,22 @@ App.ServiceConfigsByCategoryView = Em.View.extend(App.UserPref, {
     filteredResult = this.sortByIndex(filteredResult);
     filteredResult = filteredResult.filterProperty('isHiddenByFilter', false);
 
-    if (filter && filteredResult.length) {
-      if (typeof this.get('category.collapsedByDefault') === 'undefined') {
+    if (filter) {
+      if (filteredResult.length && typeof this.get('category.collapsedByDefault') === 'undefined') {
         // Save state
         this.set('category.collapsedByDefault', this.get('category.isCollapsed'));
       }
-      this.set('category.isCollapsed', false);
-    }
-    else if (filter && !filteredResult.length) {
-      this.set('category.isCollapsed', true);
-    }
-    else if (!filter && typeof this.get('category.collapsedByDefault') !== 'undefined') {
+      this.set('category.isCollapsed', !filteredResult.length);
+    } else if (typeof this.get('category.collapsedByDefault') !== 'undefined') {
       // If user clear filter -- restore defaults
       this.set('category.isCollapsed', this.get('category.collapsedByDefault'));
       this.set('category.collapsedByDefault', undefined);
+    } else if (isInitialRendering && !filteredResult.length) {
+      this.set('category.isCollapsed', true);
     }
 
     var categoryBlock = $('.' + this.get('category.name').split(' ').join('.') + '>.accordion-body');
-    filteredResult.length && !this.get('category.isCollapsed') ? categoryBlock.show() : categoryBlock.hide();
+    this.get('category.isCollapsed') ? categoryBlock.hide() : categoryBlock.show();
   }.observes('categoryConfigs', 'parentView.filter', 'parentView.columns.@each.selected'),
 
   /**

+ 178 - 0
ambari-web/test/views/common/configs/service_configs_by_category_view_test.js

@@ -102,4 +102,182 @@ describe('App.ServiceConfigsByCategoryView', function () {
     })
   });
 
+  describe('#filteredCategoryConfigs', function () {
+
+    var view,
+      cases = [
+        {
+          filter: '',
+          serviceConfigs: [],
+          propertyToChange: null,
+          isCollapsed: false,
+          expectedIsCollapsed: true,
+          title: 'no filter, empty category, initial rendering'
+        },
+        {
+          filter: '',
+          serviceConfigs: [],
+          propertyToChange: 'categoryConfigs',
+          isCollapsed: false,
+          expectedIsCollapsed: false,
+          title: 'no filter, new property added'
+        },
+        {
+          filter: '',
+          serviceConfigs: [
+            Em.Object.create({
+              category: 'c',
+              isVisible: true,
+              isHiddenByFilter: false
+            })
+          ],
+          propertyToChange: null,
+          isCollapsed: false,
+          expectedIsCollapsed: false,
+          title: 'no filter, initial rendering, not empty category'
+        },
+        {
+          filter: '',
+          serviceConfigs: [],
+          propertyToChange: null,
+          isCollapsed: false,
+          collapsedByDefault: true,
+          expectedIsCollapsed: true,
+          title: 'no filter, restore after filtering'
+        },
+        {
+          filter: 'n',
+          serviceConfigs: [
+            Em.Object.create({
+              name: 'nm',
+              category: 'c',
+              isVisible: true
+            })
+          ],
+          propertyToChange: null,
+          isCollapsed: false,
+          expectedIsCollapsed: false,
+          title: 'filtering by name, not empty category'
+        },
+        {
+          filter: 'd',
+          serviceConfigs: [
+            Em.Object.create({
+              displayName: 'dn',
+              category: 'c',
+              isVisible: true
+            })
+          ],
+          propertyToChange: null,
+          isCollapsed: false,
+          expectedIsCollapsed: false,
+          title: 'filtering by display name, not empty category'
+        },
+        {
+          filter: 'd',
+          serviceConfigs: [
+            Em.Object.create({
+              description: 'desc',
+              category: 'c',
+              isVisible: true
+            })
+          ],
+          propertyToChange: null,
+          isCollapsed: false,
+          expectedIsCollapsed: false,
+          title: 'filtering by description, not empty category'
+        },
+        {
+          filter: 'd',
+          serviceConfigs: [
+            Em.Object.create({
+              defaultValue: 'dv',
+              category: 'c',
+              isVisible: true
+            })
+          ],
+          propertyToChange: null,
+          isCollapsed: false,
+          expectedIsCollapsed: false,
+          title: 'filtering by default value, not empty category'
+        },
+        {
+          filter: 'v',
+          serviceConfigs: [
+            Em.Object.create({
+              value: 'val',
+              category: 'c',
+              isVisible: true
+            })
+          ],
+          propertyToChange: null,
+          isCollapsed: false,
+          expectedIsCollapsed: false,
+          title: 'filtering by value, not empty category'
+        },
+        {
+          filter: 'v',
+          serviceConfigs: [
+            Em.Object.create({
+              category: 'c',
+              isVisible: true,
+              overrides: [
+                Em.Object.create({
+                  value: 'val'
+                })
+              ]
+            })
+          ],
+          propertyToChange: null,
+          isCollapsed: false,
+          expectedIsCollapsed: false,
+          title: 'filtering by overridden property value, not empty category'
+        },
+        {
+          filter: 'n',
+          serviceConfigs: [
+            Em.Object.create({
+              category: 'c',
+              isVisible: true,
+              overrides: [
+                Em.Object.create({
+                  group: {
+                    name: 'nm'
+                  }
+                })
+              ]
+            })
+          ],
+          propertyToChange: null,
+          isCollapsed: false,
+          expectedIsCollapsed: false,
+          title: 'filtering by overridden property name, not empty category'
+        }
+      ];
+
+    cases.forEach(function (item) {
+      it(item.title, function () {
+        view = App.ServiceConfigsByCategoryView.create({
+          parentView: {
+            filter: item.filter,
+            columns: []
+          },
+          category: {
+            name: 'c',
+            isCollapsed: item.isCollapsed,
+            collapsedByDefault: item.collapsedByDefault
+          },
+          serviceConfigs: item.serviceConfigs
+        });
+        if (item.propertyToChange) {
+          view.propertyDidChange(item.propertyToChange);
+        } else {
+          view.filteredCategoryConfigs();
+        }
+        expect(view.get('category.isCollapsed')).to.equal(item.expectedIsCollapsed);
+      });
+    });
+
+  });
+
 });