mirror of
https://git.imnavajas.es/jjimenez/safekat.git
synced 2025-07-25 22:52:08 +00:00
120 lines
3.4 KiB
JavaScript
120 lines
3.4 KiB
JavaScript
|
|
import Ajax from '../components/ajax.js'
|
|
import { alertSuccess, alertError } from '../components/alerts/sweetAlert.js'
|
|
// Render calendar
|
|
class SafekatCalendar {
|
|
constructor(idElement) {
|
|
this.locale = $('meta[name=locale]').attr('content') ?? 'es';
|
|
this.calendarEl = document.getElementById(idElement);
|
|
this.calendar = null;
|
|
}
|
|
actionLoader(status = true) {
|
|
if (status) {
|
|
Notiflix.Block.circle('.section-block');
|
|
} else {
|
|
Notiflix.Block.remove('.section-block');
|
|
}
|
|
}
|
|
init() {
|
|
if (this.calendarEl) {
|
|
|
|
this.calendar = new FullCalendar.Calendar(this.calendarEl, {
|
|
locale: this.locale,
|
|
initialView: 'multiMonthYear',
|
|
multiMonthMaxColumns: 4,
|
|
contentHeight: '100vh',
|
|
editable: true,
|
|
dragScroll: true,
|
|
dayMaxEvents: 2,
|
|
dateClick: this.clickEvent.bind(this),
|
|
eventResizableFromStart: true,
|
|
customButtons: {
|
|
sidebarToggle: {
|
|
text: 'Sidebar'
|
|
}
|
|
},
|
|
|
|
});
|
|
this.calendar.render();
|
|
this.calendar.setOption('aspectRatio', 1.8);
|
|
|
|
}
|
|
}
|
|
renderFestivos() {
|
|
this.setEventFestivos()
|
|
}
|
|
async setEventFestivos() {
|
|
try {
|
|
|
|
|
|
let response = await this.getFestivos();
|
|
this.actionLoader(false)
|
|
if (response.data) {
|
|
let festivosEvent = response.data.map(this.parseToFullCalendarEvent)
|
|
this.addEvents(festivosEvent)
|
|
}
|
|
} catch (error) {
|
|
console.error(error)
|
|
} finally {
|
|
this.actionLoader(false)
|
|
|
|
}
|
|
}
|
|
removeEvents() {
|
|
this.calendar.getEvents().forEach(event => event.remove());
|
|
}
|
|
async clickEvent(info) {
|
|
try {
|
|
let response = await this.storeFestivo({ date: info.dateStr })
|
|
alertSuccess(response.message).fire()
|
|
this.renderFestivos()
|
|
} catch (error) {
|
|
console.error(error)
|
|
|
|
} finally {
|
|
this.actionLoader(false)
|
|
|
|
}
|
|
}
|
|
addEvents(events) {
|
|
events.forEach(event => {
|
|
this.calendar.addEvent(event)
|
|
});
|
|
}
|
|
parseToFullCalendarEvent(festivoEntity) {
|
|
let date = festivoEntity.date.split('-').reverse().join('/')
|
|
return {
|
|
id: festivoEntity.id,
|
|
title: '',
|
|
start: festivoEntity.date,
|
|
display: 'background',
|
|
color: 'red',
|
|
textColor: 'white'
|
|
}
|
|
}
|
|
|
|
getFestivos() {
|
|
this.actionLoader(true)
|
|
this.removeEvents()
|
|
return new Promise((resolve, reject) => {
|
|
let ajax = new Ajax('/configuracion/festivos/all', null, null, resolve, reject)
|
|
ajax.get()
|
|
})
|
|
}
|
|
storeFestivo(event) {
|
|
this.actionLoader(true)
|
|
return new Promise((resolve, reject) => {
|
|
let ajax = new Ajax('/configuracion/festivos', event, null, resolve, reject)
|
|
ajax.post()
|
|
})
|
|
}
|
|
deleteFestivo(id) {
|
|
return new Promise((resolve, reject) => {
|
|
let ajax = new Ajax('/configuracion/festivos/' + id, null, null, resolve, reject)
|
|
ajax.delete()
|
|
})
|
|
}
|
|
|
|
}
|
|
|
|
export default SafekatCalendar |