syncfusion-javascript-scheduler
Implementing Syncfusion TypeScript Scheduler
A comprehensive skill for implementing the Syncfusion EJ2 TypeScript Schedule (Scheduler) component — a full-featured calendar and appointment management UI supporting multiple views, recurring events, resource grouping, drag-and-drop, inline editing, and data export.
When to Use This Skill
- Setting up and initializing the Scheduler in a TypeScript project
- Configuring calendar views (Day, Week, WorkWeek, Month, Year, Agenda, Timeline variants)
- Binding local or remote appointment data to the Scheduler
- Implementing CRUD (create, read, update, delete) for events
- Working with recurring events and the RecurrenceEditor
- Configuring multiple resources and grouped views
- Customizing the event editor popup or quick info templates
- Exporting Scheduler data to Excel, CSV, or iCalendar (.ics)
- Handling timezones for global user bases
- Styling, theming, and accessibility compliance
Documentation and Navigation Guide
Getting Started & Module Injection
📄 Read: references/getting-started.md
- Package dependencies and npm installation
- CSS imports and theme configuration
- Module injection with
Schedule.Inject() - Initializing the Scheduler and appending to DOM
- Populating appointments with
eventSettings.dataSource - Setting
selectedDateandcurrentView - Individual per-view configuration with
viewsarray
Views Configuration
📄 Read: references/views.md
- All 12 view types and their module requirements
- Per-view options (startHour, endHour, timeScale, showWeekend, etc.)
- Extended views using
intervalanddisplayName - Timeline view orientations and Agenda view options
Appointments & Recurring Events
📄 Read: references/appointments.md
- Normal, spanned, all-day, and recurring event types
- iCal
RecurrenceRulestring syntax (FREQ, BYDAY, COUNT, UNTIL, etc.) - Recurrence exceptions and editing individual/following occurrences
- Built-in event fields reference table
- Custom field mapping via
eventSettings.fields - Preventing overlaps with
allowOverlap, custom ordering withsortComparer
Data Binding
📄 Read: references/data-binding.md
- Local JSON array binding via
eventSettings.dataSource - Remote binding with
DataManagerandODataV4Adaptor - AJAX loading pattern using
ej2-base Ajax - Server-side date range filtering with
includeFiltersInQuery - Passing query parameters with
eventSettings.query - Google Calendar API integration via
dataBindingevent
CRUD Actions
📄 Read: references/crud-actions.md
- Creating events via editor, quick popup, or
addEvent()method - Updating and deleting with
saveEvent()anddeleteEvent() - Server-side CRUD using
UrlAdaptor+crudUrl - Field validation with
validationproperty (required, regex) actionBegin/actionCompletelifecycle events- Enabling read-only mode
Editor Template & Quick Info
📄 Read: references/editor-template.md
- Customizing default editor fields via
popupOpen - Full editor replacement with
editorTemplate editorHeaderTemplateandeditorFooterTemplate- Custom quick info popups with
quickInfoTemplates showQuickInfotoggle andcloseEditor()method- Custom timezone dropdown via
timezoneDataSource
Resources & Grouping
📄 Read: references/resources.md
- Defining resources with
resourcesproperty and field mappings - Single and multi-level grouping via
group.resources - Date-based grouping with
group.byDate allowMultiplefor multi-resource event assignment- Resource-specific working hours, colors, and CSS classes
- Expandable resource rows in Timeline views
Working Days, Hours & Timescale
📄 Read: references/working-days-timescale.md
workDays,showWeekend,showWeekNumber,firstDayOfWeekworkHourshighlight, start, and end configurationstartHour/endHourfor visible time rangetimeScalewithintervalandslotCount- Major/minor slot templates
scrollTo()for programmatic time scroll
Cell, Header & View Customization
📄 Read: references/cell-header-customization.md
cellTemplatewithelementTypeconditionsrenderCellevent for targeted cell modificationscellHeaderTemplatefor Month view date headers- Header bar:
showHeaderBar,toolbarItems,dateHeaderTemplate - Timeline
headerRowsproperty for Year/Month/Week/Date/Hour rows minDate/maxDatefor date range restrictions
Exporting & Printing
📄 Read: references/exporting.md
exportToExcel()withExportOptions(fileName, fields, customData, etc.)- CSV export via
exportType: 'csv' excelExportevent for pre-export customizationexportToICalendar()to.icsformatimportICalendar()from a file Blobprint()method withbeforePrintevent
Timezone Handling
📄 Read: references/timezone.md
timezoneproperty (IANA timezone string)- Per-event
StartTimezone/EndTimezonefields Timezoneutility class:offset(),convert(),add(),remove()- Customizing the timezone dropdown with
timezoneData - UTC mode for global/multi-region teams
Recurrence Editor
📄 Read: references/recurrence-editor.md
- Standalone
RecurrenceEditorcomponent setup frequenciesandendTypesproperty configurationchangeevent for getting generated rule stringsetRecurrenceRule()andgetRecurrenceDates()methods
Styling & Theming
📄 Read: references/scheduler-styling.md
- CSS class selector reference for all Scheduler elements
- View-scoped selectors (
.e-vertical-view,.e-month-view, etc.) - State classes: selected cells, selected appointments
- Resource row selectors for Timeline views
- Block and read-only appointment styles
Advanced Features
📄 Read: references/advanced-features.md
- Context menu integration with
ContextMenu - Clipboard:
allowClipboard,cut(),copy(),paste(),beforePasteevent - Virtual scrolling with
allowVirtualScrollingandenableLazyLoading rowAutoHeightfor Timeline and Month views- State persistence with
enablePersistence - Islamic/Hijri calendar via
calendarMode: 'Islamic' - Scheduler dimensions:
heightandwidth - Accessibility, WCAG 2.2, keyboard shortcuts
Quick Start
import { Schedule, Day, Week, WorkWeek, Month, Agenda } from '@syncfusion/ej2-schedule';
// Inject required view modules
Schedule.Inject(Day, Week, WorkWeek, Month, Agenda);
let scheduleObj: Schedule = new Schedule({
height: '550px',
selectedDate: new Date(2018, 1, 15),
currentView: 'Week',
eventSettings: {
dataSource: [
{
Id: 1,
Subject: 'Team Meeting',
StartTime: new Date(2018, 1, 15, 10, 0),
EndTime: new Date(2018, 1, 15, 12, 0)
}
]
}
});
scheduleObj.appendTo('#Schedule');
/* In styles.css */
@import '../../node_modules/@syncfusion/ej2-base/styles/fluent2.css';
@import '../../node_modules/@syncfusion/ej2-buttons/styles/fluent2.css';
@import '../../node_modules/@syncfusion/ej2-calendars/styles/fluent2.css';
@import '../../node_modules/@syncfusion/ej2-dropdowns/styles/fluent2.css';
@import '../../node_modules/@syncfusion/ej2-inputs/styles/fluent2.css';
@import '../../node_modules/@syncfusion/ej2-navigations/styles/fluent2.css';
@import '../../node_modules/@syncfusion/ej2-popups/styles/fluent2.css';
@import '../../node_modules/@syncfusion/ej2-schedule/styles/fluent2.css';
Common Patterns
Pattern 1: Switch to Month View with Weekend Hidden
import { Schedule, Month } from '@syncfusion/ej2-schedule';
Schedule.Inject(Month);
let scheduleObj: Schedule = new Schedule({
height: '550px',
currentView: 'Month',
showWeekend: false,
eventSettings: { dataSource: [...] }
});
scheduleObj.appendTo('#Schedule');
Pattern 2: Custom Field Names
let scheduleObj: Schedule = new Schedule({
height: '550px',
eventSettings: {
dataSource: myData,
fields: {
id: 'EventId',
subject: { name: 'Title' },
startTime: { name: 'From' },
endTime: { name: 'To' },
isAllDay: { name: 'AllDay' }
}
}
});
scheduleObj.appendTo('#Schedule');
Pattern 3: Programmatic Event Creation
let eventData: Object = {
Id: 10,
Subject: 'New Event',
StartTime: new Date(2018, 1, 15, 14, 0),
EndTime: new Date(2018, 1, 15, 16, 0)
};
scheduleObj.addEvent(eventData);
Pattern 4: Resource-Grouped Timeline
import { Schedule, TimelineViews } from '@syncfusion/ej2-schedule';
Schedule.Inject(TimelineViews);
let scheduleObj: Schedule = new Schedule({
height: '550px',
currentView: 'TimelineWeek',
group: { resources: ['Rooms'] },
resources: [{
field: 'RoomId',
title: 'Room',
name: 'Rooms',
dataSource: [
{ RoomText: 'Room 1', Id: 1, RoomColor: '#cb6bb2' },
{ RoomText: 'Room 2', Id: 2, RoomColor: '#56ca85' }
],
textField: 'RoomText',
idField: 'Id',
colorField: 'RoomColor'
}],
eventSettings: { dataSource: [...] }
});
scheduleObj.appendTo('#Schedule');
Key Properties Reference
| Property | Type | Description |
|---|---|---|
height |
string | Scheduler height ('550px', '100%', 'auto') |
width |
string | Scheduler width |
selectedDate |
Date | Currently displayed date |
currentView |
string | Active view name |
views |
ViewsModel[] | Per-view configuration array |
eventSettings |
EventSettingsModel | Data source and field mappings |
group |
GroupModel | Resource grouping configuration |
resources |
ResourcesModel[] | Resource definitions |
workDays |
number[] | Days of week to show (0=Sun–6=Sat) |
workHours |
WorkHoursModel | Work hour highlight and range |
showWeekend |
boolean | Show/hide Saturday and Sunday |
timezone |
string | IANA timezone string for display |
enablePersistence |
boolean | Persist state in localStorage |
readonly |
boolean | Disable all CRUD interactions |
allowClipboard |
boolean | Enable cut/copy/paste for events |
More from syncfusion/javascript-ui-controls-skills
syncfusion-javascript-gantt-chart
Implement Syncfusion Gantt Chart using JavaScript/TypeScript (Essential JS 2). Use this when working with ej2-gantt component for project scheduling, task dependencies, and timeline management. Covers full Gantt implementation including data binding, task scheduling, columns, resources, timeline configuration, WBS, resource view, critical path, baseline tracking, filtering, sorting, editing, and export functionality (Excel/PDF).
9syncfusion-javascript-maps
Guide to implementing Syncfusion Maps in TypeScript and JavaScript. Use this skill whenever the user needs to create interactive maps, add markers, visualize geographical data, work with map layers, apply color mapping, add annotations, configure legends, or handle map interactions and events. Works with TypeScript (module-based) and JavaScript (CDN/ES5).
8syncfusion-javascript-accumulation-chart
Implements Syncfusion JavaScript accumulation charts (Pie, Doughnut, Funnel, Pyramid) for proportional and percentage-based visualizations. Use when displaying categorical or proportional data. Covers legend and label configuration, interactivity, accessibility, and customization. Works with TypeScript (modules) and JavaScript (CDN/ES5).
8syncfusion-javascript-rich-text-editor
Implements the Syncfusion Rich Text Editor and Markdown Editor using TypeScript (ej2-richtexteditor). Supports both HTML (WYSIWYG) and Markdown modes via editorMode on a single RichTextEditor class. Use this skill for toolbar setup, image/media/table handling, inline or iframe editing, AI assistant, smart editing, import/export, and all content editor scenarios.
8syncfusion-javascript-chart
Implements Syncfusion JavaScript chart controls (Line, Area, Bar, Column, Pie, Polar, Radar, Waterfall, Stock). Use when building interactive data visualizations, dashboards, or real-time charts. Covers series and axes configuration, styling, animations, exporting, and technical indicators. Works with TypeScript (webpack/modules) and JavaScript (CDN/ES5).
8syncfusion-javascript-dropdowns
Comprehensive guide for implementing Syncfusion TypeScript dropdown components including AutoComplete, ComboBox, Mention, Dropdownlist and Multiselect. Use this when building selection interfaces, data binding, filtering, cascading dropdowns, custom templates, and accessible dropdown experiences.
7