UNPKG

tiramisu-react-form

Version:

form component for reactjs

207 lines (147 loc) 6.85 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.Form = undefined; 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 _lodash = require('lodash'); var _lodash2 = _interopRequireDefault(_lodash); var _Error = require('./Error'); var _Error2 = _interopRequireDefault(_Error); var _Button = require('./Button'); var _Button2 = _interopRequireDefault(_Button); var _classNames = require('../utils/style/classNames'); var _classNames2 = _interopRequireDefault(_classNames); var _passPropsToChildren = require('../utils/data/passPropsToChildren'); var _passPropsToChildren2 = _interopRequireDefault(_passPropsToChildren); var _checkChildren = require('../utils/errors/checkChildren'); var _checkChildren2 = _interopRequireDefault(_checkChildren); var _hasErrors = require('../utils/errors/hasErrors'); var _hasErrors2 = _interopRequireDefault(_hasErrors); require('../css/index.css'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return 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 Form = function (_Component) { _inherits(Form, _Component); function Form() { _classCallCheck(this, Form); var _this = _possibleConstructorReturn(this, (Form.__proto__ || Object.getPrototypeOf(Form)).call(this)); _this.onChange = _this.onChange.bind(_this); _this.onSubmit = _this.onSubmit.bind(_this); _this.formatBeforeSubmit = _this.formatBeforeSubmit.bind(_this); _this.state = { enableSubmit: false, error: false, errors: {} }; return _this; } _createClass(Form, [{ key: 'componentDidUpdate', value: function componentDidUpdate() { var _state = this.state, enableSubmit = _state.enableSubmit, error = _state.error; var values = this.formatBeforeSubmit(this.state); var errors = (0, _checkChildren2.default)(this.props.children, values); error = (0, _hasErrors2.default)(errors); if (!enableSubmit && !error) { this.setState({ enableSubmit: true }); } else if (enableSubmit && error) { this.setState({ enableSubmit: false, error: error }); } } }, { key: 'onChange', value: function onChange(e, childrenProps) { this.setState(_defineProperty({ error: false, errors: _extends({}, this.state.errors, _defineProperty({}, childrenProps.name, '')) }, e.target.name, e.target.value)); } }, { key: 'formatBeforeSubmit', value: function formatBeforeSubmit(values) { if (this.props.formatBeforeSubmit) { return values = this.props.formatBeforeSubmit(values); } else { return values; } } }, { key: 'onSubmit', value: function onSubmit(e) { e.preventDefault(); var values = this.formatBeforeSubmit(this.state); var errors = (0, _checkChildren2.default)(this.props.children, values); var error = (0, _hasErrors2.default)(errors); if (error) { this.setState({ errors: errors }); } else { var dataToSumit = _lodash2.default.omit(this.state, ['enableSubmit', 'error', 'errors']); this.props.onSubmit(_extends({}, dataToSumit, { success: true })); } } }, { key: 'render', value: function render() { var _state2 = this.state, enableSubmit = _state2.enableSubmit, error = _state2.error, errors = _state2.errors; var _props = this.props, method = _props.method, autoComplete = _props.autoComplete, classNameBasis = _props.classNameBasis, button = _props.button, lng = _props.lng; var classNames = (0, _classNames2.default)(classNameBasis); return _react2.default.createElement( 'form', { method: method, autoComplete: autoComplete, onSubmit: this.onSubmit, className: classNames.form, noValidate: true }, (0, _passPropsToChildren2.default)({ lng: lng, values: this.state, errors: errors, classNames: classNames, children: this.props.children, onChange: this.onChange }), _react2.default.createElement(_Button2.default, { active: enableSubmit, classNames: classNames, text: button }), error ? _react2.default.createElement(_Error2.default, { classNames: classNames, text: 'Something went wrong. Please check your informations.' }) : _react2.default.createElement('div', null) ); } }]); return Form; }(_react.Component); Form.propTypes = { method: _propTypes2.default.string.isRequired, autoComplete: _propTypes2.default.string.isRequired, classNameBasis: _propTypes2.default.string, button: _propTypes2.default.string.isRequired, onSubmit: _propTypes2.default.func.isRequired, width: _propTypes2.default.string.isRequired, lng: _propTypes2.default.string.isRequired }; Form.defaultProps = { autoComplete: 'on', method: 'post', button: 'submit', width: '100%', lng: 'EN' }; exports.Form = Form;