Project

General

Profile

Download (3.75 KB) Statistics
| Branch: | Tag: | Revision:
import React from 'react';
import PropTypes from 'prop-types';
import {
FormControl,
InputGroup,
Icon,
OverlayTrigger,
Popover,
} from 'patternfly-react';
import DateInput from './DateComponents/DateInput';
import TodayButton from './DateComponents/TodayButton';
import TimeInput from './TimeComponents/TimeInput';
import { MONTH } from './DateComponents/DateConstants';
import { formatDateTime } from '../../../common/helpers';
import './date-time-picker.scss';

class DateTimePicker extends React.Component {
get initialDate() {
const { value } = this.props;
return Date.parse(value) ? new Date(value) : new Date();
}

state = {
value: this.initialDate,
typeOfDateInput: MONTH,
isTimeTableOpen: false,
hiddenValue: this.props.hiddenValue,
};

setSelected = date => {
if (Date.parse(date)) {
const newDate = new Date(date);
this.setState({ value: newDate });
}
this.setState({
typeOfDateInput: MONTH,
isTimeTableOpen: false,
});
};

render() {
const {
locale,
weekStartsOn,
inputProps,
id,
placement,
name,
required,
} = this.props;
const { value, typeOfDateInput, isTimeTableOpen, hiddenValue } = this.state;
const popover = (
<Popover
id={id}
className="bootstrap-datetimepicker-widget dropdown-menu timepicker-sbs"
>
<div className="row">
<DateInput
date={value}
setSelected={this.setSelected}
locale={locale}
weekStartsOn={weekStartsOn}
className="col-md-6"
typeOfDateInput={typeOfDateInput}
/>
<TimeInput
time={value}
setSelected={this.setSelected}
isTimeTableOpen={isTimeTableOpen}
/>
</div>
<li className="picker-switch accordion-toggle">
<TodayButton setSelected={this.setSelected} />
</li>
</Popover>
);
return (
<div>
<InputGroup className="input-group date-time-picker-pf">
<FormControl
{...inputProps}
aria-label="date-picker-input"
type="text"
className="date-time-input"
name={name}
value={hiddenValue && !required ? '' : formatDateTime(value)}
onChange={e => this.setSelected(e.target.value)}
/>

<OverlayTrigger
trigger="click"
placement={placement}
overlay={popover}
rootClose
container={this}
onEnter={() => this.setState({ hiddenValue: false })}
>
<InputGroup.Addon className="date-time-picker-pf">
<Icon type="fa" name="calendar" />
</InputGroup.Addon>
</OverlayTrigger>
{!required && (
<InputGroup.Addon className="clear-button">
<Icon
type="fa"
name="close"
onClick={() =>
this.setState({ hiddenValue: true, value: new Date() })
}
/>
</InputGroup.Addon>
)}
</InputGroup>
</div>
);
}
}

DateTimePicker.propTypes = {
value: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.string]),
locale: PropTypes.string,
weekStartsOn: PropTypes.number,
inputProps: PropTypes.object,
id: PropTypes.string,
hiddenValue: PropTypes.bool,
placement: OverlayTrigger.propTypes.placement,
name: PropTypes.string,
required: PropTypes.bool,
};
DateTimePicker.defaultProps = {
value: new Date(),
locale: 'en-US',
weekStartsOn: 1,
inputProps: {},
id: 'datetime-picker-popover',
hiddenValue: true,
placement: 'top',
name: undefined,
required: false,
};
export default DateTimePicker;
(4-4/9)