Dynamic View Switching
Usage
theme="ios" You can turn auto theming on and let it decide based on the platform.
Usage
themeVariant="light" You can turn auto dark mode on based on system settings.
Usage
clickToCreate={true}
// click to create is on dragToCreate={true}
// drag to create is on dragToMove={true}
// reordering is on dragToResize={true}
// resizing is on eventDelete={true}
// deleting is on Fine-tune drag & drop with these options, which are false by default.
Usage
locale={localeEn} Selecting the locale loads the localized settings and the translated UI text.
Dynamic View Switching
Dynamically switch views within one instance. Use a UI control to let users do the switching or do it programmatically.
The example features a month view with events as labels, a weekly schedule view, a daily schedule and a weekly agenda. Use property binding and when the value of the property changes the settings propagate.
Demo

Code
View code on GitHub
import {
CalendarNav,
CalendarNext,
CalendarPrev,
CalendarToday,
Eventcalendar,
getJson,
Segmented,
SegmentedGroup,
setOptions ,
} from '@mobiscroll/react';
import { useCallback, useEffect, useState } from 'react';
setOptions({
locale: ,
theme: ' ',
themeVariant: ' '
});
function App() {
const [view, setView] = useState('month');
const [myEvents, setEvents] = useState([]);
const [calView, setCalView] = useState({
calendar: { labels: true },
});
const changeView = useCallback((event) => {
let calView;
switch (event.target.value) {
case 'year':
calView = {
calendar: { type: 'year' },
};
break;
case 'month':
calView = {
calendar: { labels: true },
};
break;
case 'week':
calView = {
scheduler: { type: 'week' },
};
break;
case 'day':
calView = {
scheduler: { type: 'day' },
};
break;
case 'agenda':
calView = {
calendar: { type: 'week' },
agenda: { type: 'week' },
};
break;
}
setView(event.target.value);
setCalView(calView);
}, []);
const customWithNavButtons = useCallback(
() => (
<>
<CalendarNav className="cal-header-nav" />
<div className="cal-header-picker">
<SegmentedGroup value={view} onChange={changeView}>
<Segmented value="year">Year</Segmented>
<Segmented value="month">Month</Segmented>
<Segmented value="week">Week</Segmented>
<Segmented value="day">Day</Segmented>
<Segmented value="agenda">Agenda</Segmented>
</SegmentedGroup>
</div>
<CalendarPrev className="cal-header-prev" />
<CalendarToday className="cal-header-today" />
<CalendarNext className="cal-header-next" />
</>
),
[changeView, view],
);
useEffect(() => {
getJson(
'https://trial.mobiscroll.com/events/?vers=5',
(events) => {
setEvents(events);
},
'jsonp',
);
}, []);
return (
<Eventcalendar
clickToCreate={ }
dragToCreate={ }
dragToMove={ }
dragToResize={ }
eventDelete={ }
renderHeader={customWithNavButtons}
height={750}
view={calView}
data={myEvents}
cssClass="md-switching-view-cont"
/>
);
}
export default App;
import {
CalendarNav,
CalendarNext,
CalendarPrev,
CalendarToday,
Eventcalendar,
getJson,
MbscCalendarEvent,
MbscEventcalendarView,
Segmented,
SegmentedGroup,
setOptions ,
} from '@mobiscroll/react';
import { ChangeEvent, FC, useCallback, useEffect, useState } from 'react';
setOptions({
locale: ,
theme: ' ',
themeVariant: ' '
});
const App: FC = () => {
const [view, setView] = useState('month');
const [myEvents, setEvents] = useState<MbscCalendarEvent[]>([]);
const [calView, setCalView] = useState<MbscEventcalendarView>({
calendar: { labels: true },
});
const changeView = useCallback((event: ChangeEvent<HTMLInputElement>) => {
let calView = {};
switch (event.target.value) {
case 'year':
calView = {
calendar: { type: 'year' },
};
break;
case 'month':
calView = {
calendar: { labels: true },
};
break;
case 'week':
calView = {
scheduler: { type: 'week' },
};
break;
case 'day':
calView = {
scheduler: { type: 'day' },
};
break;
case 'agenda':
calView = {
calendar: { type: 'week' },
agenda: { type: 'week' },
};
break;
}
setView(event.target.value);
setCalView(calView);
}, []);
const customWithNavButtons = useCallback(
() => (
<>
<CalendarNav className="cal-header-nav" />
<div className="cal-header-picker">
<SegmentedGroup value={view} onChange={changeView}>
<Segmented value="year">Year</Segmented>
<Segmented value="month">Month</Segmented>
<Segmented value="week">Week</Segmented>
<Segmented value="day">Day</Segmented>
<Segmented value="agenda">Agenda</Segmented>
</SegmentedGroup>
</div>
<CalendarPrev className="cal-header-prev" />
<CalendarToday className="cal-header-today" />
<CalendarNext className="cal-header-next" />
</>
),
[changeView, view],
);
useEffect(() => {
getJson(
'https://trial.mobiscroll.com/events/?vers=5',
(events: MbscCalendarEvent[]) => {
setEvents(events);
},
'jsonp',
);
}, []);
return (
<Eventcalendar
clickToCreate={ }
dragToCreate={ }
dragToMove={ }
dragToResize={ }
eventDelete={ }
renderHeader={customWithNavButtons}
height={750}
view={calView}
data={myEvents}
cssClass="md-switching-view-cont"
/>
);
};
export default App;
.md-switching-view-cont .mbsc-segmented {
max-width: 350px;
margin: 0 auto;
}
.md-switching-view-cont .mbsc-calendar-grid-item {
height: 490px;
box-sizing: border-box;
}
.cal-header-picker {
flex: 1 0 auto;
}
.cal-header-nav {
width: 200px;
}
/* material header order */
.mbsc-material.cal-header-prev {
order: 1;
}
.mbsc-material.cal-header-next {
order: 2;
}
.mbsc-material.cal-header-nav {
order: 3;
}
.mbsc-material .cal-header-picker {
order: 4;
}
.mbsc-material .cal-header-today {
order: 5;
}
/* windows header order */
.mbsc-windows.cal-header-nav {
order: 1;
}
.mbsc-windows.cal-header-prev {
order: 2;
}
.mbsc-windows.cal-header-next {
order: 3;
}
.mbsc-windows .cal-header-picker {
order: 4;
}
.mbsc-windows .cal-header-today {
order: 5;
}