ldx-widgets
Version:
widgets
97 lines (78 loc) • 2.57 kB
text/coffeescript
React = require 'react'
createClass = require 'create-react-class'
PropTypes = require 'prop-types'
ReactDatepicker = React.createFactory(require('react-datepicker').default)
moment = require 'moment'
_ = require 'lodash'
{div, span} = React.DOM
DatePicker = createClass
displayName: 'DatePicker'
propTypes:
placeholderText: PropTypes.oneOfType [
PropTypes.string
PropTypes.number
]
dateFormat: PropTypes.string
wrapperClass: PropTypes.string
className: PropTypes.string
minDate: PropTypes.object
maxDate: PropTypes.object
onChange: PropTypes.func.isRequired
tabIndex: PropTypes.number
hasDefaultDate: PropTypes.bool
selected: PropTypes.oneOfType [
PropTypes.string
PropTypes.object
]
getDefaultProps: ->
hasDefaultDate: yes # yes to have a default date in the date picker
placeholderText: 'Select a date'
dateFormat: 'MM/DD/YYYY'
className: null
includeTime: no # yes to include time selection
returnDateString: null # pass a date format string to get that format from the getValue method
onChange: ->
getInitialState: ->
{hasDefaultDate} = @props
# set initial state for selected
# if selected is in props and hasDefaultDate value then props.selected date else if hasDefaultDate then today's date else null
if hasDefaultDate and @props.selected?
selected = @props.selected
else if hasDefaultDate
selected = moment()
else
selected = null
{
selected: selected
}
componentWillReceiveProps: (nextProps) ->
if nextProps.selected?.format(@props.returnDateString or @props.dateFormat) isnt @props.selected?.format(@props.returnDateString or @props.dateFormat)
@setState
selected: nextProps.selected
render: ->
props = _.clone(@props)
props.onChange = @handleDateChange
{wrapperClass} = props
mainClass = 'datepicker-wrapper'
mainClass += " #{wrapperClass}" if wrapperClass?
div {
className: mainClass
}, ReactDatepicker(props)
handleDateChange: (date) ->
@setState
selected: date
, =>
@props.onChange?(date)
getValue: ->
{returnDateString, hasDefaultDate} = @props
{selected} = @state
# if hasDefaultDate is false and nothing is selected then return an empty string
if returnDateString? and selected?
selected.format(returnDateString)
else if selected?
selected
else if hasDefaultDate
moment()
else
''
module.exports = DatePicker