@patternfly/react-core
Version:
This library provides a set of common React components for use with the PatternFly reference implementation.
76 lines (60 loc) • 2.28 kB
Markdown
---
id: Date picker
section: components
subsection: date-and-time
---
import { Fragment, useRef, useState } from 'react';
import { Modal as ModalDeprecated, ModalVariant as ModalVariantDeprecated } from '@patternfly/react-core/deprecated';
## Demos
### Date range picker
This is intended to be used as a filter. After selecting a start date, the next date is automatically selected.
```js
import { useState } from 'react';
import { Split, SplitItem, DatePicker, isValidDate, yyyyMMddFormat } from '@patternfly/react-core';
DateRangePicker = () => {
const [from, setFrom] = useState();
const [to, setTo] = useState();
const toValidator = (date) =>
isValidDate(from) && date >= from ? '' : 'The "to" date must be after the "from" date';
const onFromChange = (_event, _value, date) => {
setFrom(new Date(date));
if (isValidDate(date)) {
date.setDate(date.getDate() + 1);
setTo(yyyyMMddFormat(date));
} else {
setTo('');
}
};
const onToChange = (_event, _value, date) => {
if (isValidDate(date)) {
setTo(yyyyMMddFormat(date));
}
};
return (
<Split>
<SplitItem>
<DatePicker onChange={onFromChange} aria-label="Start date" placeholder="YYYY-MM-DD" />
</SplitItem>
<SplitItem style={{ padding: '6px 12px 0 12px' }}>to</SplitItem>
<SplitItem>
<DatePicker
value={to}
onChange={onToChange}
isDisabled={!isValidDate(from)}
rangeStart={from}
validators={[toValidator]}
aria-label="End date"
placeholder="YYYY-MM-DD"
/>
</SplitItem>
</Split>
);
};
```
### Date and time pickers in modal
Modals trap focus and watch a few document level events. In order to place a date picker in a modal:
- To avoid the modal's escape press event handler from overruling the date picker's escape press handlers, use the `DatePickerRef` to close the calendar when it is open and the escape key is pressed.
- Append the calendar to the modal to keep it as close to the date picker in the DOM while maintaining correct layouts visually
In order to place a time picker in the modal, its menu must be appended to the time picker's parent.
```ts file="./examples/DateTimePickerInModal.tsx"
```