Calendar¶
Overview¶
The Calendar Control allows users to view and manage events in a calendar interface. It supports different event views, Month, Week and Day, and customizable rendering for month, week, and day views.
Here is an example of the control in action:

Installation¶
- Check that you installed the
@pnp/spfx-controls-reactdependency. Check out the getting started page for more information about installing the dependency. - Import the following modules to your component:
Importing the Calendar Control¶
To use the Calendar Control in your React project, import it as follows:
import { Calendar } from '@pnp/spfx-controls-react/lib/calendar';
import { IEvent } from '@pnp/spfx-controls-react/lib/calendar/IEvent';
Calendar Props¶
The Calendar Control accepts the following props:
| Property | Type | Required | Description |
|---|---|---|---|
| events | IEvent[] | Yes | List of events to display in the calendar. |
| height | string | number | No | Height of the calendar. |
| theme | Theme | No | Theme to apply to the calendar. |
| onMonthChange | (date: Date) => void | No | Callback function triggered when the month changes. |
| onDayChange | (date: Date) => void | No | Callback function triggered when the day changes. |
| onWeekChange | (date: Date) => void | No | Callback function triggered when the week changes. |
| onNext | (date: Date) => void | No | Callback function triggered when navigating to the next period. |
| onPrev | (date: Date) => void | No | Callback function triggered when navigating to the previous period. |
| onViewChange | (view: string) => void | No | Callback function triggered when the view changes. |
| onDaySlotClick | (date: Date) => void | No | Callback function triggered when an event is clicked on day slot on Month view |
Event Object (IEvent)¶
Events displayed in the calendar are represented using the IEvent interface:
Event Properties¶
| Property | Type | Required | Description |
|---|---|---|---|
| id | string | Yes | Unique identifier for the event. |
| title | string | Yes | The title of the event. |
| start | string (ISO format) | Yes | The start date and time of the event. |
| end | string (ISO format) | Yes | The end date and time of the event. |
| isFullDay | boolean | No | Indicates if the event lasts the whole day. |
| attendees | IAttendee[] | No | List of attendees for the event. |
| category | string | No | The category of the event (e.g., "Meeting", "Workshop"). |
| description | string | No | A brief description of the event. |
| location | string | No | The event's physical or virtual location. |
| importance | string | No | Importance level of the event (e.g., "High", "Normal", "Low"). |
| isOrganizer | boolean | No | Indicates if the user is the event organizer. |
| sensitivity | string | No | Privacy setting of the event (e.g., "Public", "Private"). |
| type | string | No | Type of event (e.g., "Appointment", "Meeting"). |
| isOnlineMeeting | boolean | No | Indicates if the event is an online meeting. |
| onRenderInMonthView | (event: IEvent) => JSX.Element | No | Custom rendering function for month view. |
| onRenderInWeekView | (event: IEvent) => JSX.Element | No | Custom rendering function for week view. |
| onRenderInDayView | (event: IEvent) => JSX.Element | No | Custom rendering function for day view. |
| enableOnHover | boolean | No | Whether to enable hover effects on events. |
| imageUrl | string | No | URL for an event-related image. |
| webLink | string | No | URL to navigate to event details. |
| color | string | No | Custom color for the event. |
| backgroundColor | string | No | Custom background color for the event. |
Attendee Object (IAttendee)¶
The IAttendee interface represents an attendee of an event:
| Property | Type | Required | Description |
|---|---|---|---|
| id | string | Yes | Unique identifier for the attendee. |
| name | string | Yes | Name of the attendee. |
| string | No | Email of the attendee. | |
| role | string | No | Role of the attendee in the event. |
| imageUrl | string | No | URL for the attendee's image. |
Usage Example¶
Here’s an example of how to integrate the Calendar Control in a React component:
import React from 'react';
import { Calendar } from '@pnp/spfx-controls-react/lib/calendar';
import { IEvent } from '@pnp/spfx-controls-react/lib/calendar/IEvent';
const events: IEvent[] = [
{
id: '1',
title: 'Weekly Sync: Development Team',
start: '2025-02-15T10:00:00',
end: '2025-02-15T11:00:00',
location: 'Microsoft Teams',
attendees: [{ name: 'AJ' }, { name: 'ML' }],
category: 'Meeting',
isOnlineMeeting: true,
},
{
id: '2',
title: 'Project Deadline',
start: '2025-02-21T23:59:00',
end: '2025-02-21T23:59:00',
category: 'Deadline',
importance: 'High',
},
];
const MyCalendar = () => {
return (
<Calendar
events={events}
height={800}
theme={theme}
onViewChange={(view) => console.log(`View changed to: ${view}`)}
onDayChange={(date) => console.log(`Day changed to: ${date}`)}
onWeekChange={(date) => console.log(`Week changed to: ${date}`)}
onMonthChange={(date) => console.log(`Month changed to: ${date}`)}
onNext={(date) => console.log(`Navigated to next date: ${date}`)}
onPrev={(date) => console.log(`Navigated to previous date: ${date}`)}
/>
);
};
export default MyCalendar;
Conclusion¶
The Calendar Control provides a flexible and interactive way to manage events. It supports multiple views, custom rendering options, and detailed event properties to enhance the user experience.