es6-react-admin-lte
Version:
An AdminLTE Template made to use as React components.
389 lines (340 loc) • 16.9 kB
JavaScript
"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