From 227481ac50ec1ca587515ff5a822d04c7e0c7430 Mon Sep 17 00:00:00 2001 From: Joris Tirado Date: Fri, 2 Aug 2019 16:55:46 -0700 Subject: [PATCH] MSPB-5: Disable device creation on click to avoid click bombing (#151) * Disable device creation on click to avoid click bombing * Remove disabled attribute on button when request fails --- submodules/devices/devices.js | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/submodules/devices/devices.js b/submodules/devices/devices.js index 233709a..74a0332 100644 --- a/submodules/devices/devices.js +++ b/submodules/devices/devices.js @@ -615,12 +615,17 @@ define(function(require) { if (monster.ui.valid(deviceForm)) { templateDevice.find('.feature-key-value:not(.active)').remove(); - var dataToSave = self.devicesMergeData(data, templateDevice, audioCodecs, videoCodecs); + var $this = $(this), + dataToSave = self.devicesMergeData(data, templateDevice, audioCodecs, videoCodecs); + + $this.prop('disabled', 'disabled'); self.devicesSaveDevice(dataToSave, function(data) { popup.dialog('close').remove(); callbackSave && callbackSave(data); + }, function() { + $this.prop('disabled', false); }); } else { templateDevice.find('.tabs-selector[data-section="basic"]').click(); @@ -1325,17 +1330,27 @@ define(function(require) { }); }, - devicesSaveDevice: function(deviceData, callback) { + /** + * @param {Object} deviceData + * @param {Function} callbackSuccess + * @param {Function} [callbackError] + */ + devicesSaveDevice: function(deviceData, callbackSuccess, callbackError) { var self = this; if (deviceData.id) { - self.devicesUpdateDevice(deviceData, callback); + self.devicesUpdateDevice(deviceData, callbackSuccess, callbackError); } else { - self.devicesCreateDevice(deviceData, callback); + self.devicesCreateDevice(deviceData, callbackSuccess, callbackError); } }, - devicesCreateDevice: function(deviceData, callback) { + /** + * @param {Object} deviceData + * @param {Function} callbackSuccess + * @param {Function} [callbackError] + */ + devicesCreateDevice: function(deviceData, callbackSuccess, callbackError) { var self = this; self.callApi({ @@ -1345,11 +1360,19 @@ define(function(require) { data: deviceData }, success: function(data) { - callback(data.data); + callbackSuccess(data.data); + }, + error: function(data) { + callbackError && callbackError(data); } }); }, + /** + * @param {Object} deviceData + * @param {Function} callbackSuccess + * @param {Function} [callbackError] + */ devicesUpdateDevice: function(deviceData, callbackSuccess, callbackError) { var self = this;