import React, { Component } from 'react'; import ContentWrapper from '@/components/Layout/ContentWrapper'; import { Card, CardBody, CardHeader, CardTitle } from 'reactstrap'; import FullCalendar from '@fullcalendar/react'; import dayGridPlugin from '@fullcalendar/daygrid'; import timeGridPlugin from '@fullcalendar/timegrid'; import interactionPlugin, { Draggable } from '@fullcalendar/interaction'; import listPlugin from '@fullcalendar/list'; import bootstrapPlugin from '@fullcalendar/bootstrap'; import '@fullcalendar/core/main.css'; import '@fullcalendar/daygrid/main.css'; import '@fullcalendar/timegrid/main.css'; import '@fullcalendar/list/main.css'; import '@fullcalendar/bootstrap/main.css'; import events from './calendar.events'; class Calendar extends Component { calendarEvents = events; calendarPlugins = [ interactionPlugin, dayGridPlugin, timeGridPlugin, listPlugin, bootstrapPlugin ]; calendarHeader = { left: 'prev,next today', center: 'title', right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek' }; // External events properties evColors = [ 'danger', 'primary', 'info', 'success', 'warning', 'green', 'pink', 'inverse', 'purple' ]; state = { selectedEvent: null, evRemoveOnDrop: true, evSelectedColor: this.evColors[0], evNewName: '', _externalEvents: [ { color: 'green', name: 'Lunch' }, { color: 'danger', name: 'Go home' }, { color: 'info', name: 'Do homework' }, { color: 'warning', name: 'Work on UI design' }, { color: 'inverse', name: 'Sleep tight' } ], externalEvents:[ { color: 'info', name: 'Jadwal Pemeriksaan - BI:54678' } ] }; componentDidMount() { /* initialize the external events */ new Draggable(this.refs.externalEventsList, { itemSelector: '.fce-event', eventData: function(eventEl) { return { title: eventEl.innerText.trim() }; } }); } addRandomEvent() { // add dynamically an event this.addEvent({ title: 'Random Event', start: new Date( new Date().getFullYear(), new Date().getMonth(), Math.random() * (30 - 1) + 1 ), backgroundColor: '#c594c5', //purple borderColor: '#c594c5' //purple }); } dayClick = date => { this.setState({ selectedEvent: { date: date.dateStr } }); }; // add event directly into calendar addEvent(event) { this.calendarEvents.push(event); } handleEventReceive = info => { var styles = getComputedStyle(info.draggedEl); info.event.setProp('backgroundColor', styles.backgroundColor); info.event.setProp('borderColor', styles.borderColor); // is the "remove after drop" checkbox checked? if (this.state.evRemoveOnDrop) { this.removeExternalEvent(info.draggedEl.textContent); } }; getEvColorClasses(evcolor) { return 'bg-' + evcolor + (this.state.evSelectedColor === evcolor ? ' selected' : ''); } addNewExternalEvent = () => { const externalEvents = this.state.externalEvents.concat({ color: this.state.evSelectedColor, name: this.state.evNewName }); this.setState({ externalEvents }); }; removeExternalEvent = name => { let externalEvents = [...this.state.externalEvents]; const index = externalEvents.findIndex(e => e.name === name); if (index > -1) { externalEvents.splice(index, 1); this.setState({ externalEvents }); } }; selectColor = color => () => { this.setState({ evSelectedColor: color }); }; handleCheck = event => { this.setState({ //evRemoveOnDrop: event.target.checked evRemoveOnDrop: true }); }; handleInputName = event => { this.setState({ evNewName: event.target.value }); }; render() { const { externalEvents, selectedEvent } = this.state; return (
Jadwal Pemeriksaan Format pembuatan jadwal pemeriksaan v.0.1
{/* START card */} Draggable Events {/* Default external events list */}
{ externalEvents.map(ev =>
{ev.name}
) }
{/*
*/}
{/* END card */}
{/* START card */} Create Event

Choose a Color

    { this.evColors.map(evc =>
  • ) }
{/* END card */}
{selectedEvent &&

Selected:

{JSON.stringify(selectedEvent)}
} {!selectedEvent &&

Click calendar to show information

}
{/* START calendar */}
); } } export default Calendar;