From 158868038bd1180d9d72c5605e8202e4fc7a8183 Mon Sep 17 00:00:00 2001 From: Arthur Almeida Date: Thu, 2 Nov 2017 18:21:41 -0200 Subject: [PATCH] added methods for disable all buttons and disable except one for buttons collections --- src/panels/model/Buttons.js | 34 ++++++++++++++++++++++++++ test/specs/panels/model/PanelModels.js | 18 ++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/src/panels/model/Buttons.js b/src/panels/model/Buttons.js index cf09589f1..74901156b 100644 --- a/src/panels/model/Buttons.js +++ b/src/panels/model/Buttons.js @@ -38,5 +38,39 @@ module.exports = Backbone.Collection.extend({ } }); }, + + /** + * Disables all buttons + * @param {String} ctx Context string + * + * @return void + * */ + disableAllButtons(ctx) { + var context = ctx || ''; + this.forEach((model, index) => { + if( model.get('context') == context ){ + model.set('disable', true); + if(model.get('buttons').length) + model.get('buttons').disableAllButtons(context); + } + }); + }, + + /** + * Disables all buttons, except one passed + * @param {Object} except Model to ignore + * @param {Boolean} r Recursive flag + * + * @return void + * */ + disableAllButtonsExceptOne(except, r) { + this.forEach((model, index) => { + if(model !== except){ + model.set('disable', true); + if(r && model.get('buttons').length) + model.get('buttons').disableAllButtonsExceptOne(except,r); + } + }); + }, }); diff --git a/test/specs/panels/model/PanelModels.js b/test/specs/panels/model/PanelModels.js index 923092712..5bf63722c 100644 --- a/test/specs/panels/model/PanelModels.js +++ b/test/specs/panels/model/PanelModels.js @@ -73,6 +73,24 @@ module.exports = { obj.deactivateAllExceptOne(btn); expect(obj.at(0).get('active')).toEqual(true); }); + + it('Disable all buttons', () => { + obj.add({ disable: false }); + obj.disableAllButtons(); + expect(obj.at(0).get('disable')).toEqual(true); + }); + + it('Disables buttons with context', () => { + obj.add({ disable: false, context: 'someContext' }); + obj.disableAllButtons('someContext'); + expect(obj.at(0).get('disable')).toEqual(true); + }); + + it('Disables except one', () => { + var btn = obj.add({ disable: false }); + obj.disableAllButtonsExceptOne(btn); + expect(obj.at(0).get('disable')).toEqual(false); + }); });