mirror of
https://github.com/ansible/awx.git
synced 2026-03-05 18:51:06 -03:30
Merge pull request #1815 from marshmalien/fix/1474-instance-policy-list-search
Hookup instance policy list smart search and add Dataset resolve
This commit is contained in:
@@ -4,24 +4,29 @@ function InstanceListPolicyLink (scope, el, attrs, controllers) {
|
|||||||
const instancePolicyController = controllers[0];
|
const instancePolicyController = controllers[0];
|
||||||
const formController = controllers[1];
|
const formController = controllers[1];
|
||||||
const models = scope.$resolve.resolvedModels;
|
const models = scope.$resolve.resolvedModels;
|
||||||
|
const Dataset = scope.$resolve.Dataset;
|
||||||
|
|
||||||
instancePolicyController.init(formController, models);
|
instancePolicyController.init(formController, models, Dataset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function InstanceListPolicyController ($scope, $state, strings) {
|
function InstanceListPolicyController ($scope, $state, strings) {
|
||||||
const vm = this || {};
|
const vm = this || {};
|
||||||
let form;
|
let form;
|
||||||
let instance;
|
|
||||||
let instanceGroup;
|
let instanceGroup;
|
||||||
|
vm.strings = strings;
|
||||||
|
|
||||||
vm.init = (_form_, _models_) => {
|
vm.init = (_form_, _models_, Dataset) => {
|
||||||
form = _form_;
|
form = _form_;
|
||||||
({ instance, instanceGroup} = _models_);
|
({ instanceGroup } = _models_);
|
||||||
|
|
||||||
vm.strings = strings;
|
|
||||||
vm.instanceGroupId = instanceGroup.get('id');
|
vm.instanceGroupId = instanceGroup.get('id');
|
||||||
vm.defaultParams = { page_size: '10', order_by: 'hostname' };
|
|
||||||
|
$scope.list = {
|
||||||
|
name: 'instances',
|
||||||
|
iterator: 'instance'
|
||||||
|
};
|
||||||
|
$scope.instance_dataset = Dataset.data;
|
||||||
|
$scope.instances = Dataset.data.results;
|
||||||
|
|
||||||
if (vm.instanceGroupId === undefined) {
|
if (vm.instanceGroupId === undefined) {
|
||||||
vm.setInstances();
|
vm.setInstances();
|
||||||
@@ -31,25 +36,24 @@ function InstanceListPolicyController ($scope, $state, strings) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
vm.setInstances = () => {
|
vm.setInstances = () => {
|
||||||
vm.instances = instance.get('results').map(instance => {
|
$scope.instances = $scope.instances.map(instance => {
|
||||||
instance.isSelected = false;
|
instance.isSelected = false;
|
||||||
return instance;
|
return instance;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
vm.setRelatedInstances = () => {
|
vm.setRelatedInstances = () => {
|
||||||
vm.instanceGroupName = instanceGroup.get('name');
|
|
||||||
vm.relatedInstances = instanceGroup.get('policy_instance_list');
|
vm.relatedInstances = instanceGroup.get('policy_instance_list');
|
||||||
|
|
||||||
vm.instances = instance.get('results').map(instance => {
|
$scope.instances = $scope.instances.map(instance => {
|
||||||
instance.isSelected = vm.relatedInstances.includes(instance.hostname);
|
instance.isSelected = vm.relatedInstances.includes(instance.hostname);
|
||||||
return instance;
|
return instance;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.$watch('vm.instances', function() {
|
$scope.$watch('instances', function() {
|
||||||
vm.selectedRows = _.filter(vm.instances, 'isSelected');
|
vm.selectedRows = _.filter($scope.instances, 'isSelected');
|
||||||
vm.deselectedRows = _.filter(vm.instances, 'isSelected', false);
|
vm.deselectedRows = _.filter($scope.instances, 'isSelected', false);
|
||||||
}, true);
|
}, true);
|
||||||
|
|
||||||
vm.submit = () => {
|
vm.submit = () => {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<at-panel-heading>
|
<at-panel-heading>
|
||||||
{{:: vm.strings.get('instance.PANEL_TITLE') }}
|
{{:: vm.strings.get('instance.PANEL_TITLE') }}
|
||||||
</at-panel-heading>
|
</at-panel-heading>
|
||||||
<multi-select-preview selected-rows='vm.selectedRows' available-rows='vm.instances'></multi-select-preview>
|
<multi-select-preview selected-rows='vm.selectedRows' available-rows='instances'></multi-select-preview>
|
||||||
<at-panel-body>
|
<at-panel-body>
|
||||||
<div class="at-List-toolbar">
|
<div class="at-List-toolbar">
|
||||||
<smart-search
|
<smart-search
|
||||||
@@ -11,15 +11,15 @@
|
|||||||
django-model="instances"
|
django-model="instances"
|
||||||
base-path="instances"
|
base-path="instances"
|
||||||
iterator="instance"
|
iterator="instance"
|
||||||
default-params="vm.defaultParams"
|
|
||||||
list="list"
|
list="list"
|
||||||
dataset="vm.instances"
|
dataset="instance_dataset"
|
||||||
collection="collection"
|
collection="collection"
|
||||||
search-tags="searchTags">
|
search-tags="searchTags"
|
||||||
|
query-set="querySet">
|
||||||
</smart-search>
|
</smart-search>
|
||||||
</div>
|
</div>
|
||||||
<at-list results='vm.instances'>
|
<at-list results='instances'>
|
||||||
<at-row ng-repeat="instance in vm.instances"
|
<at-row ng-repeat="instance in instances"
|
||||||
ng-class="{'at-Row--active': (instance.id === vm.activeId)}">
|
ng-class="{'at-Row--active': (instance.id === vm.activeId)}">
|
||||||
|
|
||||||
<input type="checkbox"
|
<input type="checkbox"
|
||||||
|
|||||||
@@ -35,15 +35,12 @@ function InstanceGroupsResolve ($q, $stateParams, InstanceGroup, Instance) {
|
|||||||
|
|
||||||
if (!instanceGroupId && !instanceId) {
|
if (!instanceGroupId && !instanceId) {
|
||||||
promises.instanceGroup = new InstanceGroup(['get', 'options']);
|
promises.instanceGroup = new InstanceGroup(['get', 'options']);
|
||||||
promises.instance = new Instance(['get', 'options']);
|
|
||||||
|
|
||||||
return $q.all(promises);
|
return $q.all(promises);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (instanceGroupId && instanceId) {
|
if (instanceGroupId && instanceId) {
|
||||||
promises.instance = new Instance(['get', 'options'], [instanceId, instanceId])
|
promises.instance = new Instance(['get', 'options'], [instanceId, instanceId])
|
||||||
.then((instance) => instance.extend('get', 'jobs', {params: {page_size: "10", order_by: "-finished"}}));
|
.then((instance) => instance.extend('get', 'jobs', {params: {page_size: "10", order_by: "-finished"}}));
|
||||||
|
|
||||||
return $q.all(promises);
|
return $q.all(promises);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,6 +108,14 @@ function InstanceGroupsRun ($stateExtender, strings, ComponentsStrings) {
|
|||||||
ncyBreadcrumb: {
|
ncyBreadcrumb: {
|
||||||
label: strings.get('state.ADD_BREADCRUMB_LABEL')
|
label: strings.get('state.ADD_BREADCRUMB_LABEL')
|
||||||
},
|
},
|
||||||
|
params: {
|
||||||
|
instance_search: {
|
||||||
|
value: {
|
||||||
|
order_by: 'hostname',
|
||||||
|
page_size: '10'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
views: {
|
views: {
|
||||||
'add@instanceGroups': {
|
'add@instanceGroups': {
|
||||||
templateUrl: AddEditTemplate,
|
templateUrl: AddEditTemplate,
|
||||||
@@ -119,7 +124,17 @@ function InstanceGroupsRun ($stateExtender, strings, ComponentsStrings) {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
resolve: {
|
resolve: {
|
||||||
resolvedModels: InstanceGroupsResolve
|
resolvedModels: InstanceGroupsResolve,
|
||||||
|
Dataset: [
|
||||||
|
'$stateParams',
|
||||||
|
'GetBasePath',
|
||||||
|
'QuerySet',
|
||||||
|
($stateParams, GetBasePath, qs) => {
|
||||||
|
const searchParams = $stateParams.instance_search;
|
||||||
|
const searchPath = GetBasePath('instances');
|
||||||
|
return qs.search(searchPath, searchParams);
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -146,8 +161,7 @@ function InstanceGroupsRun ($stateExtender, strings, ComponentsStrings) {
|
|||||||
"modal": {
|
"modal": {
|
||||||
template: '<instance-list-policy></instance-list-policy>',
|
template: '<instance-list-policy></instance-list-policy>',
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
resolvedModels: InstanceGroupsResolve
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$stateExtender.addState({
|
$stateExtender.addState({
|
||||||
@@ -156,6 +170,14 @@ function InstanceGroupsRun ($stateExtender, strings, ComponentsStrings) {
|
|||||||
ncyBreadcrumb: {
|
ncyBreadcrumb: {
|
||||||
label: strings.get('state.EDIT_BREADCRUMB_LABEL')
|
label: strings.get('state.EDIT_BREADCRUMB_LABEL')
|
||||||
},
|
},
|
||||||
|
params: {
|
||||||
|
instance_search: {
|
||||||
|
value: {
|
||||||
|
order_by: 'hostname',
|
||||||
|
page_size: '10'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
views: {
|
views: {
|
||||||
'edit@instanceGroups': {
|
'edit@instanceGroups': {
|
||||||
templateUrl: AddEditTemplate,
|
templateUrl: AddEditTemplate,
|
||||||
@@ -164,7 +186,17 @@ function InstanceGroupsRun ($stateExtender, strings, ComponentsStrings) {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
resolve: {
|
resolve: {
|
||||||
resolvedModels: InstanceGroupsResolve
|
resolvedModels: InstanceGroupsResolve,
|
||||||
|
Dataset: [
|
||||||
|
'$stateParams',
|
||||||
|
'GetBasePath',
|
||||||
|
'QuerySet',
|
||||||
|
($stateParams, GetBasePath, qs) => {
|
||||||
|
const searchParams = $stateParams.instance_search;
|
||||||
|
const searchPath = GetBasePath('instances');
|
||||||
|
return qs.search(searchPath, searchParams);
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -192,8 +224,7 @@ function InstanceGroupsRun ($stateExtender, strings, ComponentsStrings) {
|
|||||||
"modal": {
|
"modal": {
|
||||||
template: '<instance-list-policy></instance-list-policy>',
|
template: '<instance-list-policy></instance-list-policy>',
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
resolvedModels: InstanceGroupsResolve
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$stateExtender.addState({
|
$stateExtender.addState({
|
||||||
|
|||||||
Reference in New Issue
Block a user