UNPKG

imrc-datetime-picker

Version:

(Improved) React component datetime picker by momentjs

171 lines (157 loc) 4.26 kB
import React, { Component } from "react"; import classNames from "classnames/bind"; import blacklist from "blacklist"; import DatetimePicker from "./Picker.jsx"; import Shortcuts from "./panels/Shortcuts.jsx"; import { CONFIRM_BUTTON_TEXT, START_DATE_TEXT, END_DATE_TEXT } from "./constants.js"; import classes from "./sass"; class Range extends Component { constructor(props) { super(props); this.state = { moment: props.moment }; } componentWillReceiveProps(props) { this.setState({ moment: props.moment }); } handleChange = moment => { this.setState({ moment }); }; handleShortcutChange = (moment, isCustom) => { const { onChange } = this.props; if (isCustom) { this.setState({ moment }); } else { onChange && onChange(moment); } }; onConfirm = () => { const { moment } = this.state; const { onChange } = this.props; onChange && onChange(moment); }; render() { const { moment } = this.state; const { format, showTimePicker = false, isOpen = true, shortcuts, confirmButtonText = CONFIRM_BUTTON_TEXT, startDateText = START_DATE_TEXT, endDateText = END_DATE_TEXT, isSolar } = this.props; const formatStyle = format || (showTimePicker ? isSolar ? "jYYYY/jMM/jDD HH:mm" : "YYYY/MM/DD HH:mm" : isSolar ? "jYYYY/jMM/jDD" : "YYYY/MM/DD"); const className = classNames( classes["datetime-range-picker"], this.props.className ); const props = blacklist( this.props, "className", "isOpen", "format", "moment", "showTimePicker", "shortcuts", "onChange" ); return ( <div className={className} style={{ display: isOpen ? "block" : "none" }}> <div className="tools-bar"> {shortcuts ? ( <Shortcuts {...props} moment={moment || {}} range shortcuts={shortcuts} onChange={this.handleShortcutChange} /> ) : ( undefined )} <div className="buttons"> <button type="button" className={classes["btn"]} onClick={this.onConfirm} > {confirmButtonText} </button> </div> </div> <div className="datetime-range-picker-panel"> <table> <tbody> <tr> <td className="datetime-text"> <span className="text-label">{startDateText}</span> <span className="text-value"> {moment && moment.start ? moment.start.format(formatStyle) : undefined} </span> </td> <td className="datetime-text"> <span className="text-label">{endDateText}</span> <span className="text-value"> {moment && moment.end ? moment.end.format(formatStyle) : undefined} </span> </td> </tr> <tr> <td> <DatetimePicker {...props} isOpen={isOpen} className="range-start-picker" showTimePicker={showTimePicker} moment={moment} range rangeAt="start" onChange={this.handleChange} /> </td> <td> <DatetimePicker {...props} isOpen={isOpen} className="range-end-picker" showTimePicker={showTimePicker} moment={moment} range rangeAt="end" onChange={this.handleChange} /> </td> </tr> </tbody> </table> </div> </div> ); } } export default Range;