UNPKG

@massds/mayflower-react

Version:

React versions of Mayflower design system UI components

138 lines (107 loc) 4.76 kB
"use strict"; exports.__esModule = true; exports["default"] = void 0; var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _pikaday = _interopRequireDefault(require("pikaday")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } var InputDate = /*#__PURE__*/function (_React$Component) { _inheritsLoose(InputDate, _React$Component); function InputDate(props) { var _this; _this = _React$Component.call(this, props) || this; _this.picker = null; _this.startPikaday = _this.startPikaday.bind(_assertThisInitialized(_this)); _this.handleChange = _this.handleChange.bind(_assertThisInitialized(_this)); return _this; } var _proto = InputDate.prototype; _proto.componentDidMount = function componentDidMount() { this.startPikaday(); this.picker.setDate(this.props.defaultDate, true); } // eslint-disable-next-line camelcase ; _proto.UNSAFE_componentWillReceiveProps = function UNSAFE_componentWillReceiveProps(nextProps) { this.picker.setDate(nextProps.defaultDate, true); }; _proto.handleChange = function handleChange(date) { if (typeof this.props.onChangeCallback === 'function') { this.props.onChangeCallback({ date: date }); } }; _proto.startPikaday = function startPikaday() { var restrict = this.props.restrict; var pickerOptions = { field: this.dateInput, format: this.props.format, formatStrict: true, onSelect: this.handleChange, setDefaultDate: false }; if (this.props.defaultDate !== null) { pickerOptions.defaultDate = this.props.defaultDate; pickerOptions.setDefaultDate = true; } this.picker = new _pikaday["default"](pickerOptions); this.dateInput.setAttribute('type', 'text'); if (restrict === 'max') { this.picker.setMaxDate(new Date()); } else if (restrict === 'min') { this.picker.setMinDate(new Date()); } }; _proto.render = function render() { var _this2 = this; var classNames = this.props.required ? 'ma__input-date js-input-date js-is-required' : 'ma__input-date js-input-date '; return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("label", { htmlFor: this.props.id }, this.props.labelText), /*#__PURE__*/_react["default"].createElement("input", { className: classNames, name: this.props.name, id: this.props.id, type: "date", placeholder: this.props.placeholder, "data-type": "date", "data-restrict": this.props.restrict, ref: function ref(input) { _this2.dateInput = input; }, required: this.props.required, format: this.props.format })); }; return InputDate; }(_react["default"].Component); InputDate.propTypes = process.env.NODE_ENV !== "production" ? { /** The label text above the input field */ labelText: _propTypes["default"].string.isRequired, /** Whether an input date is required or not */ required: _propTypes["default"].bool, /** The id on the input date element */ id: _propTypes["default"].string.isRequired, /** The name of the input date element */ name: _propTypes["default"].string.isRequired, /** The placeholder text in the input box, prompting users for a value */ placeholder: _propTypes["default"].string, /** Controls whether the user can pick any date (''), today and prior ('max') or today and future ('min') */ restrict: _propTypes["default"].oneOf(['', 'max', 'min']), /** Controls the date format of input date . The current option are: 'M/DD/YYYY’, 'MM/DD/YYYY’', 'MMM D YYYY', or 'dddd, MMMM Do YYYY' */ format: _propTypes["default"].oneOf(['M/DD/YYYY', 'MM/DD/YYYY', 'MM-DD-YYYY', 'YYYYMMDD']), /** Custom onChange function that receives the selected date input */ onChangeCallback: _propTypes["default"].func, /** The date to set by default */ defaultDate: _propTypes["default"].instanceOf(Date) } : {}; // Only set defaults for the configuration variables which need to be opted in to activate. InputDate.defaultProps = { required: false, restrict: '', defaultDate: null, format: 'M/DD/YYYY' }; var _default = InputDate; exports["default"] = _default; module.exports = exports.default;