07. Eliminar eventos del calendario - Piptonita/crear-calendario-FullCalendar GitHub Wiki
Vamos a crear un botón en el modal para eliminar eventos en el calendario.
- Para empezar nos vamos a index.html y añadimos el botón con el resto:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Calendario a Full</title>
<link rel="stylesheet" href="vendor/fullcalendar/main.css">
<link rel="stylesheet" href="src/css/calendar.css">
</head>
<body>
<div id="calendar"></div>
<div id="modal">
<div class="containerModal column">
<h2 id="tituloEntrada">Añadir evento</h2>
<hr>
<input type="text" id="titulo" placeholder="Título del evento">
<div class="row">
<input type="text" id="fechaInicio">
<input type="text" id="horaInicio" placeholder="Hora de inicio (opcional)">
</div>
<div class="row">
<input type="text" id="fechaFin" placeholder="Fecha de finalización (opcional)">
<input type="text" id="horaFin" placeholder="Hora de finalización (opcional)">
</div>
<textarea id="descripcion" placeholder="Descripción del evento"></textarea>
<div class="row">
<label for="color">Color de la tarjeta:</label>
<input type="color" id="color" name="color" value="#00C217">
<label for="textColor">Color del texto:</label>
<input type="color" id="textColor" name="textColor" value="#0018CC">
</div>
<div class="row">
<button id="editar">Editar</button>
<button id="crear">Guardar</button>
<!-- añadimos el botón borrar aquí: -->
<button id="borrar">Eliminar</button>
<button id="cancelar">Cancelar</button>
</div>
</div>
</div>
<script src="vendor/fullcalendar/main.js"></script>
<script src="vendor/fullcalendar/locales/es.js"></script>
<script src="src/js/calendar.js"></script>
</body>
</html>
- Ahora pasamos al código de calendar.js para activarlo:
var calendarDiv = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarDiv, {
locales: 'es',
initialView: 'dayGridMonth',
headerToolbar: {
left: 'prev',
center: 'title',
right: 'next',
},
footerToolbar: {
left: 'prevYear',
center: 'dayGridMonth,timeGridWeek,timeGridDay,listMonth,today',
right: 'nextYear'
},
buttonText: {
today: 'Hoy',
month: 'Mes',
week: 'Semana',
day: 'Día',
list: 'Listado'
},
events: [
{
title: 'Evento de prueba 1',
description: 'Esta es una descripción de prueba',
start: '2020-09-20 12:00:00',
end: '2020-09-25 12:00:00',
color: 'yellow',
textColor: 'red',
},
{
title: 'Evento de prueba 2',
descripcion: 'Este es otro evento de un solo día',
start: '2020-09-26',
color: 'red',
textColor: 'yellow'
},
{
title: 'Evento de prueba 3',
description: 'Este evento dura un tiempo determinado',
start: '2020-09-27 08:00:00',
end: '2020-09-27 10:00:00',
color: 'blue',
textColor: 'green'
}
],
dateClick: (info) => {
abrirModal('crear');
var fecha = document.getElementById('fechaInicio');
fecha.value = info.dateStr;
},
eventClick: (info) => {
document.getElementById('tituloEntrada').innerHTML = info.event.title;
document.getElementById('titulo').value = info.event.title;
fechaInicio = cortarFecha(info.event.startStr);
document.getElementById('fechaInicio').value = fechaInicio[0];
if(fechaInicio.length > 1){
document.getElementById('horaInicio').value = fechaInicio[1];
}
fechaFin = cortarFecha(info.event.endStr);
document.getElementById('fechaFin').value = fechaFin[0];
if(fechaFin.length > 1){
document.getElementById('horaFin').value = fechaFin[1];
}
if(info.event.extendedProps.description){
document.getElementById('descripcion').value = info.event.extendedProps.description;
}
document.getElementById('color').value = info.event.backgroundColor;
document.getElementById('textColor').value = info.event.textColor;
abrirModal('editar');
},
editable: true,
});
botonCrear = document.getElementById('crear');
botonCrear.addEventListener('click', ()=> {
recuperarCampos();
calendar.addEvent(recuperarCampos());
cerrarModal();
vaciarCampos();
});
botonEditar = document.getElementById('editar');
botonEditar.addEventListener('click', ()=>{
cerrarModal();
calendar.refetchEvents();
vaciarCampos();
});
// y creamos el botón borrar en javascript:
botonBorrar = document.getElementById('borrar');
botonBorrar.addEventListener('click', ()=>{
// el contenido de este botón será el mismo que editar:
cerrarModal();
calendar.refetchEvents();
vaciarCampos();
})
var modal = document.getElementById('modal');
function abrirModal(permisos){
// ocultamos el boton al crear y lo mostramos al modificar:
if(permisos == 'crear'){
document.getElementById('editar').style.cssText = "display: none";
document.getElementById('crear').style.cssText = "display: block";
document.getElementById('borrar').style.cssText = "display: none";
}else{
document.getElementById('editar').style.cssText = "display: block";
document.getElementById('crear').style.cssText = "display: none";
document.getElementById('borrar').style.cssText = "display: block";
}
modal.style.cssText = "display: flex;";
window.setTimeout(()=>{
modal.style.cssText += "opacity: 1; transition: 0.5s";
}, 10);
}
function recuperarCampos(){
var nuevoEvento = [];
nuevoEvento.title = document.getElementById('titulo').value;
if(document.getElementById('horaInicio').value != ''){
nuevoEvento.start = document.getElementById('fechaInicio').value + " " + document.getElementById('horaInicio').value;
}else{
nuevoEvento.start = document.getElementById('fechaInicio').value;
}
nuevoEvento.end = document.getElementById('fechaFin').value + " " + document.getElementById('horaFin').value;
nuevoEvento.description = document.getElementById('descripcion').value;
nuevoEvento.color = document.getElementById('color').value;
nuevoEvento.textColor = document.getElementById('textColor').value;
return nuevoEvento;
}
var botonCerrar = document.getElementById('cancelar');
botonCerrar.addEventListener('click', ()=>{
cerrarModal();
vaciarCampos();
});
function cerrarModal(){
modal.style.cssText += 'opacity: 0; transition: 0.5s';
window.setTimeout(()=>{
modal.style.cssText = 'display: none';
}, 500);
}
function vaciarCampos(){
document.getElementById('titulo').value = '';
document.getElementById('horaInicio').value = '';
document.getElementById('fechaFin').value = '';
document.getElementById('horaFin').value = '';
document.getElementById('descripcion').value = '';
document.getElementById('color').value = '#00C217';
document.getElementById('textColor').value = '#0018CC';
}
function cortarFecha(fecha){
fecha = fecha.split("T");
if(fecha[1]){
fecha[1] = fecha[1].substr(0,8);
}
return fecha;
}
calendar.render();
Ya esta terminado, pero al igual que pasó con la edición, refetchEvents() aparentemente no hará nada nuevo ya que events no ha cambiado de estado.
Cuando generemos la capa de persistencia con el backend ya podremos ver los cambios.