(function() { "use strict"; angular.module("shared") .service("resourceSorting", ["ResourceList","constantValues", function (ResourceList,constantValues) { var sortKey = 'resource-card-sort'; getSavedSort(); function saveSort(sort) { sessionStorage.removeItem(sortKey); if (sort) { sessionStorage.setItem(sortKey,sort); } } function getSavedSort() { var savedSort = sessionStorage.getItem(sortKey); if (savedSort == null) { return; } setSelectedSort(savedSort); } function setSelectedSort(newSort) { var foundSort = _.find(constantValues.SORT_OPTIONS,function(oneOption) { return oneOption.key === newSort; }); if (!foundSort) { return; } saveSort(newSort); var fieldToSortBy = foundSort.field; var reverse = foundSort.reverse; ResourceList.setAllResources(sortList(ResourceList.getAllResources(),fieldToSortBy,reverse)); ResourceList.setFilteredResources(sortList(ResourceList.getFilteredResources(),fieldToSortBy,reverse)); ResourceList.setSelectedSort(newSort); } function sortList(list,fieldToSortBy,reverse) { var leveledList = ResourceList.buildCategorizedList(list,0,list.length); var newList = []; _.each(Object.keys(leveledList), function (key) { var listForThisLevel = _.sortBy(leveledList[key],fieldToSortBy); if (reverse) { listForThisLevel.reverse(); } newList = newList.concat(listForThisLevel); }); return newList; } function getSelectedSort() { return ResourceList.getSelectedSort(); } return { setSelectedSort: setSelectedSort, getSelectedSort: getSelectedSort }; }]); }());