(function(){ "use strict"; angular.module('shared') .component('classroomList', { templateUrl: '/shared/js/angular/classroom-list/classroom-list.html', controller: 'ClassroomList' }) .controller('ClassroomList', ['studentList', 'memberInfo', 'ChunkStudents', '$scope', 'StudentsUtil', '$parse', 'classroomInfo', 'FeatureCheck', 'AuthGo', 'SiteHelper', 'SITE_ID', function (studentList, memberInfo, ChunkStudents, $scope, StudentsUtil, $parse, classroomInfo, FeatureCheck, AuthGo, SiteHelper, SITE_ID) { var ctrl = angular.extend(this, { students: studentList, memberInfo: memberInfo, hasSharedStudents: StudentsUtil.getShared(studentList.get()).length > 0, classrooms: classroomInfo.activeClassrooms, hasMultipleClassrooms: classroomInfo.activeClassrooms && Object.keys(classroomInfo.activeClassrooms).length > 1 && FeatureCheck.isFeatureEnabled('MULTIPLE_CLASSROOMS_MODEL'), isKaz: parseInt(SITE_ID) === SiteHelper.KAZ_SITE_ID, isVaz: parseInt(SITE_ID) === SiteHelper.VAZ_SITE_ID, isMainNavRedesignEnabled: isMainNavRedesignEnabled(), isManageStudentsRedesignEnabled: FeatureCheck.isFeatureEnabled('MANAGE_STUDENTS_REDESIGN'), $postLink: postLink, isHomeroom: isHomeroom, filterByClassroom: filterByClassroom, filterByShared: filterByShared, showAllStudents: showAllStudents, toggleShowShared: toggleShowShared, getKazUrl: getKazUrl }); var SHOW_SHARED_SESSION_KEY = 'ClassroomList::showShared'; var SELECTED_CLASSROOM_SESSION_KEY = 'ClassroomList::selectedClassroom'; var SELECTED_SHARED_SESSION_KEY = 'ClassroomList::selectedShared'; var getStudents = $parse('$ctrl.students.get() | sortByStudentName: $ctrl.memberInfo.sort_by_last_name'); return ctrl; function isMainNavRedesignEnabled() { return parseInt(SITE_ID) === SiteHelper.KAZ_SITE_ID ? FeatureCheck.isFeatureEnabled('ANGULARJS_KAZ_MAIN_NAV') : true; } function toggleShowShared() { updateChunkedStudents(getStudents($scope)); localStorage.setItem(SHOW_SHARED_SESSION_KEY, ctrl.showShared); } function filterByClassroom(classroom) { localStorage.setItem(SELECTED_CLASSROOM_SESSION_KEY, ctrl.selectedClassroomId = classroom.classroom_id); localStorage.setItem(SELECTED_SHARED_SESSION_KEY, ctrl.selectedShared = false); updateChunkedStudents(getStudents($scope)); } function filterByShared() { localStorage.setItem(SELECTED_CLASSROOM_SESSION_KEY, ctrl.selectedClassroomId = 0); localStorage.setItem(SELECTED_SHARED_SESSION_KEY, ctrl.selectedShared = true); updateChunkedStudents(getStudents($scope)); } function showAllStudents() { localStorage.setItem(SELECTED_CLASSROOM_SESSION_KEY, ctrl.selectedClassroomId = 0); localStorage.setItem(SELECTED_SHARED_SESSION_KEY, ctrl.selectedShared = false); updateChunkedStudents(getStudents($scope)); } function getKazUrl(url) { return ctrl.isKaz ? url : AuthGo.getUrl('kaz', url); } function isHomeroom(student) { return !student.is_shared; } function postLink() { $scope.$watchCollection( getStudents, updateChunkedStudents); ctrl.pending = true; ctrl.selectedShared = false; studentList.get().$promise.finally(function () { ctrl.showShared = getShowShared(); if (ctrl.hasMultipleClassrooms) { if (ctrl.isManageStudentsRedesignEnabled) { ctrl.selectedClassroomId = getSelectedClassroom(); ctrl.selectedShared = getSelectedShared(); } } updateChunkedStudents(getStudents($scope)); ctrl.pending = false; }) } function updateChunkedStudents (students) { ctrl.chunkedStudents = ChunkStudents.chunk(students.filter(function (student) { if (ctrl.hasMultipleClassrooms) { if (ctrl.selectedClassroomId > 0) { return student.classroom_id == ctrl.selectedClassroomId; } else if (ctrl.selectedShared) { return student.is_shared; } else if (ctrl.isManageStudentsRedesignEnabled && !ctrl.selectedShared) { return true; } } else { return ctrl.showShared ? true : !student.is_shared; } })); ctrl.numCols = ctrl.chunkedStudents.length; ctrl.hasSharedStudents = (StudentsUtil.getShared(studentList.get()).length > 0); } function getShowShared() { var result; if (localStorage.getItem(SHOW_SHARED_SESSION_KEY) === null) { result = StudentsUtil.getHomeroom(ctrl.students.get()).length === 0; } else { result = localStorage.getItem(SHOW_SHARED_SESSION_KEY) === "true"; } return result; } function getSelectedClassroom() { var result = localStorage.getItem(SELECTED_CLASSROOM_SESSION_KEY); var classroomId = result === null ? 0 : parseInt(result); return classroomInfo.activeClassrooms.hasOwnProperty(classroomId) ? classroomId : 0; } function getSelectedShared() { return localStorage.getItem(SELECTED_SHARED_SESSION_KEY) === 'true'; } }]); })();