@emsipl/react-data-grid-addons
Version:
A set of addons for react-data-grid
50 lines (40 loc) • 1.48 kB
JavaScript
const React = require('react');
import PropTypes from 'prop-types';
const Moment = require('moment');
const DateRangeFilter = require('./widgets/DateRangeFilter');
class DateRangeEditor extends React.Component {
static displayName = 'DateRangeEditor';
static propTypes = {
format: PropTypes.string,
ranges: PropTypes.arrayOf(PropTypes.string),
value: PropTypes.shape({
startDate: PropTypes.Date.isRequired,
endDate: PropTypes.Date.isRequired
}).isRequired
};
static defaultProps = {
format: 'YYYY-MM-DD',
ranges: []
};
rangeSeparatorChar = ' - ';
isDateValid = (date) => {
return new Moment(date, this.props.format, true).isValid();
};
validate = (value) => {
return this.isDateValid(value.startDate)
&& this.isDateValid(value.endDate)
&& (new Moment(value.startDate, this.props.format).isBefore(value.endDate)
|| new Moment(value.startDate, this.props.format).isSame(value.endDate));
};
handleDateFilterApply = (startDate, endDate) => {
this.commit({ value: { startDate: startDate, endDate: endDate } });
};
render() {
return (
<div style={this.getStyle()} onKeyDown={this.onKeyDown}>
<DateRangeFilter ref={(node) => this.datepicker = node} onApply={this.handleDateFilterApply} format={this.props.format} ranges={this.props.ranges} startDate={this.props.value.startDate} endDate={this.props.value.endDate} />
</div>
);
}
}
module.exports = DateRangeEditor;