2023-01-23 11:03:31 +01:00

116 lines
3.1 KiB
JavaScript

/**
* Model for Sites Manager. Fetches only sites one has at least Admin permission.
*/
(function () {
angular.module('piwikApp').factory('sitesManagerAdminSitesModel', sitesManagerAdminSitesModel);
sitesManagerAdminSitesModel.$inject = ['piwikApi'];
function sitesManagerAdminSitesModel(piwikApi)
{
var model = {
sites : [],
searchTerm : '',
isLoading : false,
pageSize : 10,
currentPage : 0,
offsetStart : 0,
offsetEnd : 10,
hasPrev : false,
hasNext : false,
previousPage: previousPage,
nextPage: nextPage,
searchSite: searchSite,
fetchLimitedSitesWithAdminAccess: fetchLimitedSitesWithAdminAccess
};
return model;
function onError ()
{
setSites([]);
}
function setSites(sites)
{
model.sites = sites;
var numSites = sites.length;
model.offsetStart = model.currentPage * model.pageSize + 1;
model.offsetEnd = model.offsetStart + numSites - 1;
model.hasPrev = model.currentPage >= 1;
model.hasNext = numSites === model.pageSize;
}
function setCurrentPage(page)
{
if (page < 0) {
page = 0;
}
model.currentPage = page;
}
function previousPage()
{
setCurrentPage(model.currentPage - 1);
fetchLimitedSitesWithAdminAccess();
}
function nextPage()
{
setCurrentPage(model.currentPage + 1);
fetchLimitedSitesWithAdminAccess();
}
function searchSite (term)
{
model.searchTerm = term;
setCurrentPage(0);
fetchLimitedSitesWithAdminAccess();
}
function fetchLimitedSitesWithAdminAccess(callback)
{
if (model.isLoading) {
piwikApi.abort();
}
model.isLoading = true;
var limit = model.pageSize;
var offset = model.currentPage * model.pageSize;
var params = {
method: 'SitesManager.getSitesWithAdminAccess',
fetchAliasUrls: true,
limit: limit + offset, // this is applied in SitesManager.getSitesWithAdminAccess API
filter_offset: offset, // filter_offset and filter_limit is applied in response builder
filter_limit: limit
};
if (model.searchTerm) {
params.pattern = model.searchTerm;
}
return piwikApi.fetch(params).then(function (sites) {
if (!sites) {
onError();
return;
}
setSites(sites);
}, onError).finally(function () {
if (callback) {
callback();
}
model.isLoading = false;
});
}
}
})();