Moved recursive label gathering out into a service. Added NextPage factory that can be leveraged when fetching a resource with multiple pages (like labels)

This commit is contained in:
Michael Abashian 2017-06-27 11:35:33 -04:00
parent 7fd2cbe500
commit 1be8f0e17a
5 changed files with 118 additions and 219 deletions

View File

@ -23,6 +23,7 @@ import apiLoader from './api-loader';
import variables from './variables/main';
import parse from './parse/main';
import loadconfig from './load-config/main';
import nextpage from './next-page/main';
import Modal from './Modal';
import moment from './moment/main';
import config from './config/main';
@ -50,6 +51,7 @@ angular.module('shared', [listGenerator.name,
variables.name,
parse.name,
loadconfig.name,
nextpage.name,
Modal.name,
moment.name,
config.name,

View File

@ -0,0 +1,5 @@
import NextPage from './next-page.factory';
export default
angular.module('nextpage', [])
.factory('NextPage', NextPage);

View File

@ -0,0 +1,28 @@
export default
function NextPage(Rest, $q) {
return function(params) {
let getNext = function(getNextParams){
Rest.setUrl(getNextParams.url);
return Rest.get()
.then(function (res) {
if (res.data.next) {
return getNext({
url: res.data.next,
arrayOfValues: getNextParams.arrayOfValues.concat(res.data.results)
});
} else {
return $q.resolve(getNextParams.arrayOfValues.concat(res.data.results));
}
})
.catch(function(response) {
return $q.reject( response );
});
};
return getNext(params);
};
}
NextPage.$inject = ['Rest', '$q'];

View File

@ -78,37 +78,11 @@ angular.module('templates', [surveyMaker.name, templatesList.name, jobTemplates.
});
}
}],
availableLabels: ['Rest', '$stateParams', 'GetBasePath', 'ProcessErrors', 'TemplatesService',
function(Rest, $stateParams, GetBasePath, ProcessErrors, TemplatesService) {
var getNext = function(data, arr) {
Rest.setUrl(data.next);
return Rest.get()
.then(function (res) {
if (res.data.next) {
return getNext(res.data, arr.concat(res.data.results));
} else {
return arr.concat(res.data.results);
}
});
};
return TemplatesService.getLabelOptions()
.then(function(res) {
if (res.next) {
return getNext(res, res.results)
.then(function(labels) {
return labels;
}).catch(function(response){
ProcessErrors(null, response.data, response.status, null, {
hdr: 'Error!',
msg: 'Failed to get labels. GET returned status: ' +
response.status
});
});
}
else {
return res.results;
}
availableLabels: ['ProcessErrors', 'TemplatesService',
function(ProcessErrors, TemplatesService) {
return TemplatesService.getAllLabelOptions()
.then(function(labels){
return labels;
}).catch(function(response){
ProcessErrors(null, response.data, response.status, null, {
hdr: 'Error!',
@ -175,35 +149,9 @@ angular.module('templates', [surveyMaker.name, templatesList.name, jobTemplates.
}],
availableLabels: ['Rest', '$stateParams', 'GetBasePath', 'ProcessErrors', 'TemplatesService',
function(Rest, $stateParams, GetBasePath, ProcessErrors, TemplatesService) {
var getNext = function(data, arr) {
Rest.setUrl(data.next);
return Rest.get()
.then(function (res) {
if (res.data.next) {
return getNext(res.data, arr.concat(res.data.results));
} else {
return arr.concat(res.data.results);
}
});
};
return TemplatesService.getLabelOptions()
.then(function(res) {
if (res.next) {
return getNext(res, res.results)
.then(function(labels) {
return labels;
}).catch(function(response){
ProcessErrors(null, response.data, response.status, null, {
hdr: 'Error!',
msg: 'Failed to get labels. GET returned status: ' +
response.status
});
});
}
else {
return res.results;
}
return TemplatesService.getAllLabelOptions()
.then(function(labels){
return labels;
}).catch(function(response){
ProcessErrors(null, response.data, response.status, null, {
hdr: 'Error!',
@ -214,38 +162,13 @@ angular.module('templates', [surveyMaker.name, templatesList.name, jobTemplates.
}],
selectedLabels: ['Rest', '$stateParams', 'GetBasePath', 'TemplatesService', 'ProcessErrors',
function(Rest, $stateParams, GetBasePath, TemplatesService, ProcessErrors) {
var getNext = function(data, arr) {
Rest.setUrl(data.next);
return Rest.get()
.then(function (res) {
if (res.data.next) {
return getNext(res.data, arr.concat(res.data.results));
} else {
return arr.concat(res.data.results);
}
});
};
return TemplatesService.getJobTemplateLabels($stateParams.job_template_id)
.then(function(res) {
if (res.next) {
return getNext(res, res.results)
.then(function(labels) {
return labels;
}).catch(function(response){
ProcessErrors(null, response.data, response.status, null, {
hdr: 'Error!',
msg: 'Failed to get labels. GET returned status: ' +
response.status
});
});
}
else {
return res.results;
}
return TemplatesService.getAllJobTemplateLabels($stateParams.job_template_id)
.then(function(labels){
return labels;
}).catch(function(response){
ProcessErrors(null, response.data, response.status, null, {
hdr: 'Error!',
msg: 'Failed to get labels. GET returned status: ' +
msg: 'Failed to get workflow job template labels. GET returned status: ' +
response.status
});
});
@ -266,35 +189,9 @@ angular.module('templates', [surveyMaker.name, templatesList.name, jobTemplates.
add: {
availableLabels: ['Rest', '$stateParams', 'GetBasePath', 'ProcessErrors', 'TemplatesService',
function(Rest, $stateParams, GetBasePath, ProcessErrors, TemplatesService) {
var getNext = function(data, arr) {
Rest.setUrl(data.next);
return Rest.get()
.then(function (res) {
if (res.data.next) {
return getNext(res.data, arr.concat(res.data.results));
} else {
return arr.concat(res.data.results);
}
});
};
return TemplatesService.getLabelOptions()
.then(function(res) {
if (res.next) {
return getNext(res, res.results)
.then(function(labels) {
return labels;
}).catch(function(response){
ProcessErrors(null, response.data, response.status, null, {
hdr: 'Error!',
msg: 'Failed to get labels. GET returned status: ' +
response.status
});
});
}
else {
return res.results;
}
return TemplatesService.getAllLabelOptions()
.then(function(labels){
return labels;
}).catch(function(response){
ProcessErrors(null, response.data, response.status, null, {
hdr: 'Error!',
@ -340,35 +237,9 @@ angular.module('templates', [surveyMaker.name, templatesList.name, jobTemplates.
edit: {
availableLabels: ['Rest', '$stateParams', 'GetBasePath', 'ProcessErrors', 'TemplatesService',
function(Rest, $stateParams, GetBasePath, ProcessErrors, TemplatesService) {
var getNext = function(data, arr) {
Rest.setUrl(data.next);
return Rest.get()
.then(function (res) {
if (res.data.next) {
return getNext(res.data, arr.concat(res.data.results));
} else {
return arr.concat(res.data.results);
}
});
};
return TemplatesService.getLabelOptions()
.then(function(res) {
if (res.next) {
return getNext(res, res.results)
.then(function(labels) {
return labels;
}).catch(function(response){
ProcessErrors(null, response.data, response.status, null, {
hdr: 'Error!',
msg: 'Failed to get labels. GET returned status: ' +
response.status
});
});
}
else {
return res.results;
}
return TemplatesService.getAllLabelOptions()
.then(function(labels){
return labels;
}).catch(function(response){
ProcessErrors(null, response.data, response.status, null, {
hdr: 'Error!',
@ -379,38 +250,13 @@ angular.module('templates', [surveyMaker.name, templatesList.name, jobTemplates.
}],
selectedLabels: ['Rest', '$stateParams', 'GetBasePath', 'TemplatesService', 'ProcessErrors',
function(Rest, $stateParams, GetBasePath, TemplatesService, ProcessErrors) {
var getNext = function(data, arr) {
Rest.setUrl(data.next);
return Rest.get()
.then(function (res) {
if (res.data.next) {
return getNext(res.data, arr.concat(res.data.results));
} else {
return arr.concat(res.data.results);
}
});
};
return TemplatesService.getWorkflowJobTemplateLabels($stateParams.workflow_job_template_id)
.then(function(res) {
if (res.next) {
return getNext(res, res.results)
.then(function(labels) {
return labels;
}).catch(function(response){
ProcessErrors(null, response.data, response.status, null, {
hdr: 'Error!',
msg: 'Failed to get labels. GET returned status: ' +
response.status
});
});
}
else {
return res.results;
}
return TemplatesService.getAllWorkflowJobTemplateLabels($stateParams.workflow_job_template_id)
.then(function(labels){
return labels;
}).catch(function(response){
ProcessErrors(null, response.data, response.status, null, {
hdr: 'Error!',
msg: 'Failed to get labels. GET returned status: ' +
msg: 'Failed to get workflow job template labels. GET returned status: ' +
response.status
});
});

View File

@ -4,7 +4,7 @@
* All Rights Reserved
*************************************************/
export default ['Rest', 'GetBasePath', '$q', function(Rest, GetBasePath, $q){
export default ['Rest', 'GetBasePath', '$q', 'NextPage', function(Rest, GetBasePath, $q, NextPage){
return {
deleteJobTemplate: function(id){
var url = GetBasePath('job_templates');
@ -34,51 +34,69 @@ export default ['Rest', 'GetBasePath', '$q', function(Rest, GetBasePath, $q){
Rest.setUrl(url);
return Rest.post(data);
},
getLabelOptions: function(){
var url = GetBasePath('labels') + '?page_size=200';
var deferred = $q.defer();
Rest.setUrl(url);
Rest.get()
.success(function(data) {
deferred.resolve(data);
}).error(function(msg, code) {
deferred.reject(msg, code);
});
return deferred.promise;
getAllLabelOptions: function() {
Rest.setUrl(GetBasePath('labels') + '?page_size=200');
return Rest.get()
.then(function(res) {
if (res.data.next) {
return NextPage({
url: res.data.next,
arrayOfValues: res.data.results
}).then(function(labels) {
return labels;
}).catch(function(response){
return $q.reject( response );
});
}
else {
return $q.resolve( res.data.results );
}
}).catch(function(response){
return $q.reject( response );
});
},
getJobTemplateLabels: function(id) {
var url = GetBasePath('job_templates') + id + "/labels?page_size=200";
var deferred = $q.defer();
Rest.setUrl(url);
Rest.get()
.success(function(data) {
deferred.resolve(data);
}).error(function(msg, code) {
deferred.reject(msg, code);
});
return deferred.promise;
getAllJobTemplateLabels: function(id) {
Rest.setUrl(GetBasePath('job_templates') + id + "/labels?page_size=20");
return Rest.get()
.then(function(res) {
if (res.data.next) {
return NextPage({
url: res.data.next,
arrayOfValues: res.data.results
}).then(function(labels) {
return labels;
}).catch(function(response){
return $q.reject( response );
});
}
else {
return $q.resolve( res.data.results );
}
}).catch(function(response){
return $q.reject( response );
});
},
getWorkflowJobTemplateLabels: function(id) {
var url = GetBasePath('workflow_job_templates') + id + "/labels?page_size=200";
var deferred = $q.defer();
Rest.setUrl(url);
Rest.get()
.success(function(data) {
deferred.resolve(data);
}).error(function(msg, code) {
deferred.reject(msg, code);
});
return deferred.promise;
getAllWorkflowJobTemplateLabels: function(id) {
Rest.setUrl(GetBasePath('workflow_job_templates') + id + "/labels?page_size=200");
return Rest.get()
.then(function(res) {
if (res.data.next) {
return NextPage({
url: res.data.next,
arrayOfValues: res.data.results
}).then(function(labels) {
return labels;
}).catch(function(response){
return $q.reject( response );
});
}
else {
return $q.resolve( res.data.results );
}
}).catch(function(response){
return $q.reject( response );
});
},
getJobTemplate: function(id) {
var url = GetBasePath('job_templates');