dikplhd/public/assets/js/pages/apps-calendar.js

139 lines
4.5 KiB
JavaScript

/*
Template Name: Attex - Responsive 5 Admin Dashboard
Author: CoderThemes
Website: https://coderthemes.com/
Contact: support@coderthemes.com
File: Calendar js
*/
class Calendar {
constructor() {
this.body = document.body;
this.calendar = document.getElementById('calendar');
this.formEvent = document.getElementById('forms-event');
this.btnNewEvent = document.getElementById('btn-new-event');
this.btnDeleteEvent = document.getElementById('btn-delete-event');
this.btnSaveEvent = document.getElementById('btn-save-event');
this.calendarObj = null;
this.selectedEvent = null;
this.newEventData = null;
}
onEventClick(info) {
this.formEvent?.reset();
this.formEvent.classList.remove('was-validated');
this.newEventData = null;
this.btnDeleteEvent.style.display = "block";
this.selectedEvent = info.event;
document.getElementById('event-title').value = this.selectedEvent.title;
document.getElementById('event-category').value = (this.selectedEvent.classNames[0]);
}
init() {
/* Initialize the calendar */
const today = new Date();
const self = this;
const externalEventContainerEl = document.getElementById('external-events');
new FullCalendar.Draggable(externalEventContainerEl, {
itemSelector: '.external-event',
eventData: function (eventEl) {
return {
title: eventEl.innerText,
classNames: eventEl.getAttribute('data-class')
};
}
});
const defaultEvents = [{
title: 'Interview - Backend Engineer',
start: today,
end: today,
className: 'bg-primary'
},
{
title: 'Meeting with CT Team',
start: new Date(Date.now() + 13000000),
end: today,
className: 'bg-warning'
},
{
title: 'Meeting with Mr. Shield',
start: new Date(Date.now() + 308000000),
end: new Date(Date.now() + 338000000),
className: 'bg-info'
},
{
title: 'Interview - Frontend Engineer',
start: new Date(Date.now() + 60570000),
end: new Date(Date.now() + 153000000),
className: 'bg-secondary'
},
{
title: 'Phone Screen - Frontend Engineer',
start: new Date(Date.now() + 168000000),
className: 'bg-success'
},
{
title: 'Buy Design Assets',
start: new Date(Date.now() + 330000000),
end: new Date(Date.now() + 330800000),
className: 'bg-primary',
},
{
title: 'Setup Github Repository',
start: new Date(Date.now() + 1008000000),
end: new Date(Date.now() + 1108000000),
className: 'bg-danger'
},
{
title: 'Meeting with Mr. Shreyu',
start: new Date(Date.now() + 2508000000),
end: new Date(Date.now() + 2508000000),
className: 'bg-dark'
}];
// cal - init
self.calendarObj = new FullCalendar.Calendar(self.calendar, {
plugins: [],
slotDuration: '00:30:00', /* If we want to split day time each 15minutes */
slotMinTime: '07:00:00',
slotMaxTime: '19:00:00',
themeSystem: 'default',
buttonText: {
today: 'Today',
month: 'Month',
week: 'Week',
day: 'Day',
list: 'List',
prev: 'Prev',
next: 'Next'
},
initialView: 'dayGridMonth',
handleWindowResize: true,
height: window.innerHeight - 285,
headerToolbar: {
left: 'prev,next today',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay,listMonth'
},
initialEvents: defaultEvents,
editable: true,
droppable: true, // this allows things to be dropped onto the calendar !!!
// dayMaxEventRows: false, // allow "more" link when too many events
selectable: true,
eventClick: function (info) {
self.onEventClick(info);
}
});
self.calendarObj.render();
}
}
document.addEventListener('DOMContentLoaded', function (e) {
new Calendar().init();
});