From 6beaa4b1668e9746b93a54dd7e70c0798d8935c5 Mon Sep 17 00:00:00 2001 From: Marliana Lara Date: Tue, 10 Apr 2018 13:46:55 -0400 Subject: [PATCH 1/2] Fix infinite Wait spinner when deleting instance group --- .../list/instance-groups-list.controller.js | 59 +++++++++++-------- .../list/instance-groups-list.partial.html | 10 +--- 2 files changed, 37 insertions(+), 32 deletions(-) diff --git a/awx/ui/client/src/instance-groups/list/instance-groups-list.controller.js b/awx/ui/client/src/instance-groups/list/instance-groups-list.controller.js index 1660b0b0da..3a48660c62 100644 --- a/awx/ui/client/src/instance-groups/list/instance-groups-list.controller.js +++ b/awx/ui/client/src/instance-groups/list/instance-groups-list.controller.js @@ -1,10 +1,9 @@ -export default ['$scope', 'resolvedModels', 'Dataset', '$state', 'ComponentsStrings', 'ProcessErrors', 'Wait', - function($scope, resolvedModels, Dataset, $state, strings, ProcessErrors, Wait) { +export default ['$scope', '$filter', '$state', 'Alert', 'resolvedModels', 'Dataset', 'ComponentsStrings', 'ProcessErrors', 'Prompt', 'Wait', + function($scope, $filter, $state, Alert, resolvedModels, Dataset, strings, ProcessErrors, Prompt, Wait) { const vm = this; const { instanceGroup } = resolvedModels; vm.strings = strings; - $scope.selection = {}; init(); @@ -33,31 +32,43 @@ export default ['$scope', 'resolvedModels', 'Dataset', '$state', 'ComponentsStri vm.activeId = parseInt($state.params.instance_group_id); }); - vm.delete = () => { - Wait('start'); - let deletables = $scope.selection; - deletables = Object.keys(deletables).filter((n) => deletables[n]); + vm.deleteInstanceGroup = instance_group => { + if (!instance_group) { + Alert(strings.get('error.DELETE'), strings.get('alert.MISSING_PARAMETER')); + return; + } - deletables.forEach((data) => { - let promise = instanceGroup.http.delete({resource: data}); - Promise.resolve(promise).then(vm.onSaveSuccess) - .catch(({data, status}) => { - ProcessErrors($scope, data, status, null, { - hdr: 'Error!', - msg: 'Call failed. Return status: ' + status - }); - }) - .finally(() => { - Wait('stop'); - }); + Prompt({ + action() { + $('#prompt-modal').modal('hide'); + Wait('start'); + instanceGroup + .request('delete', instance_group.id) + .then(() => handleSuccessfulDelete(instance_group)) + .catch(createErrorHandler('delete instance group', 'DELETE')) + .finally(() => Wait('stop')); + }, + hdr: strings.get('DELETE'), + resourceName: $filter('sanitize')(instance_group.name), + body: `${strings.get('deleteResource.CONFIRM', 'instance group')}` }); }; - vm.onSaveSuccess = () => { - $state.transitionTo($state.current, $state.params, { - reload: true, location: true, inherit: false, notify: true - }); - }; + function handleSuccessfulDelete(instance_group) { + if (parseInt($state.params.instance_group_id, 0) === instance_group.id) { + $state.go('instanceGroups', $state.params, { reload: true }); + } else { + $state.go('.', $state.params, { reload: true }); + } + } + + function createErrorHandler(path, action) { + return ({ data, status }) => { + const hdr = strings.get('error.HEADER'); + const msg = strings.get('error.CALL', { path, action, status }); + ProcessErrors($scope, data, status, null, { hdr, msg }); + }; + } $scope.createInstanceGroup = () => { $state.go('instanceGroups.add'); diff --git a/awx/ui/client/src/instance-groups/list/instance-groups-list.partial.html b/awx/ui/client/src/instance-groups/list/instance-groups-list.partial.html index cc40d32050..2600ce4094 100644 --- a/awx/ui/client/src/instance-groups/list/instance-groups-list.partial.html +++ b/awx/ui/client/src/instance-groups/list/instance-groups-list.partial.html @@ -19,10 +19,6 @@ search-tags="searchTags">
-
- -