sogo/UI/WebServerResources/js/Scheduler/sgFreebusy.directive.js

63 lines
1.6 KiB
JavaScript

/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
(function() {
/**
* sgFreebusy - A directive that watches some attributes of a component. Any child component
* should depends on this directive and extend the 'onUpdate' method instead of creating new
* independent watchers.
* @memberof SOGo.SchedulerUI
*/
function sgFreebusy() {
return {
restrict: 'C',
scope: {},
bindToController: {
component: '=sgComponent'
},
controller: sgFreebusyController
};
}
/**
* @ngInject
*/
sgFreebusyController.$inject = ['$scope', '$element', '$q'];
function sgFreebusyController($scope, $element, $q) {
var $ctrl = this;
this.$onInit = function () {
var watchedAttrs = ['start', 'end', 'attendees'];
$scope.$watch(
function() {
return $ctrl.component? {
start: $ctrl.component.start,
end: $ctrl.component.end,
attendees: _.keys($ctrl.component.$attendees.$futureFreebusyData)
} : null;
},
function(newAttrs, oldAttrs) {
if (newAttrs && newAttrs.attendees && newAttrs.attendees.length) {
// Attendees have changed
$q.all(_.values($ctrl.component.$attendees.$futureFreebusyData)).then(function() {
$ctrl.onUpdate();
});
}
},
true // compare for object equality
);
};
this.onUpdate = function () {
// console.debug('dates or attendees changed -- refresh freebusy');
};
}
angular
.module('SOGo.SchedulerUI')
.directive('sgFreebusy', sgFreebusy);
})();