UNPKG

es6-react-admin-lte

Version:

An AdminLTE Template made to use as React components.

389 lines (340 loc) 16.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _react = _interopRequireDefault(require("react")); var _loadStatus = _interopRequireDefault(require("../utilities/load-status")); var _select = _interopRequireDefault(require("./pieces/select")); var _propTypes = _interopRequireDefault(require("prop-types")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a 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); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } var Form = /*#__PURE__*/function (_React$Component) { _inherits(Form, _React$Component); var _super = _createSuper(Form); function Form(props) { var _this; _classCallCheck(this, Form); _this = _super.call(this, props); _this.state = { data: _this.props.data }; _this.loadForm = _this.loadForm.bind(_assertThisInitialized(_this)); _this.changeHandler = _this.changeHandler.bind(_assertThisInitialized(_this)); _this.clickHandler = _this.clickHandler.bind(_assertThisInitialized(_this)); _this.convertToDataType = _this.convertToDataType.bind(_assertThisInitialized(_this)); return _this; } _createClass(Form, [{ key: "componentWillReceiveProps", value: function componentWillReceiveProps(nextProps) { this.setState({ data: nextProps.data }); } }, { key: "loadForm", value: function loadForm() { var _this2 = this; return this.props.fields.map(function (field, i) { var required = field.required || false; var disabled = field.disabled || false; var fieldVal = _this2.state.data && _this2.state.data[field.id.replace(/-/g, '_')] !== null ? _this2.state.data[field.id.replace(/-/g, '_')] : ''; var fieldElement; switch (field.type) { case 'uncertain-radio': fieldElement = /*#__PURE__*/_react["default"].createElement("div", { id: field.id, className: "row" }, /*#__PURE__*/_react["default"].createElement("div", { className: "col-xs-4 col-sm-3" }, /*#__PURE__*/_react["default"].createElement("input", { type: "radio", className: "form-check-input", name: field.id, value: 0, checked: fieldVal !== null && fieldVal !== undefined ? Number(fieldVal) === 0 : true, onChange: _this2.changeHandler, required: required, disabled: field.disabled }), "\xA0Undecided"), /*#__PURE__*/_react["default"].createElement("div", { className: "col-xs-4 col-sm-3 col-md-2" }, /*#__PURE__*/_react["default"].createElement("input", { type: "radio", className: "form-check-input", name: field.id, value: 1, checked: Number(fieldVal) === 1, onChange: _this2.changeHandler, required: required, disabled: field.disabled }), "\xA0Yes"), /*#__PURE__*/_react["default"].createElement("div", { className: "col-xs-4 col-sm-3 col-md-2" }, /*#__PURE__*/_react["default"].createElement("input", { type: "radio", className: "form-check-input", name: field.id, value: -1, checked: Number(fieldVal) === -1, onChange: _this2.changeHandler, required: required, disabled: field.disabled }), "\xA0No")); break; case 'certain-radio': fieldElement = /*#__PURE__*/_react["default"].createElement("div", { id: field.id, className: "row" }, /*#__PURE__*/_react["default"].createElement("div", { className: "col-xs-4 col-sm-3 col-md-2" }, /*#__PURE__*/_react["default"].createElement("input", { type: "radio", className: "form-check-input", name: field.id, value: 1, checked: Number(fieldVal) === 1, onChange: _this2.changeHandler, required: required, disabled: field.disabled }), "\xA0Yes"), /*#__PURE__*/_react["default"].createElement("div", { className: "col-xs-4 col-sm-3 col-md-2" }, /*#__PURE__*/_react["default"].createElement("input", { type: "radio", className: "form-check-input", name: field.id, value: 0, checked: fieldVal !== null && fieldVal !== undefined ? Number(fieldVal) === 0 : true, onChange: _this2.changeHandler, required: required, disabled: field.disabled }), "\xA0No")); break; case 'textarea': fieldElement = /*#__PURE__*/_react["default"].createElement("textarea", { className: "form-control", id: field.id, name: field.id, onChange: _this2.changeHandler, required: required, value: fieldVal, placeholder: field.placeholder || null, disabled: field.disabled }); break; case 'number': fieldElement = /*#__PURE__*/_react["default"].createElement("input", { className: "form-control", type: field.type, id: field.id, name: field.id, value: fieldVal, onChange: _this2.changeHandler, required: required, min: field.min || 0, placeholder: field.placeholder || null, disabled: field.disabled }); break; case 'checkbox': fieldElement = /*#__PURE__*/_react["default"].createElement("input", { className: "form-check-input", style: { marginLeft: '1em' }, type: field.type, id: field.id, name: field.id, checked: fieldVal, onChange: _this2.changeHandler, required: required, min: field.min || 0, disabled: field.disabled }); break; case 'dropdown': fieldElement = /*#__PURE__*/_react["default"].createElement(_select["default"], { id: field.id, options: field.options, error: field.error, loading: field.loading, emptyValue: field.name, value: Boolean(fieldVal) ? fieldVal : field.name, onChange: _this2.changeHandler, required: required, disabled: disabled, valueProperty: field.valueProperty, displayProperty: field.displayProperty }); break; default: fieldElement = /*#__PURE__*/_react["default"].createElement("input", { className: "form-control", type: field.type, id: field.id, name: field.id, value: fieldVal, onChange: _this2.changeHandler, required: required, placeholder: field.placeholder || null, "data-confirms": field.confirms || null, disabled: field.disabled }); break; } return /*#__PURE__*/_react["default"].createElement("div", { className: "form-group".concat(field.hidden ? ' hidden' : ''), key: i, style: { clear: 'both' } }, /*#__PURE__*/_react["default"].createElement("label", { htmlFor: field.id, style: { color: '#848484' } }, field.name), fieldElement); }); } }, { key: "convertToDataType", value: function convertToDataType(data, toType) { switch (toType) { case 'number': return Number(data); case 'boolean': return Boolean(data); case 'binary': return Boolean(data) === true ? 1 : 0; case 'object': return _typeof(data) === 'object' ? data : JSON.parse(data); default: return _typeof(data) === 'object' ? JSON.stringify(data) : "".concat(data); } } }, { key: "clickHandler", value: function clickHandler(e) { var _this3 = this; e.preventDefault(); var submitData = this.state.data; for (var i = 0; i < this.props.fields.length; i++) { if (this.props.fields[i].id.indexOf('ignore-') >= 0) { delete submitData[this.props.fields[i].id.replace(/-/g, '_')]; } } var requiredErrs = this.props.fields.filter(function (field) { return field.required && !submitData[field.id.replace(/-/g, '_')]; }).map(function (reqfield) { return reqfield.name; }); var confirmErrs = this.props.fields.filter(function (field) { var confirms = field.confirms !== null && field.confirms !== undefined && field.confirms !== ''; var matchesCounterpart = true; if (confirms) { matchesCounterpart = submitData[field.confirms.replace(/-/g, '_')] === submitData[field.id.replace(/-/g, '_')]; } return confirms && !matchesCounterpart; }).map(function (reqfield) { var shouldMatch = _this3.props.fields.find(function (field) { return field.id === reqfield.confirms; }); return "'".concat(reqfield.name, "' & '").concat(shouldMatch.name, "' do not match."); }); var _loop = function _loop(dp) { if (Object.prototype.hasOwnProperty.call(submitData, dp)) { var dataType = _this3.props.fields.filter(function (field) { return field.id === dp.replace(/_/g, '-'); }); if (dataType[0] !== undefined && dataType[0] !== null) { submitData[dp] = submitData[dp] === null || submitData[dp] === undefined || submitData[dp] === '' ? null : _this3.convertToDataType(submitData[dp], dataType[0].validate ? dataType[0].validate : ''); } } }; for (var dp in submitData) { _loop(dp); } this.props.clickHandler(submitData, requiredErrs, confirmErrs); } }, { key: "changeHandler", value: function changeHandler(e) { var formData = this.state.data; var value = e.currentTarget.type !== 'checkbox' ? e.currentTarget.value : e.currentTarget.checked; var fieldId = Boolean(e.currentTarget.id) ? e.currentTarget.id.replace(/-/g, '_') : e.currentTarget.name.replace(/-/g, '_'); var fieldDetails = this.props.fields.filter(function (field) { return field.id === fieldId.replace(/_/g, '-'); }); var isString = fieldDetails[0].validate === 'string' && typeof value === 'string'; var isNum = fieldDetails[0].validate === 'number' && !isNaN(value); var isBool = (fieldDetails[0].validate === 'boolean' || fieldDetails[0].validate === 'binary') && (value === true || value === false || value === 'true' || value === 'false' || value === 0 || value === 1); if (isString || isNum || isBool) { formData[fieldId] = value; this.setState({ data: formData }); } } }, { key: "render", value: function render() { // A field object in the fields prop takes 6 properties (*required): // *id, name, *type, required, validate // Otherwise you can place children to fill the form; or both! var fields = this.props.fields ? this.loadForm() : ''; return /*#__PURE__*/_react["default"].createElement("form", { role: "form", id: this.props.id, noValidate: true }, /*#__PURE__*/_react["default"].createElement("div", { className: "box-body" }, !this.props.loading ? /*#__PURE__*/_react["default"].createElement("div", null, fields, this.props.children, /*#__PURE__*/_react["default"].createElement("div", { className: "text-right" }, this.props.moreButtons, this.props.hideMainButton ? '' : /*#__PURE__*/_react["default"].createElement("button", { id: "btn-modder", className: "btn ".concat(this.props.submitTheme || 'btn-success'), onClick: this.clickHandler, style: { margin: '0 0 0 1em' } }, this.props.submitIcon ? /*#__PURE__*/_react["default"].createElement("i", { className: "fa ".concat(this.props.submitIcon) }) : '', this.props.submitIcon && this.props.submitHeader ? /*#__PURE__*/_react["default"].createElement("span", null, "\xA0") : '', this.props.submitHeader || 'Submit'))) : /*#__PURE__*/_react["default"].createElement("div", { className: "text-center" }, /*#__PURE__*/_react["default"].createElement(_loadStatus["default"], { size: "3em", color: "#848484", spins: true })))); } }]); return Form; }(_react["default"].Component); Form.propTypes = { loading: _propTypes["default"].bool, id: _propTypes["default"].string, fields: _propTypes["default"].array, data: _propTypes["default"].object, clickHandler: _propTypes["default"].func, submitIcon: _propTypes["default"].string, submitHeader: _propTypes["default"].string, submitTheme: _propTypes["default"].string, hideMainButton: _propTypes["default"].bool, moreButtons: _propTypes["default"].oneOfType([_propTypes["default"].array, _propTypes["default"].element]) }; Form.defaultProps = { hideMainButton: false }; var _default = Form; exports["default"] = _default; module.exports = exports.default; //# sourceMappingURL=form.js.map