public/js/components/FormFields/FormFieldDateTextInput.js (45 lines of code) (raw):
import React from 'react';
import {PropTypes} from 'prop-types';
import ShowErrors from '../Utilities/ShowErrors';
import { errorPropType } from '../../constants/errorPropType';
import moment from 'moment';
export default class FormFieldDateTextInput extends React.Component {
static propTypes = {
fieldLabel: PropTypes.string,
fieldName: PropTypes.string,
fieldValue: PropTypes.number,
fieldErrors: PropTypes.arrayOf(errorPropType),
formRowClass: PropTypes.string,
onUpdateField: PropTypes.func,
disabled: PropTypes.bool
};
millisecondsToString = (ms) => moment.utc(ms).format("YYYY-MM-DD");
state = {
fieldDisplayValue: this.millisecondsToString(this.props.fieldValue)
};
onUpdate = (e) => {
let momentDate = moment.utc(e.target.value, "YYYY-MM-DD", true);
if (momentDate.isValid()) {
this.setState({
fieldDisplayValue: e.target.value
});
this.props.onUpdateField(momentDate.valueOf());
}
};
render() {
return (
<div className={this.props.formRowClass || "form__row"}>
{this.props.fieldLabel ? <label htmlFor={this.props.fieldName} className="form__label">{this.props.fieldLabel}</label> : false}
<input
type="date"
className={"form__field " + (this.props.fieldErrors && this.props.fieldErrors.length ? "form__field--error" : "")}
id={this.props.fieldName}
onChange={this.onUpdate}
value={this.state.fieldDisplayValue || ""}
disabled={this.props.disabled}
/>
<ShowErrors errors={this.props.fieldErrors}/>
</div>
);
}
}