JavaScript Schedule

4.2KB gzipped

The Schedule component is an event scheduling interface for web applications. It supports day, week, and weekdays views with drag-and-drop event management. Built for appointment systems, team calendars, and resource scheduling.

  • Day, week, and weekdays views
  • Drag and drop events
  • Create, edit, delete events
  • Resource/calendar scheduling
  • Keyboard navigation

Documentation

Installation

npm install @calendarjs/ce

Settings

Property Description
type?: 'week' | 'day' | 'weekdays' Schedule view type. Default: 'week'.
weekly?: boolean Weekly schedule mode. No date associated to columns, just day of week. Default: false.
value?: string Initial date in ISO format (YYYY-MM-DD).
data?: Event[] Array of event objects to display.
grid?: number Grid time interval in minutes. Default: 15.
overlap?: boolean Accept time overlap between events. Default: false.
validRange?: string[] Valid time range [startTime, endTime] in HH:MM format.
readOnlyRange?: string[] | string[][] Read-only time range. Single: ['08:00', '18:00'] or multiple: [['00:00', '08:00'], ['18:00', '23:59']].

Event Object

Property Description
guid: string Unique identifier for the event.
title: string Event title displayed on the schedule.
start: string Start time in HH:MM format.
end?: string End time in HH:MM format.
color: string Event background color (hex).
type?: string | null Event type/category.
date?: string Event date in YYYY-MM-DD format. Used when weekly is false.
weekday?: number Day of the week (0-6, Sunday is 0). Used when weekly is true.
guests?: string Guests list.
location?: string Event location.
description?: string Event description.
readonly?: boolean Event is read-only (cannot be edited).
visible?: boolean Event visibility.
warning?: boolean Show warning border on event.

Events

Event Description
onbeforecreate Before events are created. Return false to cancel.
(self: Schedule, events: Event | Event[], e?: MouseEvent) => boolean | void
oncreate Called when events are created.
(self: Schedule, events: Event | Event[], e?: MouseEvent) => void
onbeforeinsert Before inserting a new event on the board. Return false to cancel.
(self: Schedule, event: Event) => boolean | void
ondblclick Called on double-click of an event.
(self: Schedule, event: Event) => void
onedition Triggered when an event is being edited (double click or after creation).
(self: Schedule, event: Event) => void
onbeforechangeevent Before an event is modified. Return false to cancel.
(self: Schedule, state: object) => boolean | void
onchangeevent Called when an event is modified.
(self: Schedule, newValue: Partial<Event>, oldValue: Partial<Event>) => void
ondelete Called when an event is deleted.
(self: Schedule, event: Event) => void
onchange Called when any change occurs.
(self: Schedule) => void
onerror Called on error.
(self: Schedule, message: string) => void

Methods

Method Description
addEvents(events: Event | Event[], e?: MouseEvent): Event[] | false Add one or more events to the schedule.
updateEvent(guidOrEvent: string | Event, newValue: Partial<Event>): void | false Update an event by guid or reference.
deleteEvents(events: Event | Event[] | string | string[]): void Delete one or more events.
getData(): Event[] Get all events data.
setData(data: Event[]): void Set events data.
getEvent(guid: string): HTMLElement Get event DOM element by guid.
setRange(range: string[]): void Set valid time range.
setReadOnly(range: string[] | string[][]): void Set read-only time range.
resetSelection(e?: MouseEvent): void Reset current selection.
render(): void Render the schedule.
undo(): void Undo last change.
redo(): void Redo last undone change.

Properties

Property Description
type: 'week' | 'day' | 'weekdays' Current schedule view type.
weekly: boolean Weekly schedule mode.
value: string Current date value in ISO format.
data: Event[] Array of events.
grid: number Grid time interval in minutes.
overlap: boolean Accept time overlap between events.
validRange?: string[] Valid time range.
readOnlyRange?: string[] | string[][] Read-only time range.
el: HTMLElement The root element.

Examples

Basic Schedule

<html>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Material+Icons" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@calendarjs/ce/dist/style.min.css" />
<script src="https://cdn.jsdelivr.net/npm/lemonadejs/dist/lemonade.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@calendarjs/ce/dist/index.min.js"></script>

<div id="root" style="height: 500px;"></div>

<script>
const { Schedule } = calendarjs;

Schedule(document.getElementById('root'), {
    type: 'week',
    value: '2025-12-01',
    data: [
        { guid: 'evt-1', title: 'Team Meeting', date: '2025-12-03', start: '10:00', end: '11:00', color: '#3498db' },
        { guid: 'evt-2', title: 'Project Review', date: '2025-12-04', start: '14:00', end: '15:30', color: '#e74c3c' }
    ]
});
</script>
</html>
import { Schedule } from '@calendarjs/ce';
import '@calendarjs/ce/dist/style.css';

