"use strict"; angular.module("vocabulary") .component("leveledReaderFilter", { templateUrl: "/js/redesign-angular/premadeLessons/premadeFilters/leveled-reader-filter.html", controller: "LeveledReaderFilterController", bindings: { levels : "<", resources: "<", initialLevel: "<", onFilterChanged: "&" } }) .controller("LeveledReaderFilterController", ["accessRestriction", function(accessRestriction){ var ctrl = this; ctrl.filteredResources = []; ctrl.selectedLevels = []; ctrl.showMultiLevelSet = false; ctrl.filterType = { 'fiction' : false, 'nonfiction' : false }; ctrl.filterBooks = { 'levelup' : false, 'notLevelUp' : false, 'multiset' : false }; this.$onInit = function(){ setShowMultiLevelSet(); if(ctrl.initialLevel === null || ctrl.initialLevel === undefined){ ctrl.levels.forEach(function (level) { ctrl.changeLevels(level); }); } else { ctrl.changeLevels(ctrl.initialLevel); } }; function setShowMultiLevelSet() { return accessRestriction.getTeacherAuthData() .then(function (teacherAuthorization) { ctrl.showMultiLevelSet = !accessRestriction.userIsLoggedIn() || teacherAuthorization['has_raz_license']; }); } function filtersAreAllFalse(){ return ctrl.filterType['fiction'] === false && ctrl.filterType['nonfiction'] === false && ctrl.filterBooks['levelup'] === false && ctrl.filterBooks['notLevelUp'] === false && ctrl.filterBooks['multiset'] === false; } function meetsMultiSetFilterBooksFlags(resource) { var isinset = false; if (ctrl.filterBooks['multiset'] === false) { isinset = true; } else{ isinset = ctrl.filterBooks['multiset'] === resource.multiset; } return isinset; } function meetsFilterTypeFlags(resource){ var isinset = false; if(ctrl.filterType['fiction'] === ctrl.filterType['nonfiction'] ){ isinset = true; } else{ if(ctrl.filterType['fiction'] === resource.fiction && ctrl.filterType['nonfiction'] === resource.nonfiction){ isinset = true; } } return isinset; } function meetsLevelUpFilterFlags(resource){ var isinset = false; if(ctrl.filterBooks['levelup'] === false && ctrl.filterBooks['notLevelUp'] === false){ isinset = true; //we don't care if its level up or not } else { //determine if our resource matches our checkboxes if (ctrl.filterBooks['levelup'] === true && ctrl.filterBooks['notLevelUp'] === false && resource.levelUp === true) { isinset = true; //we only want level up books } else if (ctrl.filterBooks['levelup'] === false && ctrl.filterBooks['notLevelUp'] === true && resource.levelUp === false) { isinset = true; // we only want Not level up books } } return isinset; } function testFilter(resource){ var noFilterSet = filtersAreAllFalse(); if(noFilterSet ){ return true; }else { return (meetsFilterTypeFlags(resource) && (meetsLevelUpFilterFlags(resource) && meetsMultiSetFilterBooksFlags(resource))); } } function filterResources(){ var filteredResources = []; ctrl.selectedLevels.forEach(function(levelId){ var resourcesForLevel = ctrl.resources[levelId]; var filteredResourcesForLevel = resourcesForLevel.filter(function(resource){ return testFilter(resource); }); filteredResources.push.apply(filteredResources, filteredResourcesForLevel); }); ctrl.onFilterChanged({ $event: { filteredResources: filteredResources } }); } ctrl.changeLevels = function(selectedLevel){ if(ctrl.selectedLevels.length === ctrl.levels.length){ ctrl.selectedLevels = []; ctrl.selectedLevels.push(selectedLevel.levelId); } else { var index = ctrl.selectedLevels.indexOf(selectedLevel.levelId); if (index !== -1) { ctrl.selectedLevels.splice(index, 1); } else { ctrl.selectedLevels.push(selectedLevel.levelId); } } ctrl.selectedLevels.sort(function (a, b) { return a - b; }); filterResources(); }; ctrl.isInSelectedLevels = function(levelId){ return ctrl.selectedLevels.indexOf(levelId) !== -1 ; }; ctrl.updateFilterType = function(type){ ctrl.filterType[type] = !ctrl.filterType[type]; filterResources(); }; ctrl.updateFilterBook = function(bookProp){ ctrl.filterBooks[bookProp] = !ctrl.filterBooks[bookProp]; filterResources(); }; }]);