salix/modules/agency/front/calendar/index.js

109 lines
2.6 KiB
JavaScript
Raw Normal View History

2018-12-04 12:18:27 +00:00
import ngModule from '../module';
import './style.scss';
2018-09-24 12:51:27 +00:00
class Controller {
2019-09-25 18:06:42 +00:00
constructor($, $stateParams) {
Object.assign(this, {
$,
$stateParams
});
this.excls = {};
this.resetEvents();
2019-01-21 10:45:53 +00:00
this.ndMonthDate = new Date();
this.ndMonthDate.setMonth(this.ndMonthDate.getMonth() + 1);
2018-11-12 10:31:58 +00:00
}
2019-09-25 18:06:42 +00:00
resetEvents() {
this.wdays = [];
this.days = {};
this.ranges = [];
2019-01-21 10:45:53 +00:00
}
2019-09-25 18:06:42 +00:00
get events() {
return this._events;
2019-01-21 10:45:53 +00:00
}
2019-09-25 18:06:42 +00:00
set events(value) {
this._events = value;
this.resetEvents();
2019-01-21 10:45:53 +00:00
if (!value) return;
2019-09-25 18:06:42 +00:00
function setWdays(wdays, weekDays) {
let codes = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];
if (!weekDays) return [];
weekDays = weekDays.split(',');
for (let wday of weekDays)
wdays[codes.indexOf(wday)] = true;
return wdays;
}
2019-01-21 10:45:53 +00:00
2019-09-25 18:06:42 +00:00
for (let event of value) {
if (event.from && event.to) {
this.ranges.push({
from: new Date(event.from).setHours(0, 0, 0, 0),
to: new Date(event.to).setHours(0, 0, 0, 0),
wdays: setWdays([], event.weekDays)
});
} else if (event.from) {
let day = new Date(event.from).setHours(0, 0, 0, 0);
this.days[day] = true;
} else
setWdays(this.wdays, event.weekDays);
}
2019-01-21 10:45:53 +00:00
2019-09-25 18:06:42 +00:00
this.repaint();
}
2019-01-21 10:45:53 +00:00
2019-09-25 18:06:42 +00:00
get exclusions() {
return this._exclusions;
}
2019-09-25 18:06:42 +00:00
set exclusions(value) {
this._exclusions = value;
this.excls = {};
if (!value) return;
2019-01-21 10:45:53 +00:00
2019-09-25 18:06:42 +00:00
value.forEach(exclusion => {
let day = new Date(exclusion.day).setHours(0, 0, 0, 0);
this.excls[day] = true;
2019-01-21 10:45:53 +00:00
});
2019-09-25 18:06:42 +00:00
this.repaint();
}
2019-01-21 10:45:53 +00:00
2019-09-25 18:06:42 +00:00
hasRange(time, wday) {
let range = this.ranges.find(e => e.from <= time && e.to >= time);
return range && range.wdays[wday];
}
2019-01-21 10:45:53 +00:00
2019-09-25 18:06:42 +00:00
hasEvents(day) {
let time = day.getTime();
let wday = day.getDay();
return this.wdays[wday]
|| this.days[time]
|| this.hasRange(time, wday);
2019-01-21 10:45:53 +00:00
}
2019-09-25 18:06:42 +00:00
getClass(day) {
if (this.excls[day.getTime()])
return 'excluded';
2019-01-21 10:45:53 +00:00
}
2019-09-25 18:06:42 +00:00
repaint() {
this.$.stMonth.repaint();
this.$.ndMonth.repaint();
2018-09-24 12:51:27 +00:00
}
}
2019-09-25 18:06:42 +00:00
Controller.$inject = ['$scope', '$stateParams'];
2018-09-24 12:51:27 +00:00
ngModule.component('vnZoneCalendar', {
template: require('./index.html'),
controller: Controller,
bindings: {
2019-09-25 18:06:42 +00:00
events: '<?',
exclusions: '<?'
2018-09-24 12:51:27 +00:00
}
});