react-date-range-headless
Version:
A React component for choosing dates and date ranges. A fork of hypeserver/react-date-range in which the Headless UI Listbox (Select) uses instead html select and options
53 lines (48 loc) • 1.6 kB
JavaScript
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import DateRange from '../DateRange';
import DefinedRange from '../DefinedRange';
import { findNextRangeIndex, generateStyles } from '../../utils';
import classnames from 'classnames';
import coreStyles from '../../styles';
class DateRangePicker extends Component {
constructor(props) {
super(props);
this.state = {
focusedRange: [findNextRangeIndex(props.ranges), 0],
};
this.styles = generateStyles([coreStyles, props.classNames]);
}
render() {
const { focusedRange } = this.state;
return (
<div className={classnames(this.styles.dateRangePickerWrapper, this.props.className)}>
<DefinedRange
focusedRange={focusedRange}
onPreviewChange={value =>
this.dateRange.updatePreview(
value ? this.dateRange.calcNewSelection(value, typeof value === 'string') : null
)
}
{...this.props}
range={this.props.ranges[focusedRange[0]]}
className={undefined}
/>
<DateRange
onRangeFocusChange={focusedRange => this.setState({ focusedRange })}
focusedRange={focusedRange}
{...this.props}
ref={t => (this.dateRange = t)}
className={undefined}
/>
</div>
);
}
}
DateRangePicker.defaultProps = {};
DateRangePicker.propTypes = {
...DateRange.propTypes,
...DefinedRange.propTypes,
className: PropTypes.string,
};
export default DateRangePicker;