From 1f68055ea8f17849a77341fdf30747efe4c8ce21 Mon Sep 17 00:00:00 2001 From: Maxime Roux Date: Thu, 5 Mar 2015 10:22:04 -0800 Subject: [PATCH] UI-1135: Updated the numbers section of SmartPBX's users and groups so that it requires a click on a button to save changes --- submodules/groups/groups.js | 79 ++++++-------- submodules/users/users.js | 179 ++++++++++++++------------------ views/groups-numbers.html | 19 ++-- views/users-numbers.html | 19 ++-- views/users-rowSpareNumber.html | 29 ------ 5 files changed, 131 insertions(+), 194 deletions(-) delete mode 100644 views/users-rowSpareNumber.html diff --git a/submodules/groups/groups.js b/submodules/groups/groups.js index 2d47cb6..d69337b 100644 --- a/submodules/groups/groups.js +++ b/submodules/groups/groups.js @@ -801,7 +801,8 @@ define(function(require){ groupsBindNumbers: function(template, data) { var self = this, toastrMessages = self.i18n.active().groups.toastrMessages, - currentNumberSearch = ''; + currentNumberSearch = '', + extraSpareNumbers = []; // template.on('click', '.list-assigned-items .remove-number', function() { // var row = $(this).parents('.item-row'), @@ -839,11 +840,9 @@ define(function(require){ template.on('click', '.list-assigned-items .remove-number', function() { var $this = $(this), - parentRow = $this.parents('.grid-row'), - callflowId = parentRow.data('callflow_id'), - groupName = parentRow.data('name'), - row = $this.parents('.item-row'), - dataNumbers = []; + row = $this.parents('.item-row'); + + extraSpareNumbers.push(row.data('id')); row.slideUp(function() { row.remove(); @@ -852,14 +851,7 @@ define(function(require){ template.find('.list-assigned-items .empty-row').slideDown(); } - template.find('.item-row').each(function(idx, elem) { - dataNumbers.push($(elem).data('id')); - }); - - self.groupsUpdateNumbers(callflowId, dataNumbers, function(callflowData) { - toastr.success(monster.template(self, '!' + toastrMessages.numbersUpdated, { name: groupName })); - self.groupsRender({ groupId: callflowData.group_id }); - }); + template.find('.spare-link').removeClass('disabled'); }); }); @@ -960,31 +952,26 @@ define(function(require){ args = { accountName: monster.apps['auth'].currentAccount.name, accountId: self.accountId, + ignoreNumbers: $.map(template.find('.item-row'), function(row) { + return $(row).data('id'); + }), + extraNumbers: extraSpareNumbers, callback: function(numberList) { - var parentRow = $this.parents('.grid-row'), - callflowId = parentRow.data('callflow_id'), - name = parentRow.data('name'); - dataNumbers = []; - template.find('.empty-row').hide(); - template.find('.item-row').each(function(idx, elem) { - dataNumbers.push($(elem).data('id')); - }); - _.each(numberList, function(val, idx) { - dataNumbers.push(val.phoneNumber); val.isLocal = val.features.indexOf('local') > -1; template .find('.list-assigned-items') .append($(monster.template(self, 'groups-numbersItemRow', { number: val }))); - }); - self.groupsUpdateNumbers(callflowId, dataNumbers, function(callflowData) { - toastr.success(monster.template(self, '!' + toastrMessages.numbersUpdated, { name: name })); - self.groupsRender({ groupId: callflowData.group_id }); + extraSpareNumbers = _.without(extraSpareNumbers, val.phoneNumber); }); + + if(remainingQuantity == 0) { + template.find('.spare-link').addClass('disabled'); + } } } @@ -996,38 +983,40 @@ define(function(require){ monster.pub('common.buyNumbers', { searchType: $(this).data('type'), - callbacks: { + callbacks: { success: function(numbers) { - var countNew = 0; monster.pub('common.numbers.getListFeatures', function(features) { _.each(numbers, function(number, k) { - countNew++; - - /* Formating number */ number.viewFeatures = $.extend(true, {}, features); - var rowTemplate = monster.template(self, 'users-rowSpareNumber', number); + var rowTemplate = monster.template(self, 'groups-numbersItemRow', { number: number }); template.find('.list-unassigned-items .empty-row').hide(); template.find('.list-unassigned-items').append(rowTemplate); }); - - var previous = parseInt(template.find('.unassigned-list-header .count-spare').data('count')), - newTotal = previous + countNew; - - template.find('.unassigned-list-header .count-spare') - .data('count', newTotal) - .html(newTotal); - - template.find('.spare-link.disabled').removeClass('disabled'); }); - }, - error: function(error) { } } }); }); + + template.on('click', '.save-numbers', function() { + var $this = $(this), + parentRow = $this.parents('.grid-row'), + callflowId = parentRow.data('callflow_id'), + name = parentRow.data('name'); + dataNumbers = []; + + template.find('.item-row').each(function(k, row) { + dataNumbers.push($(row).data('id')); + }); + + self.groupsUpdateNumbers(callflowId, dataNumbers, function(callflowData) { + toastr.success(monster.template(self, '!' + toastrMessages.numbersUpdated, { name: name })); + self.groupsRender({ groupId: callflowData.group_id }); + }); + }); }, groupsBindExtensions: function(template, data) { diff --git a/submodules/users/users.js b/submodules/users/users.js index 6fd3f9b..d6d7909 100644 --- a/submodules/users/users.js +++ b/submodules/users/users.js @@ -344,6 +344,7 @@ define(function(require){ existingExtensions = data.existingExtensions, extensionsToSave, numbersToSave, + extraSpareNumbers, toastrMessages = self.i18n.active().users.toastrMessages, mainDirectoryId, mainCallflowId, @@ -426,6 +427,7 @@ define(function(require){ } else if(type === 'numbers') { extensionsToSave = []; + extraSpareNumbers = []; currentCallflow = data.callflow; currentUser = data.user; @@ -965,11 +967,10 @@ define(function(require){ /* Events for Numbers in Users */ template.on('click', '.detail-numbers .list-assigned-items .remove-number', function() { var $this = $(this), - userName = currentUser.first_name + ' ' + currentUser.last_name, - dataNumbers = $.extend(true, [], extensionsToSave), - userId = currentUser.id, row = $this.parents('.item-row'); + extraSpareNumbers.push(row.data('id')); + row.slideUp(function() { row.remove(); @@ -977,41 +978,89 @@ define(function(require){ template.find('.list-assigned-items .empty-row').slideDown(); } - template.find('.item-row').each(function(idx, elem) { - dataNumbers.push($(elem).data('id')); - }); + template.find('.spare-link').removeClass('disabled'); + }); + }); - if(dataNumbers.length > 0) { - var updateCallflow = function() { - self.usersUpdateCallflowNumbers(userId, (currentCallflow || {}).id, dataNumbers, function(callflowData) { - toastr.success(monster.template(self, '!' + toastrMessages.numbersUpdated, { name: userName })); - self.usersRender({ userId: userId }); - }); - }; + template.on('click', '.actions .spare-link:not(.disabled)', function(e) { + e.preventDefault(); - // If we deleted a number that was used as the Caller-ID , disable the Caller-ID feature. - var needUpdateUser = false; - if(currentUser.caller_id.hasOwnProperty('external') && dataNumbers.indexOf(currentUser.caller_id.external.number) < 0) { - delete currentUser.caller_id.external.number; - needUpdateUser = true; - } + var $this = $(this), + args = { + accountName: monster.apps['auth'].currentAccount.name, + accountId: self.accountId, + ignoreNumbers: $.map(template.find('.item-row'), function(row) { + return $(row).data('id'); + }), + extraNumbers: extraSpareNumbers, + callback: function(numberList, remainingQuantity) { + template.find('.empty-row').hide(); + + _.each(numberList, function(val, idx) { + val.isLocal = val.features.indexOf('local') > -1; - if(needUpdateUser) { - self.usersUpdateUser(currentUser, function() { - updateCallflow(); + template + .find('.list-assigned-items') + .append($(monster.template(self, 'users-numbersItemRow', { number: val }))); + + extraSpareNumbers = _.without(extraSpareNumbers, val.phoneNumber); }); + + if(remainingQuantity == 0) { + template.find('.spare-link').addClass('disabled'); + } } - else { - updateCallflow(); + }; + + monster.pub('common.numbers.dialogSpare', args); + }); + + template.on('click', '.actions .buy-link', function(e) { + e.preventDefault(); + monster.pub('common.buyNumbers', { + searchType: $(this).data('type'), + callbacks: { + success: function(numbers) { + monster.pub('common.numbers.getListFeatures', function(features) { + _.each(numbers, function(number, k) { + number.viewFeatures = $.extend(true, {}, features); + + var rowTemplate = monster.template(self, 'users-numbersItemRow', { number: number }); + + template.find('.list-unassigned-items .empty-row').hide(); + template.find('.list-unassigned-items').append(rowTemplate); + }); + }); } } - else { - monster.ui.alert('warning', self.i18n.active().users.noNumberCallflow); - self.usersRender({ userId: userId }); - } }); }); + template.on('click', '.save-numbers', function() { + var $this = $(this), + dataNumbers = $.extend(true, [], extensionsToSave), + name = $this.parents('.grid-row').find('.grid-cell.name').text(), + userId = $this.parents('.grid-row').data('id'); + + template.find('.item-row').each(function(k, row) { + var row = $(row), + number = row.data('id'); + + dataNumbers.push(number); + }); + + if(dataNumbers.length > 0) { + self.usersUpdateCallflowNumbers(userId, (currentCallflow || {}).id, dataNumbers, function(callflowData) { + toastr.success(monster.template(self, '!' + toastrMessages.numbersUpdated, { name: name })); + + self.usersRender({ userId: callflowData.owner_id }); + }); + } + else { + monster.ui.alert('warning', self.i18n.active().users.noNumberCallflow); + } + }); + template.on('click', '.callerId-number', function() { var cnamCell = $(this).parents('.item-row').first(), phoneNumber = cnamCell.data('id'); @@ -1242,80 +1291,6 @@ define(function(require){ ); }); - template.on('click', '.actions .spare-link:not(.disabled)', function(e) { - e.preventDefault(); - - var $this = $(this), - args = { - accountName: monster.apps['auth'].currentAccount.name, - accountId: self.accountId, - callback: function(numberList) { - var name = $this.parents('.grid-row').find('.grid-cell.name').text(), - dataNumbers = $.extend(true, [], extensionsToSave), - userId = $this.parents('.grid-row').data('id'); - - template.find('.empty-row').hide(); - - template.find('.item-row').each(function(idx, elem) { - dataNumbers.push($(elem).data('id')); - }); - - _.each(numberList, function(val, idx) { - dataNumbers.push(val.phoneNumber); - val.isLocal = val.features.indexOf('local') > -1; - - template - .find('.list-assigned-items') - .append($(monster.template(self, 'users-numbersItemRow', { number: val }))); - }); - - self.usersUpdateCallflowNumbers(userId, (currentCallflow || {}).id, dataNumbers, function(callflowData) { - toastr.success(monster.template(self, '!' + toastrMessages.numbersUpdated, { name: name })); - self.usersRender({ userId: callflowData.owner_id }); - }); - } - } - - monster.pub('common.numbers.dialogSpare', args); - }); - - template.on('click', '.actions .buy-link', function(e) { - e.preventDefault(); - monster.pub('common.buyNumbers', { - searchType: $(this).data('type'), - callbacks: { - success: function(numbers) { - var countNew = 0; - - monster.pub('common.numbers.getListFeatures', function(features) { - _.each(numbers, function(number, k) { - countNew++; - - /* Formating number */ - number.viewFeatures = $.extend(true, {}, features); - - var rowTemplate = monster.template(self, 'users-rowSpareNumber', number); - - template.find('.list-unassigned-items .empty-row').hide(); - template.find('.list-unassigned-items').append(rowTemplate); - }); - - var previous = parseInt(template.find('.unassigned-list-header .count-spare').data('count')), - newTotal = previous + countNew; - - template.find('.unassigned-list-header .count-spare') - .data('count', newTotal) - .html(newTotal); - - template.find('.spare-link.disabled').removeClass('disabled'); - }); - }, - error: function(error) { - } - } - }); - }); - $('body').on('click', '#users_container_overlay', function() { template.find('.edit-user').slideUp("400", function() { $(this).empty(); diff --git a/views/groups-numbers.html b/views/groups-numbers.html index deb17d1..51ec093 100644 --- a/views/groups-numbers.html +++ b/views/groups-numbers.html @@ -54,18 +54,19 @@ Add from Spare Numbers + +
{{ i18n.cancel }} +
diff --git a/views/users-numbers.html b/views/users-numbers.html index 30bffa5..f208568 100644 --- a/views/users-numbers.html +++ b/views/users-numbers.html @@ -54,18 +54,19 @@ Add from Spare Numbers + +
{{ i18n.cancel }} +
diff --git a/views/users-rowSpareNumber.html b/views/users-rowSpareNumber.html deleted file mode 100644 index 65ab6a9..0000000 --- a/views/users-rowSpareNumber.html +++ /dev/null @@ -1,29 +0,0 @@ -
-
-
- -
-
- {{#each this.viewFeatures}} - - {{/each}} -
-
-
- - {{ formatPhoneNumber this.id }} -
-