Browse Source

AMBARI-11650 'Reinstall packages' action for repo version is always enabled. (atkach)

Andrii Tkach 10 years ago
parent
commit
eb1be1194c

+ 4 - 5
ambari-web/app/templates/main/admin/stack_upgrade/upgrade_version_box.hbs

@@ -42,15 +42,14 @@
         {{bindAttr disabled="view.stateElement.isDisabled"}}>
         {{bindAttr disabled="view.stateElement.isDisabled"}}>
         {{view.stateElement.text}}
         {{view.stateElement.text}}
       </button>
       </button>
-      <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown">
+      <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown" {{bindAttr disabled="view.stateElement.isDisabled"}}>
         <span class="caret"></span>
         <span class="caret"></span>
       </button>
       </button>
       <ul class="dropdown-menu">
       <ul class="dropdown-menu">
         {{#each button in view.stateElement.buttons}}
         {{#each button in view.stateElement.buttons}}
-          <li>
-            <a {{action runAction button.action target="view"}}
-              {{bindAttr disabled="button.isDisabled"}}>
-            {{button.text}}
+          <li {{bindAttr class="button.isDisabled:disabled"}}>
+            <a {{action runAction button.action target="view"}}>
+              {{button.text}}
             </a>
             </a>
           </li>
           </li>
         {{/each}}
         {{/each}}

+ 9 - 3
ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_box_view.js

@@ -127,14 +127,16 @@ App.UpgradeVersionBoxView = Em.View.extend({
       element.set('action', 'showProgressPopup');
       element.set('action', 'showProgressPopup');
     } else if (status === 'INSTALLED' && !this.get('isUpgrading')) {
     } else if (status === 'INSTALLED' && !this.get('isUpgrading')) {
       if (stringUtils.compareVersions(this.get('content.repositoryVersion'), currentVersion.repository_version) === 1) {
       if (stringUtils.compareVersions(this.get('content.repositoryVersion'), currentVersion.repository_version) === 1) {
+        var isDisabled = !App.isAccessible('ADMIN') || this.get('controller.requestInProgress') || isInstalling;
         element.set('isButtonGroup', true);
         element.set('isButtonGroup', true);
         element.set('text', Em.I18n.t('admin.stackVersions.version.performUpgrade'));
         element.set('text', Em.I18n.t('admin.stackVersions.version.performUpgrade'));
         element.set('action', 'confirmUpgrade');
         element.set('action', 'confirmUpgrade');
         element.get('buttons').pushObject({
         element.get('buttons').pushObject({
           text: Em.I18n.t('admin.stackVersions.version.reinstall'),
           text: Em.I18n.t('admin.stackVersions.version.reinstall'),
-          action: 'installRepoVersionConfirmation'
+          action: 'installRepoVersionConfirmation',
+          isDisabled: isDisabled
         });
         });
-        element.set('isDisabled', !App.isAccessible('ADMIN') || this.get('controller.requestInProgress') || isInstalling);
+        element.set('isDisabled', isDisabled);
       } else {
       } else {
         element.set('iconClass', 'icon-ok');
         element.set('iconClass', 'icon-ok');
         element.set('isLink', true);
         element.set('isLink', true);
@@ -173,7 +175,11 @@ App.UpgradeVersionBoxView = Em.View.extend({
    * run custom action of controller
    * run custom action of controller
    */
    */
   runAction: function (event) {
   runAction: function (event) {
-    var action = event && event.context || this.get('stateElement.action');
+    var target = event && event.target,
+      action = event && event.context || this.get('stateElement.action');
+    if (target && ($(target).hasClass('disabled') || $(target).parent().hasClass('disabled'))) {
+      return;
+    }
     if (action) {
     if (action) {
       this.get('controller')[action](this.get('content'));
       this.get('controller')[action](this.get('content'));
     }
     }

+ 40 - 2
ambari-web/test/views/main/admin/stack_upgrade/upgrade_version_box_view_test.js

@@ -121,11 +121,17 @@ describe('App.UpgradeVersionBoxView', function () {
   });
   });
 
 
   describe("#runAction()", function () {
   describe("#runAction()", function () {
+    var hasClass = function () {
+        return true;
+      },
+      jQueryMock;
     beforeEach(function () {
     beforeEach(function () {
       sinon.stub(view.get('controller'), 'upgrade').returns(1);
       sinon.stub(view.get('controller'), 'upgrade').returns(1);
+      jQueryMock = sinon.stub(window, '$');
     });
     });
     afterEach(function () {
     afterEach(function () {
       view.get('controller').upgrade.restore();
       view.get('controller').upgrade.restore();
+      jQueryMock.restore();
     });
     });
     it("action = null", function () {
     it("action = null", function () {
       view.set('stateElement.action', null);
       view.set('stateElement.action', null);
@@ -145,6 +151,36 @@ describe('App.UpgradeVersionBoxView', function () {
       view.runAction();
       view.runAction();
       expect(view.get('controller').upgrade.calledWith('content')).to.be.true;
       expect(view.get('controller').upgrade.calledWith('content')).to.be.true;
     });
     });
+    it("link is disabled", function () {
+      jQueryMock.returns({
+        hasClass: hasClass,
+        parent: function () {
+          return {
+            hasClass: Em.K
+          };
+        }
+      });
+      view.runAction({
+        context: 'upgrade',
+        target: {}
+      });
+      expect(view.get('controller').upgrade.called).to.be.false;
+    });
+    it("link parent element is disabled", function () {
+      jQueryMock.returns({
+        hasClass: Em.K,
+        parent: function () {
+          return {
+            hasClass: hasClass
+          };
+        }
+      });
+      view.runAction({
+        context: 'upgrade',
+        target: {}
+      });
+      expect(view.get('controller').upgrade.called).to.be.false;
+    });
   });
   });
 
 
   describe("#editRepositories()", function () {
   describe("#editRepositories()", function () {
@@ -433,7 +469,8 @@ describe('App.UpgradeVersionBoxView', function () {
           buttons: [
           buttons: [
             {
             {
               text: Em.I18n.t('admin.stackVersions.version.reinstall'),
               text: Em.I18n.t('admin.stackVersions.version.reinstall'),
-              action: 'installRepoVersionConfirmation'
+              action: 'installRepoVersionConfirmation',
+              isDisabled: true
             }
             }
           ],
           ],
           isDisabled: true
           isDisabled: true
@@ -468,7 +505,8 @@ describe('App.UpgradeVersionBoxView', function () {
           buttons: [
           buttons: [
             {
             {
               text: Em.I18n.t('admin.stackVersions.version.reinstall'),
               text: Em.I18n.t('admin.stackVersions.version.reinstall'),
-              action: 'installRepoVersionConfirmation'
+              action: 'installRepoVersionConfirmation',
+              isDisabled: true
             }
             }
           ],
           ],
           isDisabled: true
           isDisabled: true