Files
hudozka/src/client/controllers/ScheduleController.js
T
2016-02-23 01:46:57 +03:00

73 lines
2.6 KiB
JavaScript

import {populate} from '../../utils/populate';
import {getCourseNameByID} from '../../models/course';
import {indexEquals} from '../../utils/common';
import {select, choise} from '../../utils/common';
function isRequested(period, semester) {
return function (schedule) {
return schedule.period === period && schedule.semester === semester;
}
}
export default function (app) {
app.controller('ScheduleController', ($scope, $http, $location, $routeParams, scheduleData, team, menu) => {
menu.activate('/schedule');
let current_period = $routeParams.period;
let current_semester = $routeParams.semester;
let isScheduleRequested = current_period && current_semester;
let getScheduleByID = (id) => choise(
$scope.schedules,
select(i => i._id === id)
);
$http.get('/schedules', {cache: true})
.success(schedules => {
// By url params or last element
let selector = isScheduleRequested ? isRequested(current_period, current_semester) : indexEquals(schedules.length - 1);
schedules = schedules.map(schedule => {
let sem = [['spring', 'Весена'], ['autumn', 'Осень']]
.reduce(select(
i => i[0] === schedule.semester,
i => i[1]
));
schedule.text = `${sem} ${schedule.period} года`;
return schedule;
});
schedules.forEach((schedule, i) => {
if (selector(schedule, i)) {
$scope.currentSchedule = schedules[i];
}
});
$scope.schedules = schedules;
$scope.loadSchedule($scope.currentSchedule, isScheduleRequested);
});
$scope.loadSchedule = (s, doUpdateURL) => {
let id = s._id;
let schedule_item = getScheduleByID(id);
if (schedule_item) {
let sem = schedule_item.semester;
let period = schedule_item.period;
let url = `/schedule/${period}/${sem}`;
$http.get(url, {cache: true})
.success(scheduleRecord => {
$scope.schedule = scheduleData.populate(scheduleRecord.schedule, [
populate(team.short, 'teacher'),
populate(getCourseNameByID, 'lesson')
]);
if (doUpdateURL) $location.url(url);
});
}
};
});
};