From 9ec5009bdf10e83307d419e68c3e81308b2b4654 Mon Sep 17 00:00:00 2001 From: mabashian Date: Wed, 27 Jun 2018 11:44:38 -0400 Subject: [PATCH] Updates to instance list and instance modal search --- .../instances/instance-modal.controller.js | 58 +++++++++++++++---- .../instances/instance-modal.partial.html | 17 +++--- .../instances/instances-list.partial.html | 10 ++-- .../instances/instances.controller.js | 17 +----- 4 files changed, 63 insertions(+), 39 deletions(-) diff --git a/awx/ui/client/src/instance-groups/instances/instance-modal.controller.js b/awx/ui/client/src/instance-groups/instances/instance-modal.controller.js index 0edac623d1..93400a8ad8 100644 --- a/awx/ui/client/src/instance-groups/instances/instance-modal.controller.js +++ b/awx/ui/client/src/instance-groups/instances/instance-modal.controller.js @@ -1,8 +1,11 @@ function InstanceModalController ($scope, $state, models, strings, ProcessErrors, Wait) { const { instance, instanceGroup } = models; const vm = this || {}; + let relatedInstanceIds = []; vm.setInstances = () => { + vm.relatedInstances = []; + vm.selectedRows = []; vm.instances = instance.get('results').map(instance => { instance.isSelected = false; return instance; @@ -12,9 +15,10 @@ function InstanceModalController ($scope, $state, models, strings, ProcessErrors vm.setRelatedInstances = () => { vm.instanceGroupName = instanceGroup.get('name'); vm.relatedInstances = instanceGroup.get('related.instances.results'); - vm.relatedInstanceIds = vm.relatedInstances.map(instance => instance.id); + vm.selectedRows = _.cloneDeep(vm.relatedInstances); + relatedInstanceIds = vm.relatedInstances.map(instance => instance.id); vm.instances = instance.get('results').map(instance => { - instance.isSelected = vm.relatedInstanceIds.includes(instance.id); + instance.isSelected = relatedInstanceIds.includes(instance.id); return instance; }); }; @@ -26,24 +30,38 @@ function InstanceModalController ($scope, $state, models, strings, ProcessErrors vm.panelTitle = strings.get('instance.PANEL_TITLE'); vm.instanceGroupId = instanceGroup.get('id'); + vm.dataset = instance.get(); + vm.querySet = { order_by: 'hostname', page_size: '5' }; + + vm.list = { + name: 'instances', + iterator: 'instance', + basePath: `/api/v2/instances/` + }; + if (vm.instanceGroupId === undefined) { vm.setInstances(); } else { vm.setRelatedInstances(); } - } - $scope.$watch('vm.instances', function() { - vm.selectedRows = _.filter(vm.instances, 'isSelected'); - vm.deselectedRows = _.filter(vm.instances, 'isSelected', false); - }, true); + $scope.$watch('vm.instances', function() { + angular.forEach(vm.instances, function(instance) { + instance.isSelected = _.filter(vm.selectedRows, 'id', instance.id).length > 0; + }); + }); + } vm.submit = () => { Wait('start'); - const associate = vm.selectedRows - .map(instance => ({id: instance.id})); - const disassociate = vm.deselectedRows - .map(instance => ({id: instance.id, disassociate: true})); + const selectedRowIds = vm.selectedRows.map(instance => instance.id); + + const associate = selectedRowIds.filter(instanceId => { + return !relatedInstanceIds.includes(instanceId); + }).map(id => ({id})); + const disassociate = relatedInstanceIds.filter(instanceId => { + return !selectedRowIds.includes(instanceId); + }).map(id => ({id, disassociate: true})); const all = associate.concat(disassociate); const defers = all.map((data) => { @@ -74,6 +92,24 @@ function InstanceModalController ($scope, $state, models, strings, ProcessErrors vm.dismiss = () => { $state.go('instanceGroups.instances'); }; + + vm.toggleRow = (row) => { + if (row.isSelected) { + let matchingIndex; + angular.forEach(vm.selectedRows, function(value, index) { + if(row.id === vm.selectedRows[index].id) { + matchingIndex = index; + } + }); + + vm.selectedRows.splice(matchingIndex, 1); + row.isSelected = false; + } else { + row.isSelected = true; + vm.selectedRows.push(row); + } + + }; } InstanceModalController.$inject = [ diff --git a/awx/ui/client/src/instance-groups/instances/instance-modal.partial.html b/awx/ui/client/src/instance-groups/instances/instance-modal.partial.html index 90675e2f40..50a25d5606 100644 --- a/awx/ui/client/src/instance-groups/instances/instance-modal.partial.html +++ b/awx/ui/client/src/instance-groups/instances/instance-modal.partial.html @@ -17,12 +17,13 @@ + list="vm.list" + collection="vm.instances" + dataset="vm.dataset" + search-tags="vm.searchTags" + query-set="vm.querySet"> @@ -32,10 +33,10 @@ + ng-disabled="state._disabled" + ng-click="vm.toggleRow(instance)" />
- \ No newline at end of file + diff --git a/awx/ui/client/src/instance-groups/instances/instances-list.partial.html b/awx/ui/client/src/instance-groups/instances/instances-list.partial.html index 129637d1f0..38020e8fa3 100644 --- a/awx/ui/client/src/instance-groups/instances/instances-list.partial.html +++ b/awx/ui/client/src/instance-groups/instances/instances-list.partial.html @@ -14,12 +14,12 @@ + list="vm.list" + collection="vm.instances" + dataset="vm.dataset" + search-tags="vm.searchTags">
diff --git a/awx/ui/client/src/instance-groups/instances/instances.controller.js b/awx/ui/client/src/instance-groups/instances/instances.controller.js index e81f9c106e..02bbef380b 100644 --- a/awx/ui/client/src/instance-groups/instances/instances.controller.js +++ b/awx/ui/client/src/instance-groups/instances/instances.controller.js @@ -10,26 +10,13 @@ function InstancesController ($scope, $state, $http, models, Instance, strings, init(); function init() { - $scope.list = { + vm.list = { name: 'instances', iterator: 'instance', basePath: `/api/v2/instance_groups/${vm.instance_group_id}/instances/` }; - $scope.collection = { - iterator: 'instance', - basePath: `/api/v2/instance_groups/${vm.instance_group_id}/instances/` - }; - - $scope[`${$scope.list.iterator}_dataset`] = Dataset.data; - $scope[$scope.list.name] = $scope[`${$scope.list.iterator}_dataset`].results; - $scope.instances = vm.instances; - - $scope.$on('updateDataset', function(e, dataset) { - $scope[`${$scope.list.iterator}_dataset`] = dataset; - $scope[$scope.list.name] = dataset.results; - vm.instances = dataset.results; - }); + vm.dataset = Dataset.data; } vm.tab = {