zettapi_client
Version:
Admin panel and client-side CRUD operations in angular to use with zettapi_server rest api to get started quickly in any CMS project.
82 lines (70 loc) • 2.26 kB
JavaScript
app.service('$calendar', function (moment) {
var svc = this;
var eventTypes = {};
this.addEventType = function (key, label, promise) {
if (typeof promise !== 'object') return console.log('promise of unexpected type for eventType ' + key);
if (typeof promise.then !== 'function') return console.log('promise of unexpected type for eventType ' + key);
if (!eventTypes[key]) eventTypes[key] = {};
eventTypes[key] = {
label: label,
promise: promise,
visible: true,
data: []
};
promise.then(function (items) {
items.forEach(function (item) {
item.type = key;
});
eventTypes[key].data = items;
}).catch(function (response) {
console.log('addEventType catch', response);
});
};
this.getEventTypes = function () {
var items = [];
for (var key in eventTypes) {
items.push({
type: key,
label: eventTypes[key].label,
visible: eventTypes[key].visible,
count: eventTypes[key].data.length
});
}
return items;
};
this.getEvents = function () {
var items = [];
for (var key in eventTypes) {
if (!eventTypes[key].visible) continue;
items = items.concat(eventTypes[key].data);
}
return items;
};
this.toggleEventType = function (toggleKey) {
if (!eventTypes[toggleKey]) return console.log('no toggleKey found', toggleKey, eventTypes);
for (var key in eventTypes) {
eventTypes[key].visible = key === toggleKey;
}
return svc.getEventTypes();
};
this.newEvent = function (title, start, end) {
if (typeof title === 'undefined') console.log('invalid title for event', title);
if (typeof start === 'undefined') console.log('invalid start for event', title, start);
_start = moment(start);
if (!_start.isValid()) console.log('invalid date start for event', start);
if (end) {
_end = moment(end);
if (!_end.isValid()) console.log('invalid date end for event', end);
}
var event = {
title: title,
startsAt: new Date(start),
draggable: false,
resizable: false,
incrementsBadgeTotal: true,
allDay: true
};
if (end) event.endsAt = new Date(end);
return event;
};
});