(function(){ "use strict"; angular.module("raz") .service("lcmGradeService", ['lcmApiService', 'messageHandler', '$q', '$window', 'TEACHER_GRADE_ID', 'IS_FOUNDATIONAL_SKILLS', function(lcmApiService, messageHandler, $q, $window, TEACHER_GRADE_ID, IS_FOUNDATIONAL_SKILLS){ var service = this; var lcmCache = {}; var currentGradeId = null; var storageKey = 'grade-id'; var genericErrorText = 'Could not read Literacy Curriculum info.'; initFromSession(); return { getLCMFolderTreeById: getLCMFolderTreeById, getLCMGroupFoldersForWeek: getLCMGroupFoldersForWeek, getLCMSSUnitsTreeById: getLCMSSUnitsTreeById, getLCMSSUnitTree: getLCMSSUnitTree, getFSSSWeeksTreeById: getFSSSWeeksTreeById, getCurrentGradeId: getCurrentGradeId, setCurrentGradeId: setCurrentGradeId }; function fromStorage() { var sessionGrade = $window.sessionStorage.getItem(storageKey); if (sessionGrade) { return sessionGrade; } else if (hasValidTeacherGrade()) { return TEACHER_GRADE_ID; } else { return null; } } function hasValidTeacherGrade() { switch(TEACHER_GRADE_ID) { case 'K': case '1': case '2': return true; case '3': case '4': case '5': return !IS_FOUNDATIONAL_SKILLS; default: return false; } } function toStorage() { $window.sessionStorage.setItem(storageKey, currentGradeId); } function initFromSession() { var storageValue = fromStorage(); var grade = (storageValue !== null) ? storageValue : 'K'; setCurrentGradeId(grade); } function getCurrentGradeId() { return currentGradeId; } function setCurrentGradeId(gradeId) { currentGradeId = gradeId; toStorage(); } function getFromCache(folderId) { var deferred = $q.defer(); deferred.resolve(lcmCache[folderId]); return deferred.promise; } function setInCache(folderId, data) { lcmCache[folderId] = data; } function checkCache(folderId) { if (lcmCache[folderId]) { return getFromCache(folderId); } return null; } function getLCMSSUnitsTreeById(folderId) { var cachedData = checkCache('ss_' + folderId); if (cachedData) { return cachedData; } var defer = $q.defer(); lcmApiService.getLCMSSUnitsTreeById(folderId) .then(function (data) { if (data) { setInCache('ss_' + folderId, data); defer.resolve(data); } else { handleDataError('getLCMSSUnitsTreeById'); } }) .catch(function (e) { handleExceptionError(e); }); return defer.promise; } function getFSSSWeeksTreeById(folderId) { var cachedData = checkCache('fsss_' + folderId); if (cachedData) { return cachedData; } var defer = $q.defer(); lcmApiService.getFSSSWeeksTreeById(folderId) .then(function (data) { if (data) { setInCache('fsss_' + folderId, data); defer.resolve(data); } else { handleDataError('getFSSSWeeksTreeById'); } }) .catch(function (e) { handleExceptionError(e); }); return defer.promise; } function getLCMSSUnitTree(folder) { var cachedData = checkCache('ss_' + folder.id); if (cachedData) { return cachedData; } var defer = $q.defer(); lcmApiService.getLCMSSUnitTree(folder) .then(function (data) { if (data) { setInCache(folder.id, data); defer.resolve(data); } else { handleDataError('getLCMSSUnitTree'); } }) .catch(function (e) { handleExceptionError(e); }); return defer.promise; } function getLCMFolderTreeById(folderId) { var cachedData = checkCache(folderId); if (cachedData) { return cachedData; } var defer = $q.defer(); lcmApiService.getLCMFolderTreeById(folderId) .then(function (data) { if (data) { setInCache(folderId, data); defer.resolve(data); } else { handleDataError('getLCMFolderTreeById'); } }) .catch(function (e) { handleExceptionError(e); }) return defer.promise; } function getLCMGroupFoldersForWeek(folder) { var cachedData = checkCache(folder.id); if (cachedData) { return cachedData; } var defer = $q.defer(); lcmApiService.getLCMGroupFoldersForWeek(folder) .then(function (data) { if (data) { setInCache(folder.id, data); defer.resolve(data); } else { handleDataError('getLCMGroupFoldersForWeek'); } }) .catch(function (e) { handleExceptionError(e); }) return defer.promise; } function handleDataError(functionName) { //console.log('No results returned from ' + functionName); messageHandler.publishError(genericErrorText); } function handleExceptionError(error) { //console.log('LCM Error: ', error); messageHandler.publishError(genericErrorText); } }]); })();