Datepicker
The Datepicker component is the ultimate tool for selecting a single date and/or time, multiple dates or a date range.
Basic usage
The following example will create a datepicker with the default options.
By default the datepicker will be set up to single date selection with the calendar control.
import { Datepicker } from '@mobiscroll/react';
const App = () => {
return <Datepicker />;
}
For many more examples - simple and complex use-cases - check out the date picker demos for react.
Value Selection
The datepicker can be used for three major dates and time selection tasks:
- Single value selection - a date, time or date-time - use the date & time or calendar
- Multiple value selection - one or more dates - use the date picker or calendar
-
Range selection - a pair of start/end date, time or date-times - use the range picker
- Preset range selection - for selecting a week or a predefined part of the week
Single Value Selection
This is the default behavior, and it can also be initialized with the select: 'date'
option.
Depending on the controls option, we can use the datepicker this way to select either a single date or a single time or both (a single datetime).
const App = () => {
const [myBirthday, setMyBirthday] = React.useState(null);
const pickerChange = (ev) => {
setMyBirthday(ev.value);
}
return <Datepicker select="date" value={myBirthday} onChange={pickerChange} />;
}
Multiple Value Selection
The selectMultiple
option will enable us to select multiple dates on the calendar.
The selected value in this case will be an array of dates instead of just a single date.
const App = () => {
const [myCleaningDays, setMyCleaningDays] = React.useState(null);
const pickerChange = (ev) => {
setMyCleaningDays(ev.value);
}
return <Datepicker selectMultiple={true} value={myCleaningDays} onChange={pickerChange} />;
}
Range Selection
The datepicker can be used to select a date or a time range. The range selection feature can be activated with the select: 'range'
option.
The selected value in this case will be an array of dates with two values: the start and the end.
The controls
option will tell the datepicker what kind of range do we want to select, a date range or a time range.
const App = () => {
const [myHoliday, setMyHoliday] = React.useState(null);
const pickerChange = (ev) => {
setMyHoliday(ev.value);
}
return <Datepicker select="range" value={myHoliday} onChange={pickerChange} />;
}
Preset-range Selection
The datepicker can be used to select a week or predefined part of the week. The preset-range selection feature can be activated with the select: 'preset-range'
option.
The selected value in this case will be an array of dates with two values: the start and the end of the range.
When the preset-range selection mode is on the start date will be fixed to a specific day of the week (for example: Monday). This can be achieved with the firstSelectDay option, which defaults to the firstDay of the week.
The length of the selection will be a set number of days (for example: 5 days) and can be controlled with the selectSize option. By default it is set to 7 (will select the whole week), but can be further reduced to even a single day.
const App = () => {
const [myWeek, setMyWeek] = React.useState(null);
const pickerChange = (ev) => {
setMyWeek(ev.value);
}
return <Datepicker select="preset-range" value={myWeek} onChange={pickerChange} />;
}
The follwing example will create a datepicker that selects working days for a week (from Monday to Friday):
const App = () => {
const [myWeek, setMyWeek] = React.useState(null);
const pickerChange = (ev) => {
setMyWeek(ev.value);
}
return <Datepicker select="preset-range" firstSelectDay={1} selectSize={5} value={myWeek} onChange={pickerChange} />;
}
Return values
The default type of return values is the JavaScript Date object, but Mobiscroll supports more types as well. The Datepicker will choose the type depending on the returnFormat option.
Here's a list on supported formats and some hints on where are they really usefull:
-
'jsdate'
- Javascript date object - Ex. if you need to manipulate programmatically the selected value further, the Date object is a good starting point, since it has most of the functions for date ∧ time manipulation
-
'iso8601'
- ISO 8601 date string - Ex. if you need to send the selected value to a server, or need to serialize it, the ISO8601 string is the way to go.
-
'locale'
- Formatted date string based on the lang setting, or the dateFormat and timeFormat settings, if they are specified. It gives the most flexible formatting options.
-
'moment'
- moment object - The Moment.js library helps in manipulating the date ∧ time values. It has many functions the built in JavaScript Date object doesn't. It is very convenient when working a lot with dates.
When working with 'moment'
, you need to ensure that your project includes the Moment.js library and
also you will need to pass the moment libary reference to the Datepicker. Here's an example how:
import * as moment from 'moment';
function App() {
const [myValue, setMyValue] = React.useState(moment());
const myChange = (ev) => {
setMyValue(ev.value); // ev.value is a Moment object
}
return <Datepicker moment={moment} returnFormat="moment" onChange={myChange} value={myValue} />
}
Controls
The datepicker component can render different kinds of controls on the screen. These controls are referred to as the Calendar view, the Date picker, the Time picker, the Datetime picker and the Timegrid. Each of these controls are suitable in different scenarios, depending on the use-case.
For example, the Date picker can be used for selecting a single date, as well as the Calendar view. But only the Calendar view can be used for selecting multiple dates.
const App = () => {
const [myBirthday, setMyBirthday] = React.useState(null);
const myPickerChange = (ev) => {
setMyBirthday(ev.value);
}
const [kidsBirthday, setKidsBirthday] = React.useState(null);
const kidsPickerChange = (ev) => {
setMyBirthday(ev.value);
}
return <>
<Datepicker controls={['date']} value={myBirthday} onChange={myPickerChange} />
<Datepicker controls={['calendar']} selectMultiple={true} value={kidsBirthday} onChange={kidsPickerChange} />
</>;
}
-
The Calendar view can be used for single or multiple date selection as well as date range selection. It is represented by the
'calendar'
string. It is the default of thecontrols
option. -
The Date picker can be used for single date selection or date range selection. It is represented by the
'date'
string. -
The Time picker can be used for single time selection or time range selection. It can also be combined with other controls. It is represented by the
'time'
string. -
The Datetime picker can be used for single date & time selection as well as date & time range selection. It is represented by the
'datetime'
string. -
The Timegrid can be used for single time selection or time range selection. It can also be combined with the
'calendar'
or the'date'
control. It is represented by the'timegrid'
string.
Control combinations
Some controls can't be used in all situations. To have a better user experience, controls can be combined. The controls
options takes an array of strings, with predefined values.
The Time picker and the Timegrid controls can be combined with either the Calendar view or the Date picker for extending the selection precision.
const App = () => {
const [myAppointment, setMyAppointment] = React.useState(null);
const myPickerChange = (ev) => {
setMyAppointment(ev.value);
}
return <>
<!-- Date & Time picker -->
<Datepicker controls={['date', 'time']} value={myAppointment} onChange={myPickerChange} />
<!-- Calendar view & Time picker -->
<Datepicker controls={['calendar', 'time']} value={myAppointment} onChange={myPickerChange} />
<!-- Date & Timegrid -->
<Datepicker controls={['date', 'timegrid']} value={myAppointment} onChange={myPickerChange} />
<!-- Calendar view & Timegrid -->
<Datepicker controls={['calendar', 'timegrid']} value={myAppointment} onChange={myPickerChange} />
</>;
}
Customizing the Input
The datepicker, as explained below, can be used with one, two or no inputs.
Using without inputs
The first choice of input customization is to have no inputs at all. In this case rendering the component in inline display mode will leave out the use of inputs.
const App = () => {
const [myAppointment, setMyAppointment] = React.useState(null);
const myPickerChange = (ev) => {
setMyAppointment(ev.value);
}
return <Datepicker display="inline" value={myAppointment} onChange={myPickerChange} />;
}
Using with one input
The datepicker component will render a Mobiscroll Input by default. This input will hold the formatted value after selection.
Using a custom input can be done with the inputComponent prop. In this case the datepicker will render the component provided and pass the formatted value to it.
To pass props to the custom component, you can use the inputProps prop.
import { IonInput, IonItem } from '@ionic/react';
const app = () => {
const ionInputProps = {
placeholder: 'Click to select',
readOnly: true,
};
return <IonItem>
<Datepicker inputComponent={IonInput} inputProps={ionInputProps} />
</IonItem>;
}
Using with two inputs
When selecting a range, you have basically two values to display: the start of the range and the end of the range. These can be shown in different inputs using the startInput and the endInput options.
import { Input, Datepicker } from '@mobiscroll/react';
const app = () => {
const [start, setStartInput] = React.useState(null);
const [end, setEndInput] = React.useState(null);
return <>
<Input ref={setStartInput} label="Start date" />
<Input ref={setEndInput} label="End date" />
<Datepicker select="range" startInput={start} endInput={end} />
</>;
}
When the startInput and the endInput options are provided, the datepicker will not render any other inputs. It will open when these inputs are focused/clicked instead.
Display modes
The datepicker component can operate in two ways from the display option's point of view:
Modal display
Here comes the center
, top
, bottom
displays, and also the anchored
display when the touchUi option is true.
In these display modes, the picker shows up as a modal picker. When open, the selected value is stored as a temporary value until the set button is pressed. At that point the picker is closed and the value is commited to the state.
The above mentioned temporary value, when required, can be manipulated using the getTempVal()
and setTempVal()
instance methods.
Whe the temporary value changes the onTempChange
event is raised.
"Live" selection
Here come the inline
display (which displays as an embedded control) and the anchored
display when the touchUi options is false (on desktop devices).
In this case by default there is no set button to commit the value, so there's no temporary value like when the modal displays are used. What is shown on the picker, that is set directly to the state
Recurrence
For the colors, labels, marked, and invalid options it's possible to specify recurrence rules. The rule can be an object or a string in RRULE format.
Supported properties:
-
repeat
String - The frequency of the recurrence. String equivalent:FREQ
.-
'daily'
- Daily repeat -
'weekly'
- Weekly repeat -
'monthly'
- Monthly repeat -
'yearly'
- Yearly repeat
-
-
day
Number - The day of the month in case of monthly and yearly repeat. String equivalent:BYMONTHDAY
.
Negative numbers are calculated from the end of the month,-1
meaning the last day of the month.Specifying multiple days for the rule is currently not supported.Rules like every first/second/third/fourth week day of month are currently not supported. -
month
Number - Specify the month in case of yearly repeat. String equivalent:BYMONTH
.Specifying multiple months for the rule is currently not supported. -
weekDays
String - Comma separated list of the week days ('SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA') for the occurrences. String equivalent:BYDAY
. -
weekStart
String - Specifies the first day of the week ('SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'). Default is'MO'
. String equivalent:WKST
. -
count
Number - The number of occurrences. String equivalent:COUNT
. -
from
Date, String, Object - The start date of the occurrences. String equivalent:DTSTART
. -
until
:Date, String, Object - The end date of the occurrences. String equivalent:UNTIL
. -
interval
Number - The time interval for the rule, e.g. every 3 days, or every 2 weeks. This depends on therepeat
property. String equivalent:INTERVAL
.
In string format the specified properties are separated by the ';'
character.
recurring: {
repeat: 'daily',
count: 5,
interval: 2
}
recurring: 'FREQ=DAILY;COUNT=5;INTERVAL=2'
Examples
import { Datepicker } from '@mobiscroll/react';
const App = () => {
const myInvalids = useMemo(() => [{
start: '00:00',
end: '08:59',
recurring: {
repeat: 'daily'
}
}, {
start: new Date(2020, 2, 18, 9, 0),
end: new Date(2020, 2, 18, 17, 0),
recurring: {
repeat: 'daily',
count: 5,
interval: 2
}
}, {
start: new Date(2020, 2, 17, 20, 0),
end: new Date(2020, 2, 17, 22, 0),
recurring: 'FREQ=WEEKLY;UNTIL=2020-06-17;BYDAY=MO,WE'
}], []);
return <Datepicker invalid={myInvalids} />;
}
Recurring exceptions
In case you would like to skip some dates from your rule, that's when the recurring exception come in handy.
You can either set specific dates and/or a recurring rule as an exception, using the
recurringException
and the recurringExceptionRule
properties.
import { Datepicker } from '@mobiscroll/react';
const App = () => {
const myInvalids = useMemo(() => [{
start: '2021-06-01',
end: '2021-06-01'
recurring: {
repeat: 'daily',
until: '2021-12-31'
},
// exact dates as exceptions
recurringException: ['2021-07-10', '2021-07-11'],
// recurring rule as an exception
recurringExceptionRule: {
repeat: 'monthly',
day: 15
}
}, {
start: '08:30',
end: '10:00',
// Every Monday and Friday, except every second month\'s 3rd',
recurring: 'FREQ=WEEKLY;UNTIL=2021-06-01;BYDAY=MO,FR',
recurringExceptionRule: 'FREQ=MONTHLY;BYMONTHDAY=3;INTERVAL=2'
}], []);
return <Datepicker invalid={myInvalids} />;
}
Customizing the calendar header
The header of the calendar can be fully customized to one's needs. This can be achieved by passing a function that returns the custom header to the renderCalendarHeader option.
const customTemplate = () => {
return <>
<p>Any <strong>Title</strong> you want here or</p>
<YourCustomComponent yourProp="yourPropValue" />
</>
}
<Datepicker renderCalendarHeader={customTemplate} />
While fully customizing the header is very usefull, sometimes it's desireable to customize only parts of it.
In this case you can take advantage of the default header's building blocks. These components let you put toghether the header you want,
while you don't have to worry about the functionality behind them.
For example you can leave out parts from the default header, change the order the default buttons appearance or add custom components between them.
Here's the list of the built in components of the default header:
<CalendarPrev />
- Previous button component, that navigates to the previous month.<CalendarNext />
- Next button component, that navigates to the next month.<CalendarToday />
- Today button component, that navigates to the current date.<CalendarNav />
- The title navigation button component, that opens the year/month navigation.
The above components can be used inside of the custom header. The following example will render the prev and next buttons and then a custom title that is set from a custom variable (myTitle
variable).
const myTitle = 'My Awesome title';
const customWithNavButtons = () => {
return <>
<CalendarPrev />
<CalendarNext />
<div className="my-custom-title">{myTitle}</div>
</>;
}
<Datepicker renderCalendarHeader={customWithNavButtons} />
Options
Name | Type | Default value | Description |
---|---|---|---|
anchor | HTMLElement | undefined |
Specifies the anchor element for positioning, if display is set to
'anchored'
.
If undefined, it defaults to the element on which the component was initialized.
|
animation | String, Boolean | undefined |
Animation to use for opening/closing of the control (if display is not inline). Possible values:
false , turns the animation off.
|
buttons | Array |
['set', 'cancel']
|
Buttons to display. Each item in the array will be a button. A button can be specified as a string, or as a button object.
When the passed array does not contain the predefined 'set' button, the auto-selection will be turned on.
Selecting a value on the UI this way, will be set to the input immediately.
If there are more than one wheels shown, the control will close on overlay tap. Otherwise tapping a value on the wheel will also close the control.
If a string, it must be one of the predefined buttons:
If an object, it may have the following properties:
Predefined and custom buttons example
Predefined button handler example
|
calendarScroll | String | 'horizontal' |
Controls the direction the calendar can be navigated. You can navigate by scrolling, swiping or by clicking the arrow buttons in the header.
When navigation is |
calendarSize | Number | 1 |
Number of months/weeks to display. |
calendarSystem | Object | undefined |
Specify the calendar system to be used.
|
calendarType | String | 'month' |
Sets the calendar type. Possible values: In case of In case of |
circular | Boolean, Array | undefined |
If true , the scroll wheels are circular.
If an array, it can be specified as a per wheel configuration,
e.g. for 3 wheels: [true, false, false] - sets the first wheel circular.
If not specified, if a wheel has more values than the number of displayed rows, the scroll wheel becomes circular.
|
closeOnEsc | Boolean | true |
If true, the popup is closed on ESC keypress. |
closeOnOverlayClick | Boolean | true |
If true, the popup is closed on overlay tap/click. |
colors | Array | undefined |
Change the color of certain dates on the calendar. Must be an array of objects with the following properties:
The colored range will be considered all-day if:
The dates can be specified as Javascript Date objects, ISO 8601 strings, or moment objects.
Example
|
context | String, HTMLElement | 'body' |
The DOM element in which the component is appended and positioned (if not inline). Can be a selector string or a DOM element. |
controls | Array | ['calendar'] |
List of controls to show. Possible values:
|
cssClass | String | undefined |
Applies custom css class to the top level element. |
defaultSelection | Date, String, moment, Array, null | undefined |
Default selection which appears on the picker. The provided value will not be set as picker value, it's only a pre-selection. If not provided, the default selection will be the current date and/or time.
If |
defaultValue | Date, String, moment, Array | undefined |
Default value of the component in case of uncontrolled usage. For specifying a default selection, without the value being set, use the defaultSelection option. |
disabled | Boolean | false |
Initial disabled state of the component. This will take no effect in inline display mode. |
display | String | undefined |
Controls the positioning of the component. Possible options:
The default display mode depends on the theme,
it defaults to
In desktop mode (when the touchUi option is set to |
endInput | String, HTMLElement, Mobiscroll Input or IonInput | undefined |
Sets the Input for the end date. When using the datepicker to select a range, it can be used with one, two or no inputs. When an endInput is passed to the datepicker, it will put the range end part of the selection to that input. Similarly the input for the begin part can be specified by the startInput option. |
firstSelectDay | Number | firstDay |
Sets the first day of the selection, when preset-range selection is used. It takes a number representing the day of the week. Ex. Sunday is 0, Monday is 1, etc. When not set, it defaults to the first day of the week, which depends on the localization used. The length of the selection can be controlled with the selectSize option. |
focusOnClose | Boolean, String, HTMLElement |
true
|
Element to focus after the popup is closed.
If undefined , the original element will be focused.
If false , no focusing will occur.
|
focusTrap | Boolean | true |
If not in inline mode, focus won't be allowed to leave the popup. |
headerText | Boolean, String | false |
Specifies a custom string which appears in the popup header. If the string contains the '{value}' substring, it is replaced with the formatted value of the datepicker.If it's set to false , the header is hidden. |
height | Number, String | undefined |
Sets the height of the component. |
inputComponent | Function, String | undefined |
The input component to render if the picker is modal (the display option is not set to The following values are supported:
If not specified, a mobiscroll Input will be rendered. Props can be specified using the inputProps option. |
inputProps | Object | undefined |
Props for the rendered input, specified by the inputComponent option. |
inputStyle | String | 'underline' |
Defines the input rendering mode. By default the input has the underline styling. Possible values:
|
inputTyping | Boolean | true |
Allow the typing into the input field in desktop mode. |
inRangeInvalid | Boolean | false |
In case of range selection, determines if the invalid dates are allowed between the start and the end date. When
When designing a booking system, a possible solution for already booked dates is to set those dates to invalid. |
invalid | Array | undefined |
An array containing the invalid values.
Can contain dates (Javascript Date objects, ISO 8601 strings, or moment objects), or objects with the following properties:
Example
|
isOpen | Boolean | undefined |
Specifies wether the popup is opened or not.
Use it together with the onClose event, by setting it to false
when the popup closes.
|
itemHeight | Number | 40 |
Height in pixels of one item on the wheel.
The default value depends on the theme: iOS: 34 Material: 40 Windows: 44 |
labels | Array | undefined |
Specify labels for calendar days. A label object can have the following properties:
The dates can be specified as Javascript Date objects, ISO 8601 strings, or moment objects.
Example
|
labelStyle | String | undefined |
Defines the position of the label. The default label style depends on the theme option.
With the 'ios' theme the inputs have inline labels, with 'mobiscroll', 'material' and 'windows' themes
the default label position is stacked . Possible values:
|
marked | Array | undefined |
Mark certain dates on the calendar. Must be an array containing dates (Javascript Date objects, ISO 8601 strings, or moment objects),
or objects with the following properties:
The dates can be specified as Javascript Date objects, ISO 8601 strings, or moment objects.
Example
|
max | Date, String, Object | undefined |
Maximum value that can be selected. |
maxRange | Number | undefined |
It sets the maximum range that can be selected. When selecting a date without the time part, it sets the maximum number of days the selected range can contain. When there is a time part in the selection, it sets the maximum range in milliseconds. |
maxTime | string, Date or Moment object | undefined |
It sets the maximum time that is selectable on the time or the timegrid control. When there is a date part of the selection, the maximum is applied to each day. For example
will limit the time part of the selection to at most 18 o'clock each day.In contrast to the max option, which will limit the date part of the selection as well. For example: will limit the selection to August 22nd 18 o'clock, but will allow selection of times past 18 o'clock
on dates before Aug. 22nd.
This option can't be used with the |
maxWheelWidth | Number, Array | undefined |
Maximum width of the scroller wheels in pixels. If number, it is applied to all wheels, if an array, it is applied to each wheel separately. |
min | Date, String, Object | undefined |
Minimum value that can be selected. |
minRange | Number | undefined |
It sets the minimum range that can be selected. When selecting a date range without the time part, it sets the minimum number of days the selected range can contain. When there is a time part in the selection, it sets the minimum range in milliseconds. |
minTime | string, Date or Moment object | undefined |
It sets the minimum time that is selectable on the time or the timegrid control. When there is a date part of the selection, the minimum is applied to each day. For example
will limit the time part of the selection to at least 8 o'clock each day.In contrast to the min option, which will limit the date part of the selection as well. For example: will limit the selection to August 22nd 8 o'clock, but will allow selection of times earlier than 8 o'clock
on dates after Aug. 22nd.
This option can't be used with the |
minWheelWidth | Number, Array | 80 |
Minimum width of the scroller wheels in pixels. If number, it is applied to all wheels, if an array, it is applied to each wheel separately. The default value depends on the theme: iOS: 55 Material: 80 Windows Phone: 88 |
moment | object | undefined |
Reference to the Moment.js library. When using Moment objects as return values, this setting should be passed the reference to the Moment.js library. Check out our example on how to pass moment to the datepicker ! |
multiple | Boolean | false |
If true , multiple selection will be enabled. |
pages | Number, String | 1 |
Number of calendar pages (month or week) to display. If 'auto' , the displayed number of pages will be decided based on the viewport size. |
rangeEndInvalid | Boolean | false |
When true, it enables the end date to be selected on the first invalid date that comes after the selected start date.
For example, when designing a booking system, a possible solution for already booked dates is to set those dates to invalid. When the inRangeInvalid option is set to true (default), this option is ignored, so be sure to turn that off too if you want to use this one.
|
rangeHighlight | Boolean | true |
When selecting a range on the calendar control, it is optional to highlight the dates between the start and end date. By default, the dates are highlighted between the start and end values. When the highlight is turned off, only the start and end dates are shown as selected on the calendar. On desktop devices where a cursor is available, hovering the calendar days also help to visualize the selecting range. The hover styling is also turned off, when the range is not highlighted. |
renderCalendarHeader | Function | undefined |
Use this option to customize the header of the Datepicker. It takes a function that should return the desired markup. In the returned markup, you can use custom html as well as the built in header components of the calendar. Check out the customizing the header section for a more detailed description on built in components. Example with built in components
|
renderDay | Function | undefined |
You can use the renderDay option to customize the day cells of the Datepicker. It takes a function that should return the desired markup. The Datepicker will take care of the positioning, but everything else (like background color, hover effect, etc.) is left to you. If you are looking to customize only the content and don't want to bother with the styling of the event, you can use the renderDayContent option. The render function will receive an object as parameter. This data can be used to show day specific things on the Datepicker. The object passed to the function has the following properties:
Example
|
renderDayContent | Function | undefined |
You can use the renderDayContent option to customize the day content of the Datepicker. It takes a function that should return the desired markup. The Datepicker will take care of styling and you can focus on what you show beside the day number a.k.a the content. If you are looking to fully customize the day (ex. add custom hover effects) you will need to use the renderDay option. In that case you will only get the positioning done by the Datepicker and everything else is up to you. The render function will receive an object as parameter. This data can be used to show day specific things on the Datepicker. The object passed to the template has the following properties:
Example
|
responsive | Object | undefined |
Specify different settings for different container widths, in a form of an object,
where the keys are the name of the breakpoints, and the values are objects containing
the settings for the given breakpoint.
The available width is queried from the container element of the component and not the browsers viewport like in css media queries
There are five predefined breakpoints:
breakpoint
property specifying the min-width in pixels.
Example:
|
returnFormat | String | 'jsdate' |
Specifies the format in which the selected date(s) is returned in the onChange event.
Possible values:
When using Moment.js, the reference to the moment library must be passed to the component
via the moment option. Check out our example on how to pass moment to the datepicker !
|
rows | Number | 3 |
Number of visible rows on the wheel.
The default value depends on the theme: iOS: 5 Material: 3 Windows: 6 |
scrollLock | Boolean | true |
Disables page scrolling on touchmove (if not in inline mode, and popup height is less than window height). |
select | String | 'date' |
In terms of value selection, the datepicker can be used to select a single date/time or multiple dates/times, as well as a date range or a time range. It is also possible to select a week or a part of the week as a range, called preset-range. The select setting defines if the picker is used for selecting independent dates or a range. Possible values are:
|
selectCounter | Boolean | false |
If true and multiple selection is enabled, the number of selected items will be displayed in the header. |
selectMax | Number | undefined |
The maximum number of selected items in case of multiple selection. |
selectMultiple | Boolean | false |
If true , multiple selection will be enabled. |
selectSize | Number | 7 |
Sets the length of the selection in days when the preset-range selection is used. It defaults to the whole week (7 days). The selection will start depending on the firstSelectDay option and will have the number of days specified by the selectSize. |
separator | String | ' ' |
Sepearator between date and time (if the 'time' controls is also visible) |
showArrow | Boolean | true |
Show or hide the popup arrow, when display mode is 'anchored' .
|
showInput | Boolean | true |
If true , it will render an input field for the component. |
showOnClick | Boolean | true |
Opens the component on element click/tap. |
showOnFocus | Boolean |
false - on desktop
true - on mobile
|
Pops up the component on element focus. |
showOuterDays | Boolean | true |
Show or hide days from previous and next months.
Hiding outer days only works in case of month view, and not supported for week view.
Outer days are automatically hidden if calendarScroll is set to |
showOverlay | Boolean | true |
Show or hide overlay. |
showRangeLabels | Boolean | true |
By default when selecting a range, a start and end label is shown on the Datepicker. These labels indicate which part of the range are we selecting (start or end). The labels can also be used to switch the active selection from start to end or vice versa. The The start label text and end label text as well as the start value placeholder and end value placeholder can be localized and/or customized. |
showWeekNumbers | Boolean | false |
Show week numbers on the calendar view. Enumeration starts with the first week of the year. |
startInput | String, HTMLElement, Mobiscroll Input or IonInput | undefined |
Sets the Input for the start date. When using the datepicker to select a range, it can be used with one, two or no inputs. When a startInput is passed to the datepicker, it will put the range beginning part of the selection to that input. Similarly the input for the end part can be specified by the endInput option. |
stepHour | Number | 1 |
Step for the hours scroll wheel. Also, sets the hours step for the timegrid. |
stepMinute | Number | 1 |
Step for the minutes scroll wheel. Also, sets the minutes step for the timegrid. |
stepSecond | Number | 1 |
Step for the seconds scroll wheel. Also, sets the seconds step for the timegrid. |
tabs | Boolean | undefined |
Show / hide tabs for calendar, date and time controls. If undefined, it is automatically decided to show or hide tabs based on available space. If only one control is passed, tabs are always hidden. |
tagInput | Boolean | false |
If true and multiple selection is enabled, it will display multiple values as "chips/tags".
|
theme | String | undefined |
Sets the visual appearance of the component.
If it is
Make sure that the theme you set is included in the downloaded package.
|
themeVariant | String | undefined |
Controls which variant of the theme will be used (light or dark). Possible values:
To use the option with custom themes, make sure to create two custom themes,
where the dark version has the same name as the light one, suffixed with |
touchUi | Boolean, String | 'auto' |
Use Can be used with the responsive option to change the user interface based on viewport width.
If set to |
weeks | Number |
1
|
Number of weeks to display if calendarType is set to 'week' .
Deprecated, use the calendarSize option instead.
|
wheelWidth | Number, Array | undefined |
Width of the scroller wheels, in pixels. Wheel content will be truncated, if it exceeds the width. If number, it is applied to all wheels, if an array, it is applied to each wheel separately. |
width | Number, String | undefined |
Sets the width of the popup container. This will take no effect in inline display mode. |
Setting options dynamically
To make an option dynamic, you can pass a variable as option value. Whenever the value of the variable changes, the component will be re-rendered.
const App = () => {
const [myTheme, setMyTheme] = useState('ios');
const changeTheme = useCallback(() => {
// Changes the theme to Material
setMyTheme('material');
}, []);
return <div>
<Datepicker theme={myTheme} />
<button onClick={changeTheme}>Change theme</button>
</div>;
};
Events
Name | Description | |
---|---|---|
onActiveDateChange(event, inst) |
In range selection mode, the onActiveDateChange event is triggered when the active date changes from start to end or vice versa.
Parameters
|
|
onCancel(event, inst) |
Allows you to define your own event when cancel is pressed.
Parameters
Example
|
|
onCellClick(event, inst) |
Triggered when a cell is clicked on the calendar
.
Parameters
Example
|
|
onCellHoverIn(event, inst) |
Triggered when the mouse pointer hovers a day on the calendar.
Parameters
Example
|
|
onCellHoverOut(event, inst) |
Triggered when the mouse pointer leaves a day on the calendar.
Parameters
Example
|
|
onChange(event, inst) |
Triggered when the value is changed.
Parameters
Example
|
|
onClose(event, inst) |
Triggered when the component is closed.
Parameters
Example
|
|
onDestroy(event, inst) |
Triggered when the component is destroyed.
Parameters
Example
|
|
onInit(event, inst) |
Triggered when the component is initialized.
Parameters
Example
|
|
onLabelClick(event, inst) |
Triggered when a label on the calendar is clicked.
Parameters
Example
|
|
onOpen(event, inst) |
Triggered when the component is opened.
Parameters
Example
|
|
onPageChange(event, inst) |
Triggered when the calendar page is changed (month or week, with buttons or swipe).
Parameters
Example
|
|
onPageLoaded(event, inst) |
Triggered when the calendar page is changed (month or week, with buttons or swipe) and the animation has finished.
Parameters
Example
|
|
onPageLoading(event, inst) |
Triggered before the markup of a calendar page (month or week) is starting to render.
Parameters
Example
|
|
onPosition(event, inst) |
Triggered when the component is positioned (on initial show and resize / orientation change).
Useful if dimensions needs to be modified before the positioning happens, e.g. set a custom width or height. Custom positioning can also be implemented here, in this case, returning false from the handler
function will prevent the built in positioning.
Parameters
Example
|
|
onTempChange(event, inst) |
Triggered when the temporary value is changed.
Parameters
|
Methods
Name | Description | |
---|---|---|
close() |
Closes the component.
ExampleMethods can be called on an instance. For more details see calling methods
|
|
getTempVal() |
Returns the temporary value that's selected on the picker.
Depending on how the picker is displayed, the selection might be in a temporary state that hasn't been set yet.
This temporary value can be aquired calling the
The value that has been set to the model can be aquired using the
The
getTempVal and getVal methods are usually for advanced use-cases, when
the built in options and the state management tools of React are not sufficien to work with.
Returns: String, Date, Moment.js Object or Array of String, Date or Moment.js ObjectThe return value type depends on the returnFormat and the select option. |
|
getVal() |
Returns the selected value of the picker, that has been set to the model as well.
Depending on how the picker is displayed, the selection might be in a temporary state that hasn't been set yet.
This temporary value can be aquired calling the Returns: String, Date, Moment.js Object or Array of String, Date or Moment.js ObjectThe return value type depends on the returnFormat and the select option.
The
getTempVal and getVal methods are usually for advanced use-cases, when
the built in options and the state management tools of React are not sufficien to work with.
|
|
isVisible() |
Returns a boolean indicating whether the component is visible or not.
Returns: Boolean
ExampleMethods can be called on an instance. For more details see calling methods
|
|
navigate(date) |
Display a specific month on the calendar without setting the date.
Parameters
ExampleMethods can be called on an instance. For more details see calling methods
|
|
open() |
Opens the component.
ExampleMethods can be called on an instance. For more details see calling methods
|
|
position() |
Recalculates the position of the component (if not inline).
ExampleMethods can be called on an instance. For more details see calling methods
|
|
setActiveDate(active) | Sets which date is currently selected (start or end). If the picker is visible, it will also highlight the respective date.
Parameters
ExampleMethods can be called on an instance. For more details see calling methods
|
|
setTempVal(value) |
Sets the temporary value that's selected on the picker.
Depending on how the picker is displayed, the selection shown might be just a temporary value until the users hit the "Set" button to commit the selection.
This temporary value can be adjusted calling the
To get the current temporary value, check out the
The
setTempVal and setVal methods are usually for advanced use-cases, when
the built in options and the state management tools of React are not sufficien to work with.
Parameters
The type of the value parameter depends on the returnFormat and the select options. |
|
setVal(value) |
Sets the picker value and also writes it to the model.
Depending on how the picker is displayed, the selection shown might be just a temporary value until the users hit the "Set" button to commit the selection.
This temporary value can be adjusted calling the
To get the current selected value, check out the Parameters
The value type should be choosen depending on the returnFormat and the select option.
The
setTempVal and setVal methods are usually for advanced use-cases, when
the built in options and the state management tools of React are not sufficien to work with.
|
Localization
Name | Type | Default value | Description |
---|---|---|---|
amText | String | 'am' |
Text for AM. |
cancelText | String | 'Cancel' |
Text for Cancel button. |
dateFormat | String |
'MM/DD/YYYY'
|
The format for parsed and displayed dates.
|
dateWheels | String | undefined |
Display order and formating for month/day/year wheels. Characters have the same meaning as in the
dateFormat option.
The options also controls if a specific wheel should appear or not, e.g. use 'mmyy' to
display month and year wheels only, 'mmD ddy' to display both
day of week and date on the day wheel.
If not specified, the order of the wheels will be taken from the dateFormat option, and the formating will be defined by the theme Starting for 3.0.0-beta5 an experimental feature was introduced to display the whole date on one wheel. To activate this mode, the format of the date should be specified between | charchters:
|
dayNames | Array | ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'] |
The list of long day names, starting from Sunday, for use as requested via the dateFormat setting. |
dayNamesMin | Array | ['S', 'M', 'T', 'W', 'T', 'F', 'S'] |
The list of minimal day names, starting from Sunday, for use as requested via the dateFormat setting. |
dayNamesShort | Array | ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'] |
The list of abbreviated day names, starting from Sunday, for use as requested via the dateFormat setting. |
daySuffix | String | undefined |
Additional string to display after the day on the wheel. |
firstDay | Number | 0 |
Set the first day of the week: Sunday is 0, Monday is 1, etc.
When preset-range selection is used the range start day can be specified with the firstSelectDay option. |
headerText | Boolean, String | '{value}' |
Specifies a custom string which appears in the popup header. If the string contains '{value}' substring, it is replaced with the formatted value of the datepicker. If it's set to false , the header is hidden. |
locale | Object | undefined |
Sets the language of the component.
The locale option is an object containing all the translations for a given language.
Mobiscroll supports a number of languages listed below. If a language is missing from the list, it can also be provided by the user. Here's a guide on
how to write language modules.
Supported languages:
In some cases it's more convenient to set the locale using the language code string.
You can do that by using the
The
locale object is not tree-shakeable, meaning that all translations present in the object
will end up in the application bundle, whether it's being used or not.
|
monthNames | Array | ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] |
The list of full month names, for use as requested via the dateFormat setting. |
monthNamesShort | Array | ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] |
The list of abbreviated month names, for use as requested via the dateFormat setting. |
monthSuffix | String | undefined | Additional string to display after the month on the wheel. |
moreEventsPluralText | String | undefined |
Text for the "more" label on the calendar, when there's not enough space to display all the labels for the day,
and there are more than one extra labels.
The {count} inside the string will be replaced with the number of extra labels.
When not specified, the moreEventsText setting is used for both plural and singular form.
|
moreEventsText | String | '{count} more' |
Text for the "more" label on the calendar, when there's not enough space to display all the labels for the day.
The {count} inside the string will be replaced with the number of extra labels.
Use the moreEventsPluralText as well, if the plural form is different.
|
nowText | String | 'Now' |
Label for the 'Now' button. |
pmText | String | 'pm' |
Text for PM. |
rangeEndHelp | String | 'Please select' |
When selecting a range, it specifies the placeholder text for the end value under the end label. |
rangeEndLabel | String | 'End' |
When selecting a range, it specifies the text of the end label. |
rangeStartHelp | String | 'Please select' |
When selecting a range, it specifies the placeholder text for the start value under the start label. |
rangeStartLabel | String | 'Start' |
When selecting a range, it specifies the text of the start label. |
rtl | Boolean | false |
Right to left display. |
selectedPluralText | String | '{count} selected' |
Specifies the plural form of the amount of selected items according to the rules of particular language. The '{count}' substring will be replaced with the number of selected items. |
selectedText | String | '{count} selected' |
Specifies the amount of selected items according to the rules of particular language. The '{count}' substring will be replaced with the number of selected items. |
setText | String | 'Set' |
Text for Set button. |
timeFormat | String |
'hh:mm A'
|
The format for parsed and displayed dates
|
timeWheels | String |
undefined
|
Display order and formating of the time wheels on the datepicker.
Characters have the same meaning as in the timeFormat option.
If not specified, the order of the wheels will be taken from the timeFormat option, and the formating will be defined by the theme Starting for 3.0.0-beta5 an experimental feature was introduced to display the whole time on one wheel. To activate this mode, the format of the time should be specified between | charchters:
|
yearSuffix | String | undefined |
Additional string to display after the year on the wheel. |
Customizing the appearance
While the provided pre-built themes are enough in many use cases, most of the times on top of adapting to a specific platform, you'd also like to match a brand or color scheme. Mobiscroll provides various ways to achieve this:
- Create custom themes using the theme builder - the custom themes can be also built using out theme builder, on a graphical user interface, without any coding, or the need for Sass support in your project.
- Create custom themes using Sass - use this, if you need multiple themes with different color variatons, in case you have pages with different colors, or you'd like to users to customize the colors of your app.
- Override the Sass color variables - the straightforward way to change the colors in one place throughout the application.
Override the Sass Color Variables
A convenient way to customize the colors of the Mobiscroll components is to override the Sass color variables.
Let's say your branding uses a nice red accent color, and you'd like that color to appear on the Mobiscroll components as well,
while still using platform specific themes (e.g. ios
on iOS devices, material
on Android devices, and mobiscroll
on desktop).
You can override the accent color for every theme:
$mbsc-ios-accent: #e61d2a;
$mbsc-material-accent: #e61d2a;
$mbsc-mobiscroll-accent: #e61d2a;
@import "~@mobiscroll/React/dist/css/mobiscroll.react.scss"
You can also customize the colors on many levels:
- Theme specific variables (ex.
$mbsc-material-background
,$mbsc-ios-dark-text
) are applied to all components in a theme. Complete list of variables here. - Component specific global variables (ex.
$mbsc-card-background-light
,$mbsc-listview-text-dark
) are applied to all themes for a specific component. - Component and theme specific variables (ex.
$mbsc-ios-dark-form-background
,$mbsc-material-input-text
) are applied to a specific theme and a specific component.