Skip to main content

Date range

Examples

Check out the Usage section for details about how to design a DateRangePicker properly, and the different configuration options we provide.

Basic Example

You can add an input that allows a user to enter a date range either manually or through calendar modals.

<DateRangePicker
label={{ start: 'Choose start date', end: 'Choose end date' }}
onChange={(event, value) =>
console.log('The dates chosen are', value.start, value.end)
}
/>

Min/Max example

You can limit the range of dates a user can select.

Note: This does not include validation, it only limits the options in the calendar modal. A user can type any date into the input.
<DateRangePicker
label={{ start: 'Choose start date', end: 'Choose end date' }}
minDate={{ day: 1, month: 1, year: 2024 }}
maxDate={{ day: 31, month: 12, year: 2024 }}
/>

Validation Example

You can use the onChange property to call a function that updates stateMessages to display errors to the user. The following example displays errors for invalid dates or dates that are not in 2024.

Note: As mentioned in the previous example, a user can type any date into the input regardless of the minDate and maxDate properties.
import React, { useState } from 'react';
import { DateRangePicker } from '@jutro/components/new';

export function DateRangePickerError() {
const [stateMessages, setStateMessages] = useState({});

const parseErrorCode = (sideErrorObject) => {
let errorCode = sideErrorObject.errorCode;
if (errorCode === 'INVALID_DATE') {
return { error: ['Please enter a valid date.'] };
}

if (errorCode === 'MIN_EXCEEDED' || errorCode === 'MAX_EXCEEDED') {
return { error: ['Please enter a valid date.'] };
}
};

const handleChange = (event, value, errorObject) => {
let parsedMessages: {
start?: { error: string[] };
end?: { error: string[] };
} = {};
// check start
let start_error = errorObject?.start;
if (start_error) {
parsedMessages.start = parseErrorCode(start_error);
}

// check end
let end_error = errorObject?.end;
if (end_error) {
parsedMessages.end = parseErrorCode(end_error);
}
console.log(parsedMessages);
setStateMessages(parsedMessages);
};

return (
<DateRangePicker
label={{ start: 'Choose start date', end: 'Choose end date' }}
minDate={{ day: 1, month: 1, year: 2024 }}
maxDate={{ day: 31, month: 12, year: 2024 }}
onChange={handleChange}
stateMessages={stateMessages}
/>
);
}