import React, { PureComponent } from 'react'; import { Components, registerComponent } from 'meteor/vulcan:core'; import moment from 'moment'; const isEmptyValue = value => (typeof value === 'undefined' || value === null || value === '' || Array.isArray(value) && value.length === 0); class DateComponent2 extends PureComponent { state = { year: null, month: null, day: null, } updateDate = (date) => { const { value, path } = this.props; let newDate; this.setState(date, () => { const { year, month, day } = this.state; if (isEmptyValue(value)) { if (year && month && day) { // wait until we have all three values to update the date newDate = moment().year(year).month(month).date(day); this.props.updateCurrentValues({ [path]: newDate.toDate() }); } } else { // update current date newDate = moment(this.props.value); if (year) newDate.year(year); if (month) newDate.month(month); if (day) newDate.date(day); this.props.updateCurrentValues({ [path]: newDate.toDate() }); } }); } render() { const { path, value } = this.props; const months = moment.months(); const mDate = !isEmptyValue(value) && moment(value); const monthProperties = { label: 'Month', name: `${path}.month`, layout: 'vertical', options: months.map((m, i) => ({ label: m, value: m })), value: mDate && mDate.format('MMMM') || '', onChange: (name, value) => { this.updateDate({ month: value }); } }; const dayProperties = { label: 'Day', name: `${path}.day`, layout: 'vertical', maxLength: 2, value: mDate && mDate.format('DD') || '', onBlur: (e) => { this.updateDate({ day: e.target.value }); } }; const yearProperties = { label: 'Year', name: `${path}.year`, layout: 'vertical', maxLength: 4, value: mDate && mDate.format('YYYY') || '', onBlur: (e) => { this.updateDate({ year: e.target.value }); } }; return (
); } } export default DateComponent2; registerComponent('FormComponentDate2', DateComponent2);