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 variables from './variables/main';
import parse from './parse/main'; import parse from './parse/main';
import loadconfig from './load-config/main'; import loadconfig from './load-config/main';
import nextpage from './next-page/main';
import Modal from './Modal'; import Modal from './Modal';
import moment from './moment/main'; import moment from './moment/main';
import config from './config/main'; import config from './config/main';
@@ -50,6 +51,7 @@ angular.module('shared', [listGenerator.name,
variables.name, variables.name,
parse.name, parse.name,
loadconfig.name, loadconfig.name,
nextpage.name,
Modal.name, Modal.name,
moment.name, moment.name,
config.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', availableLabels: ['ProcessErrors', 'TemplatesService',
function(Rest, $stateParams, GetBasePath, ProcessErrors, TemplatesService) { function(ProcessErrors, TemplatesService) {
var getNext = function(data, arr) { return TemplatesService.getAllLabelOptions()
Rest.setUrl(data.next); .then(function(labels){
return Rest.get() return labels;
.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;
}
}).catch(function(response){ }).catch(function(response){
ProcessErrors(null, response.data, response.status, null, { ProcessErrors(null, response.data, response.status, null, {
hdr: 'Error!', hdr: 'Error!',
@@ -175,35 +149,9 @@ angular.module('templates', [surveyMaker.name, templatesList.name, jobTemplates.
}], }],
availableLabels: ['Rest', '$stateParams', 'GetBasePath', 'ProcessErrors', 'TemplatesService', availableLabels: ['Rest', '$stateParams', 'GetBasePath', 'ProcessErrors', 'TemplatesService',
function(Rest, $stateParams, GetBasePath, ProcessErrors, TemplatesService) { function(Rest, $stateParams, GetBasePath, ProcessErrors, TemplatesService) {
var getNext = function(data, arr) { return TemplatesService.getAllLabelOptions()
Rest.setUrl(data.next); .then(function(labels){
return Rest.get() return labels;
.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;
}
}).catch(function(response){ }).catch(function(response){
ProcessErrors(null, response.data, response.status, null, { ProcessErrors(null, response.data, response.status, null, {
hdr: 'Error!', hdr: 'Error!',
@@ -214,38 +162,13 @@ angular.module('templates', [surveyMaker.name, templatesList.name, jobTemplates.
}], }],
selectedLabels: ['Rest', '$stateParams', 'GetBasePath', 'TemplatesService', 'ProcessErrors', selectedLabels: ['Rest', '$stateParams', 'GetBasePath', 'TemplatesService', 'ProcessErrors',
function(Rest, $stateParams, GetBasePath, TemplatesService, ProcessErrors) { function(Rest, $stateParams, GetBasePath, TemplatesService, ProcessErrors) {
var getNext = function(data, arr) { return TemplatesService.getAllJobTemplateLabels($stateParams.job_template_id)
Rest.setUrl(data.next); .then(function(labels){
return Rest.get() return labels;
.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;
}
}).catch(function(response){ }).catch(function(response){
ProcessErrors(null, response.data, response.status, null, { ProcessErrors(null, response.data, response.status, null, {
hdr: 'Error!', hdr: 'Error!',
msg: 'Failed to get labels. GET returned status: ' + msg: 'Failed to get workflow job template labels. GET returned status: ' +
response.status response.status
}); });
}); });
@@ -266,35 +189,9 @@ angular.module('templates', [surveyMaker.name, templatesList.name, jobTemplates.
add: { add: {
availableLabels: ['Rest', '$stateParams', 'GetBasePath', 'ProcessErrors', 'TemplatesService', availableLabels: ['Rest', '$stateParams', 'GetBasePath', 'ProcessErrors', 'TemplatesService',
function(Rest, $stateParams, GetBasePath, ProcessErrors, TemplatesService) { function(Rest, $stateParams, GetBasePath, ProcessErrors, TemplatesService) {
var getNext = function(data, arr) { return TemplatesService.getAllLabelOptions()
Rest.setUrl(data.next); .then(function(labels){
return Rest.get() return labels;
.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;
}
}).catch(function(response){ }).catch(function(response){
ProcessErrors(null, response.data, response.status, null, { ProcessErrors(null, response.data, response.status, null, {
hdr: 'Error!', hdr: 'Error!',
@@ -340,35 +237,9 @@ angular.module('templates', [surveyMaker.name, templatesList.name, jobTemplates.
edit: { edit: {
availableLabels: ['Rest', '$stateParams', 'GetBasePath', 'ProcessErrors', 'TemplatesService', availableLabels: ['Rest', '$stateParams', 'GetBasePath', 'ProcessErrors', 'TemplatesService',
function(Rest, $stateParams, GetBasePath, ProcessErrors, TemplatesService) { function(Rest, $stateParams, GetBasePath, ProcessErrors, TemplatesService) {
var getNext = function(data, arr) { return TemplatesService.getAllLabelOptions()
Rest.setUrl(data.next); .then(function(labels){
return Rest.get() return labels;
.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;
}
}).catch(function(response){ }).catch(function(response){
ProcessErrors(null, response.data, response.status, null, { ProcessErrors(null, response.data, response.status, null, {
hdr: 'Error!', hdr: 'Error!',
@@ -379,38 +250,13 @@ angular.module('templates', [surveyMaker.name, templatesList.name, jobTemplates.
}], }],
selectedLabels: ['Rest', '$stateParams', 'GetBasePath', 'TemplatesService', 'ProcessErrors', selectedLabels: ['Rest', '$stateParams', 'GetBasePath', 'TemplatesService', 'ProcessErrors',
function(Rest, $stateParams, GetBasePath, TemplatesService, ProcessErrors) { function(Rest, $stateParams, GetBasePath, TemplatesService, ProcessErrors) {
var getNext = function(data, arr) { return TemplatesService.getAllWorkflowJobTemplateLabels($stateParams.workflow_job_template_id)
Rest.setUrl(data.next); .then(function(labels){
return Rest.get() return labels;
.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;
}
}).catch(function(response){ }).catch(function(response){
ProcessErrors(null, response.data, response.status, null, { ProcessErrors(null, response.data, response.status, null, {
hdr: 'Error!', hdr: 'Error!',
msg: 'Failed to get labels. GET returned status: ' + msg: 'Failed to get workflow job template labels. GET returned status: ' +
response.status response.status
}); });
}); });

View File

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