UNPKG

@front10/landing-page-book

Version:
361 lines (318 loc) 12 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _emailValidator = require('email-validator'); var _emailValidator2 = _interopRequireDefault(_emailValidator); var _ContactUs = require('../../service/ContactUs.services'); var _ContactUs2 = _interopRequireDefault(_ContactUs); var _Button = require('../Button'); var _Button2 = _interopRequireDefault(_Button); var _FormGroup = require('../FormGroup'); var _FormGroup2 = _interopRequireDefault(_FormGroup); var _Input = require('../Input/Input'); var _Input2 = _interopRequireDefault(_Input); var _WithStyles = require('../../helpers/WithStyles'); var _WithStyles2 = _interopRequireDefault(_WithStyles); var _ExtractProps = require('../../helpers/ExtractProps'); var _ExtractProps2 = _interopRequireDefault(_ExtractProps); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var ContactUs = function (_Component) { _inherits(ContactUs, _Component); function ContactUs(props) { _classCallCheck(this, ContactUs); var _this = _possibleConstructorReturn(this, (ContactUs.__proto__ || Object.getPrototypeOf(ContactUs)).call(this, props)); var _this$props = _this.props, name = _this$props.name, mail = _this$props.mail, phone = _this$props.phone, message = _this$props.message, loading = _this$props.loading; _this.state = { name: name, mail: mail, phone: phone, message: message, loading: loading }; _this.onSubmit = _this.onSubmit.bind(_this); _this.onChangeName = _this.onChangeName.bind(_this); _this.onChangeMail = _this.onChangeMail.bind(_this); _this.onChangePhone = _this.onChangePhone.bind(_this); _this.onChangeMessage = _this.onChangeMessage.bind(_this); _this.onUpdate = _this.onUpdate.bind(_this); return _this; } _createClass(ContactUs, [{ key: 'componentDidUpdate', value: function componentDidUpdate(prevProps) { this.onUpdate(prevProps); } }, { key: 'onUpdate', value: function onUpdate(prevProps) { var _props = this.props, name = _props.name, mail = _props.mail, phone = _props.phone, message = _props.message, loading = _props.loading; if (prevProps.name !== name) this.setState({ name: name }); if (prevProps.mail !== mail) this.setState({ mail: mail }); if (prevProps.phone !== phone) this.setState({ phone: phone }); if (prevProps.message !== message) this.setState({ message: message }); if (prevProps.loading !== loading) this.setState({ loading: loading }); } }, { key: 'onSubmit', value: function onSubmit() { var _this2 = this; var _props2 = this.props, onSubmit = _props2.onSubmit, apiUrl = _props2.apiUrl, onApiSuccess = _props2.onApiSuccess, onApiFail = _props2.onApiFail; onSubmit(this.state); if (apiUrl) { this.setState({ loading: true }, function () { var _state = _this2.state, name = _state.name, mail = _state.mail, phone = _state.phone, message = _state.message; _ContactUs2.default.send(apiUrl, name, mail, phone, message).then(function () { onApiSuccess(); _this2.setState({ loading: false }); }).catch(function () { onApiFail(); _this2.setState({ loading: false }); }); }); } } }, { key: 'onChangeName', value: function onChangeName(_ref) { var value = _ref.value; this.setState({ name: value }); } }, { key: 'onChangeMail', value: function onChangeMail(_ref2) { var value = _ref2.value; this.setState({ mail: value }); } }, { key: 'onChangePhone', value: function onChangePhone(_ref3) { var value = _ref3.value; this.setState({ phone: value }); } }, { key: 'onChangeMessage', value: function onChangeMessage(_ref4) { var value = _ref4.value; this.setState({ message: value }); } }, { key: 'render', value: function render() { var _props3 = this.props, nameText = _props3.nameText, mailText = _props3.mailText, phoneText = _props3.phoneText, messageText = _props3.messageText, showText = _props3.showText, showPlaceholder = _props3.showPlaceholder, submitButtonText = _props3.submitButtonText, submitButtonAlign = _props3.submitButtonAlign, submitButtonColor = _props3.submitButtonColor, className = _props3.className; var _state2 = this.state, name = _state2.name, mail = _state2.mail, phone = _state2.phone, message = _state2.message, loading = _state2.loading; return _react2.default.createElement( 'div', { className: 'ContactUs ' + className }, _react2.default.createElement( _FormGroup2.default, null, _react2.default.createElement(_Input2.default, _extends({ label: showText ? nameText : '', id: 'contactNameTextLabel', placeholder: showPlaceholder ? nameText : '', value: name, onChange: this.onChangeName }, (0, _ExtractProps2.default)('input', this.props))) ), _react2.default.createElement( _FormGroup2.default, null, _react2.default.createElement(_Input2.default, _extends({ label: showText ? mailText : '', type: 'email', id: 'contactEmailTextLabel', placeholder: showPlaceholder ? mailText : '', value: mail, onChange: this.onChangeMail }, (0, _ExtractProps2.default)('input', this.props))) ), _react2.default.createElement( _FormGroup2.default, null, _react2.default.createElement(_Input2.default, _extends({ label: showText ? phoneText : '', id: 'contactPhoneTextLabel', placeholder: showPlaceholder ? phoneText : '', value: phone, onChange: this.onChangePhone }, (0, _ExtractProps2.default)('input', this.props))) ), _react2.default.createElement( _FormGroup2.default, null, _react2.default.createElement(_Input2.default, _extends({ label: showText ? messageText : '', type: 'textarea', id: 'contactMessageTextLabel', placeholder: showPlaceholder ? messageText : '', value: message, onChange: this.onChangeMessage }, (0, _ExtractProps2.default)('input', this.props))) ), _react2.default.createElement( 'div', { className: 'text-' + submitButtonAlign }, _react2.default.createElement( _Button2.default, _extends({ loading: loading, disabled: !name || !message || !_emailValidator2.default.validate(mail) || loading, onClick: this.onSubmit, color: submitButtonColor }, (0, _ExtractProps2.default)('button', this.props)), submitButtonText ) ) ); } }]); return ContactUs; }(_react.Component); ContactUs.propTypes = { /** * Class to apply to icon */ className: _propTypes2.default.string, /** * Css style applied to the component */ style: _propTypes2.default.objectOf(_propTypes2.default.any), /** * Show or hide labels to inputs */ showText: _propTypes2.default.bool, /** * Show or hide placeholders to inputs */ showPlaceholder: _propTypes2.default.bool, /** * Define if component is loading */ loading: _propTypes2.default.bool, /** * Label and placeholder of name input */ nameText: _propTypes2.default.string, /** * Label and placeholder of email input */ mailText: _propTypes2.default.string, /** * Label and placeholder of phone input */ phoneText: _propTypes2.default.string, /** * Label and placeholder of message input */ messageText: _propTypes2.default.string, /** * Value of name input */ name: _propTypes2.default.string, /** * Value of mail input */ mail: _propTypes2.default.string, /** * Value of phone input */ phone: _propTypes2.default.string, /** * Value of message input */ message: _propTypes2.default.string, /** * Label of submit button */ submitButtonText: _propTypes2.default.string, /** * Align of Submit button */ submitButtonAlign: _propTypes2.default.string, /** * Color of Submit button */ submitButtonColor: _propTypes2.default.string, /** * Url to send contact data, component make a request via post method and send <code>name</code>, <code>email</code>, <code>phone</code> and <code>message</code> params */ apiUrl: _propTypes2.default.string, /** * Function called when Submit button has clicked. Params <code>{name, mail, phone, message}</code> */ onSubmit: _propTypes2.default.func, /** * Function called when <code>apiUrl</code> is defined and request was executed successfully */ onApiSuccess: _propTypes2.default.func, /** * Function called when <code>apiUrl</code> is defined and request was error */ onApiFail: _propTypes2.default.func }; ContactUs.defaultProps = { className: '', style: null, showText: false, showPlaceholder: true, loading: false, nameText: 'Your Name', mailText: 'Your Email', phoneText: 'Your Phone', messageText: 'Your Message', name: '', mail: '', phone: '', message: '', submitButtonText: 'Submit', submitButtonAlign: 'center', submitButtonColor: 'default', apiUrl: '', onSubmit: function onSubmit() {}, onApiSuccess: function onApiSuccess() {}, onApiFail: function onApiFail() {} }; exports.default = (0, _WithStyles2.default)(ContactUs);