UNPKG

nornj-react

Version:

React bindings for NornJ template engine.

374 lines (306 loc) 14.9 kB
"use strict"; function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", { value: true }); exports.useFormData = useFormData; var _react = _interopRequireWildcard(require("react")); var _nornj = _interopRequireWildcard(require("nornj")); var _mobx = require("mobx"); var _asyncValidator = _interopRequireDefault(require("async-validator")); var _extensionConfig = _interopRequireDefault(require("../../../mobx/formData/extensionConfig")); var _moment = _interopRequireDefault(require("moment")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } 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; } var createFormData = function createFormData(options) { return { _njMobxFormData: true, fieldDatas: new Map(), _operate: function _operate(name, callback, callbackMulti, callbackMultiReturn) { if (typeof name === 'string') { return callback(name); } else { var names = Array.isArray(name) ? name : []; this.fieldDatas.forEach(function (fieldData, name) { (!names.length || names.indexOf(name) > -1) && (callbackMulti || callback)(name); }); if (callbackMultiReturn) { return callbackMultiReturn(names); } } }, _validate: function _validate(name) { var _this = this; var oFd = this.fieldDatas.get(name); var value = this[name]; return new Promise(function (resolve, reject) { oFd.validatorSchema.validate(_defineProperty({}, name, value), {}, function (errors, fields) { if (errors) { var _errors$; _this.error(name, errors === null || errors === void 0 ? void 0 : (_errors$ = errors[0]) === null || _errors$ === void 0 ? void 0 : _errors$.message); reject({ values: _defineProperty({}, name, value), errors: errors, fields: fields }); } else { _this.clear(name, true); resolve(_defineProperty({}, name, value)); } }); }); }, validate: function validate(names) { var _this2 = this; var validators = []; return this._operate(names, function (name) { return _this2._validate(name); }, function (name) { return validators.push(_this2._validate(name)); }, function () { return new Promise(function (resolve, reject) { Promise.all(validators).then(function (values) { return resolve(Object.assign.apply(Object, [{}].concat(_toConsumableArray(values)))); })["catch"](function (errorInfo) { return reject(errorInfo); }); }); }); }, error: function error(name, help) { var oFd = this.fieldDatas.get(name); oFd.validateStatus = 'error'; oFd.help = help; }, _clear: function _clear(name, success) { var oFd = this.fieldDatas.get(name); oFd.validateStatus = success ? 'success' : null; oFd.help = null; }, clear: function clear(names, success) { var _this3 = this; return this._operate(names, function (name) { return _this3._clear(name, success); }); }, _reset: function _reset(name) { this.clear(name); var oFd = this.fieldDatas.get(name); oFd.reset(); }, reset: function reset(names) { var _this4 = this; return this._operate(names, function (name) { return _this4._reset(name); }); }, add: function add(fieldData) { var _this5 = this; var name = fieldData.name, value = fieldData.value, _fieldData$trigger = fieldData.trigger, trigger = _fieldData$trigger === void 0 ? 'valueChange' : _fieldData$trigger, rules = fieldData.rules, ruleOptions = _objectWithoutProperties(fieldData, ["name", "value", "trigger", "rules"]); var fd = _objectSpread({ name: name, value: value, trigger: trigger, rules: rules }, ruleOptions); var _rules = rules ? rules : [ruleOptions]; fd.rules = _rules.map(function (rule, i) { var oRule = (0, _mobx.observable)(rule); (0, _mobx.observe)(oRule, function (change) { var schemaRules = fd.validatorSchema.rules[name]; Object.assign(schemaRules[i], oRule); }); return oRule; }); fd.setDefaultRule = function (rule) { var schemaRules = fd.validatorSchema.rules[name]; _rules.forEach(function (r, i) { if (r.type == null) { schemaRules[i].type = rule.type; } }); }; fd.validatorSchema = new _asyncValidator["default"](_defineProperty({}, name, _rules.map(function (_ref) { var _ref$type = _ref.type, type = _ref$type === void 0 ? 'string' : _ref$type, _ref$required = _ref.required, required = _ref$required === void 0 ? false : _ref$required, _transform = _ref.transform, others = _objectWithoutProperties(_ref, ["type", "required", "transform"]); return _objectSpread({ type: type, required: required, transform: function transform(_value) { var _value2; switch (this.type) { case 'number': case 'integer': case 'float': _value = _nornj["default"].isString(_value) && ((_value2 = _value) === null || _value2 === void 0 ? void 0 : _value2.trim()) !== '' && !isNaN(_value) ? +_value : _value; break; case 'date': if (_moment["default"].isMoment(_value)) { _value = _value.toDate(); } break; } return _transform ? _transform(_value) : _value; } }, others); }))); fd.reset = function () { if (this.value !== value) { this._resetting = true; } this.value = value; }; var oFd = (0, _mobx.observable)(fd); this.fieldDatas.set(name, oFd); if (options === null || options === void 0 ? void 0 : options.validateMessages) { var validateMessages = options.validateMessages; fd.validatorSchema.messages(typeof validateMessages === 'function' ? validateMessages(oFd) : validateMessages); } !(0, _mobx.isComputedProp)(this, name) && (0, _mobx.extendObservable)(this, Object.defineProperty({}, name, { get: function get() { var _this$fieldDatas$get; return (_this$fieldDatas$get = this.fieldDatas.get(name)) === null || _this$fieldDatas$get === void 0 ? void 0 : _this$fieldDatas$get.value; }, set: function set(value) { this.setValue(name, value); }, enumerable: true, configurable: true })); if (trigger === 'valueChange') { oFd._reactionDispose = (0, _mobx.reaction)(function () { return Array.isArray(_this5[name]) ? _this5[name].map(function (item) { return item; }) : _this5[name]; }, function () { if (!oFd._resetting) { _this5.validate(name)["catch"](_nornj["default"].noop); } oFd._resetting = false; }); } }, "delete": function _delete(name) { var oFd = this.fieldDatas.get(name); oFd === null || oFd === void 0 ? void 0 : oFd._reactionDispose(); this.fieldDatas["delete"](name); }, setValue: function setValue(name, value) { var _this6 = this; (0, _mobx.runInAction)(function () { if (typeof name === 'string') { var fieldData = _this6.fieldDatas.get(name); if (fieldData) { fieldData.value = value; } } else { _this6.fieldDatas.forEach(function (fieldData, fieldName) { if (fieldName in name) { fieldData.value = name[fieldName]; } }); } }); }, get formData() { return this; } }; }; function getChildrenWithoutFragment(children) { var actualChildren = []; children.forEach(function (child) { if (!(0, _react.isValidElement)(child) || child.type !== _react.Fragment) { if (Array.isArray(child)) { var _getChildrenWithoutFr; (_getChildrenWithoutFr = getChildrenWithoutFragment(child)) === null || _getChildrenWithoutFr === void 0 ? void 0 : _getChildrenWithoutFr.forEach(function (child) { return actualChildren.push(child); }); } else { actualChildren.push(child); } } else { var _getChildrenWithoutFr2, _ref3; (_getChildrenWithoutFr2 = getChildrenWithoutFragment((_ref3 = child === null || child === void 0 ? void 0 : child.props) === null || _ref3 === void 0 ? void 0 : _ref3.children)) === null || _getChildrenWithoutFr2 === void 0 ? void 0 : _getChildrenWithoutFr2.forEach(function (child) { return actualChildren.push(child); }); } }); return actualChildren; } (0, _nornj.registerExtension)('mobxFormData', function (options) { var children = options.children; var props = options.props; var _children = children(); if (!Array.isArray(_children)) { _children = [_children]; } var formData = createFormData(props); getChildrenWithoutFragment(_children).forEach(function (fieldData) { fieldData && formData.add(fieldData); }); return (props === null || props === void 0 ? void 0 : props.observable) ? (0, _mobx.observable)(formData) : formData; }, _extensionConfig["default"].mobxFormData); (0, _nornj.registerExtension)('mobxFieldData', function (options) { return options.props; }, _extensionConfig["default"].mobxFieldData); (0, _nornj.registerExtension)('mobxField', function (options) { var value = options.value, tagProps = options.tagProps; var _value = value(); var prop = _value.prop, source = _value.source; var fieldNames = Array.isArray(prop) ? prop : [prop]; var validateStatus = null; var help = []; fieldNames.forEach(function (fieldName) { var oFd = source.fieldDatas.get(fieldName); if (validateStatus == null && oFd.validateStatus != null) { validateStatus = oFd.validateStatus; } if (oFd.help != null) { help.push(_react["default"].createElement("div", { key: help.length }, oFd.help)); } if (tagProps.required == null) { tagProps.required = oFd.rules.find(function (rule) { return rule.required; }); } if (tagProps.label) { oFd.label = tagProps.label; } else if (oFd.label) { tagProps.label = oFd.label; } }); tagProps.validateStatus = validateStatus; if (help.length) { tagProps.help = _react["default"].createElement(_react["default"].Fragment, null, help); } }, _extensionConfig["default"].mobxField); function useFormData(formDataElement) { var deps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; return (0, _react.useMemo)(function () { return (0, _nornj.as)((0, _mobx.observable)(formDataElement())); }, deps); }