+ PageSchedule component
This commit is contained in:
1 parent
c91e46266f
commit
cef4bc6bd5
5 files changed
+83
-69
No files matched your search
+2
-6
@@ -17,9 +17,9 @@ import ScheduleRecord from './components/ScheduleRecord';
|
||||
import FooterLinks from './components/FooterLinks';
|
||||
|
||||
import PageSchool from './components/PageSchool';
|
||||
import PageSchedule from './components/PageSchedule';
|
||||
|
||||
import AppController from './controllers/AppController';
|
||||
import ScheduleController from './controllers/ScheduleController';
|
||||
import CollectiveController from './controllers/CollectiveController';
|
||||
import GalleryController from './controllers/GalleryController';
|
||||
import AlbumController from './controllers/AlbumController';
|
||||
@@ -91,8 +91,8 @@ app.run(($location, $rootScope, $http) => {
|
||||
AlbumCollection,
|
||||
TeacherProfile,
|
||||
PageSchool,
|
||||
PageSchedule,
|
||||
AppController,
|
||||
ScheduleController,
|
||||
CollectiveController,
|
||||
GalleryController,
|
||||
AlbumController,
|
||||
@@ -106,10 +106,6 @@ app.run(($location, $rootScope, $http) => {
|
||||
ScheduleRecord,
|
||||
FooterLinks,
|
||||
function (app) {
|
||||
app.controller('SchedulePageController', ($scope) => {
|
||||
$scope.pageClass = 'page-schedule';
|
||||
});
|
||||
|
||||
app.controller('GalleryPageController', ($scope) => {
|
||||
$scope.pageClass = 'page-gallery';
|
||||
});
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
import template from '../../templates/components/page-schedule.html';
|
||||
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.component('pageSchedule', {
|
||||
template: template,
|
||||
controller: function($http, $location, $routeParams, api, menu) {
|
||||
this.pageClass = 'page-schedule';
|
||||
menu.activate('/schedule');
|
||||
|
||||
let current_period = $routeParams.period;
|
||||
let current_semester = $routeParams.semester;
|
||||
let isScheduleRequested = current_period && current_semester;
|
||||
|
||||
this.schedules = [];
|
||||
let getScheduleByID = (id) => choise(
|
||||
this.schedules,
|
||||
select(i => i._id === id)
|
||||
);
|
||||
|
||||
api.schedule.list()
|
||||
.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)) {
|
||||
this.currentSchedule = schedules[i];
|
||||
}
|
||||
});
|
||||
|
||||
this.schedules = schedules;
|
||||
this.loadSchedule(this.currentSchedule, isScheduleRequested);
|
||||
});
|
||||
|
||||
this.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;
|
||||
|
||||
api.schedule.get(period, sem, true)
|
||||
.success(scheduleRecord => {
|
||||
this.schedule = scheduleRecord.schedule;
|
||||
|
||||
if (doUpdateURL) $location.url(api.schedule.buildScheduleUrl(period, sem));
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
});
|
||||
};
|
||||
@@ -27,8 +27,7 @@ export let routes = [
|
||||
},
|
||||
{
|
||||
name: '/schedule/:period?/:semester?',
|
||||
templateUrl: '/views/schedule.html',
|
||||
controller: 'SchedulePageController',
|
||||
template: '<page-schedule></page-schedule>',
|
||||
title: 'Расписание'
|
||||
},
|
||||
{
|
||||
|
||||
@@ -10,60 +10,5 @@ function isRequested(period, semester) {
|
||||
}
|
||||
|
||||
export default function (app) {
|
||||
app.controller('ScheduleController', ($scope, $http, $location, $routeParams, api, menu) => {
|
||||
menu.activate('/schedule');
|
||||
|
||||
let current_period = $routeParams.period;
|
||||
let current_semester = $routeParams.semester;
|
||||
let isScheduleRequested = current_period && current_semester;
|
||||
|
||||
$scope.schedules = [];
|
||||
let getScheduleByID = (id) => choise(
|
||||
$scope.schedules,
|
||||
select(i => i._id === id)
|
||||
);
|
||||
|
||||
api.schedule.list()
|
||||
.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;
|
||||
|
||||
api.schedule.get(period, sem, true)
|
||||
.success(scheduleRecord => {
|
||||
$scope.schedule = scheduleRecord.schedule;
|
||||
|
||||
if (doUpdateURL) $location.url(api.schedule.buildScheduleUrl(period, sem));
|
||||
});
|
||||
}
|
||||
};
|
||||
});
|
||||
//app.controller('ScheduleController', );
|
||||
};
|
||||
@@ -1,13 +1,13 @@
|
||||
<div class="content content_wide" ng-controller="ScheduleController">
|
||||
<div class="content content_wide">
|
||||
<div class="schedule-selector">
|
||||
<label> Семестр
|
||||
<select
|
||||
ng-model="currentSchedule"
|
||||
ng-change="loadSchedule(currentSchedule, true)"
|
||||
ng-options="s.text for s in schedules">
|
||||
ng-model="$ctrl.currentSchedule"
|
||||
ng-change="$ctrl.loadSchedule($ctrl.currentSchedule, true)"
|
||||
ng-options="s.text for s in $ctrl.schedules">
|
||||
</select>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<schedule schedule="schedule"></schedule>
|
||||
<schedule schedule="$ctrl.schedule"></schedule>
|
||||
</div>
|
||||
Reference in new issue
Block a user