export default function App() {
    const self = this;
    self.events = [
        { guid: 'evt-1', title: 'Team Meeting', date: '2025-12-03', start: '10:00', end: '11:00', color: '#3498db' },
        { guid: 'evt-2', title: 'Project Review', date: '2025-12-04', start: '14:00', end: '15:30', color: '#e74c3c' }
    ];

    return render => render`<div style="height: 500px;">
        <Schedule type="week" value="2025-12-01" data="${self.events}" />
    </div>`;
}
import { useState } from 'react';
import { Schedule } from '@calendarjs/ce/dist/react';
import '@calendarjs/ce/dist/style.css';

export default function App() {
    const [events] = useState([
        { guid: 'evt-1', title: 'Team Meeting', date: '2025-12-03', start: '10:00', end: '11:00', color: '#3498db' },
        { guid: 'evt-2', title: 'Project Review', date: '2025-12-04', start: '14:00', end: '15:30', color: '#e74c3c' }
    ]);

    return <Schedule type="week" value="2025-12-01" data={events} style={{ height: '500px' }} />;
}
<template>
    <Schedule type="week" value="2025-12-01" :data="events" style="height: 500px" />
</template>

<script>
import { Schedule } from '@calendarjs/ce/dist/vue';
import '@calendarjs/ce/dist/style.css';

export default {
    components: { Schedule },
    data() {
        return {
            events: [
                { guid: 'evt-1', title: 'Team Meeting', date: '2025-12-03', start: '10:00', end: '11:00', color: '#3498db' },
                { guid: 'evt-2', title: 'Project Review', date: '2025-12-04', start: '14:00', end: '15:30', color: '#e74c3c' }
            ]
        };
    }
}
</script>

With Event Handlers

<html>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Material+Icons" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@calendarjs/ce/dist/style.min.css" />
<script src="https://cdn.jsdelivr.net/npm/lemonadejs/dist/lemonade.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@calendarjs/ce/dist/index.min.js"></script>

<div id="root" style="height: 500px;"></div>

<script>
const { Schedule } = calendarjs;

Schedule(document.getElementById('root'), {
    type: 'week',
    value: '2025-12-01',
    data: [],
    oncreate: function(self, events) {
        const event = Array.isArray(events) ? events[0] : events;
        console.log('Created:', event.title);
    },
    onchangeevent: function(self, newValue, oldValue) {
        console.log('Updated:', newValue.title);
    },
    ondelete: function(self, event) {
        console.log('Deleted:', event.title);
    }
});
</script>
</html>
import { Schedule } from '@calendarjs/ce';
import '@calendarjs/ce/dist/style.css';

export default function App() {
    const self = this;
    self.events = [];

    const onCreate = (el, events) => {
        const event = Array.isArray(events) ? events[0] : events;
        console.log('Created:', event.title);
    };

    const onUpdate = (el, newValue, oldValue) => {
        console.log('Updated:', newValue.title);
    };

    const onDelete = (el, event) => {
        console.log('Deleted:', event.title);
    };

    return render => render`<div style="height: 500px;">
        <Schedule type="week" value="2025-12-01" data="${self.events}" :oncreate="${onCreate}" :onchangeevent="${onUpdate}" :ondelete="${onDelete}" />
    </div>`;
}
import { useState } from 'react';
import { Schedule } from '@calendarjs/ce/dist/react';
import '@calendarjs/ce/dist/style.css';

export default function App() {
    const [events, setEvents] = useState([]);

    return (
        <Schedule
            type="week"
            value="2025-12-01"
            data={events}
            style={{ height: '500px' }}
            oncreate={(self, events) => {
                const event = Array.isArray(events) ? events[0] : events;
                console.log('Created:', event.title);
            }}
            onchangeevent={(self, newValue) => console.log('Updated:', newValue.title)}
            ondelete={(self, event) => console.log('Deleted:', event.title)}
        />
    );
}
<template>
    <Schedule
        type="week"
        value="2025-12-01"
        :data="events"
        style="height: 500px"
        @oncreate="onCreate"
        @onchangeevent="onUpdate"
        @ondelete="onDelete"
    />
</template>

<script>
import { Schedule } from '@calendarjs/ce/dist/vue';
import '@calendarjs/ce/dist/style.css';

export default {
    components: { Schedule },
    data() {
        return { events: [] };
    },
    methods: {
        onCreate(self, events) {
            const event = Array.isArray(events) ? events[0] : events;
            console.log('Created:', event.title);
        },
        onUpdate(self, newValue) {
            console.log('Updated:', newValue.title);
        },
        onDelete(self, event) {
            console.log('Deleted:', event.title);
        }
    }
}
</script>

Related