UNPKG

shineout

Version:

Shein 前端组件库

263 lines (210 loc) 8.18 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.loopConsumer = exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _context = _interopRequireDefault(require("../context")); var _component = require("../component"); var _types = require("../Datum/types"); var _validate = _interopRequireDefault(require("../utils/validate")); var _uid = require("../utils/uid"); var _numbers = require("../utils/numbers"); var _errors = require("../utils/errors"); var _FieldError = _interopRequireDefault(require("./FieldError")); var _createReactContext = (0, _context.default)(), Provider = _createReactContext.Provider, Consumer = _createReactContext.Consumer; var Tag = _react.default.Fragment ? _react.default.Fragment : 'span'; var Loop = /*#__PURE__*/ function (_PureComponent) { (0, _inheritsLoose2.default)(Loop, _PureComponent); function Loop(props) { var _this; _this = _PureComponent.call(this, props) || this; _this.contextValue = { bind: _this.bindValidate.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))), unbind: _this.unbindValidate.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))) }; _this.validate = _this.validate.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); _this.selfValidate = _this.selfValidate.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); _this.update = _this.forceUpdate.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); _this.validations = [_this.selfValidate]; _this.keys = []; console.warn('Form.Loop is not recommend. Use Form.FieldSet instead.'); return _this; } var _proto = Loop.prototype; _proto.componentDidMount = function componentDidMount() { _PureComponent.prototype.componentDidMount.call(this); var _this$props = this.props, formDatum = _this$props.formDatum, name = _this$props.name, defaultValue = _this$props.defaultValue; formDatum.bind(name, this.handleUpdate.bind(this), defaultValue, this.validate); }; _proto.componentWillUnmount = function componentWillUnmount() { _PureComponent.prototype.componentWillUnmount.call(this); var _this$props2 = this.props, formDatum = _this$props2.formDatum, name = _this$props2.name; if (formDatum && name) { formDatum.unbind(name, this.handleUpdate); } }; _proto.bindValidate = function bindValidate(val) { if (this.validations.indexOf(val) < 0) { this.validations.unshift(val); } }; _proto.unbindValidate = function unbindValidate(val) { this.validations = this.validations.filter(function (v) { return v !== val; }); }; _proto.selfValidate = function selfValidate() { var _this$props3 = this.props, formDatum = _this$props3.formDatum, name = _this$props3.name; var value = formDatum.get(name); var data = formDatum.getValue(); var rules = [].concat(this.props.rules); rules = rules.concat(formDatum.getRule(name)); return (0, _validate.default)(value, data, rules, 'array').then(function () { formDatum.setError(name, []); return true; }, function (e) { formDatum.setError(name, e); return (0, _errors.wrapFormError)(e); }); }; _proto.updateWithValidate = function updateWithValidate() { this.selfValidate().then(this.update); }; _proto.validate = function validate(type) { // old api var value = type === _types.FORCE_PASS ? _types.FORCE_PASS : undefined; return (0, _errors.promiseAll)(this.validations.map(function (v) { return v(value, undefined); })); }; _proto.handleUpdate = function handleUpdate(_, sn, type) { if (type === _types.ERROR_TYPE || type === _types.IGNORE_VALIDATE) { this.update(); } else if (type === _types.FORCE_PASS) { this.validate(_types.FORCE_PASS); } else { this.selfValidate().then(this.update).catch(function () {}); } }; _proto.handleChange = function handleChange(index, value, fullSet) { var _this$props4 = this.props, formDatum = _this$props4.formDatum, name = _this$props4.name; if (fullSet) { formDatum.set(name, value); return; } var values = formDatum.get(name); if (!values) return; values[index] = value; formDatum.set(name, [].concat(values)); }; _proto.handleInsert = function handleInsert(index, value) { this.keys.splice(index, 0, (0, _uid.getUidStr)()); var _this$props5 = this.props, formDatum = _this$props5.formDatum, name = _this$props5.name; formDatum.insert(name, index, value); this.updateWithValidate(); }; _proto.handleRemove = function handleRemove(index) { this.keys.splice(index, 1); var _this$props6 = this.props, formDatum = _this$props6.formDatum, name = _this$props6.name; formDatum.splice(name, index); this.updateWithValidate(); }; _proto.render = function render() { var _this2 = this; var _this$props7 = this.props, children = _this$props7.children, empty = _this$props7.empty, formDatum = _this$props7.formDatum, name = _this$props7.name, defaultValue = _this$props7.defaultValue; var values = formDatum.get(name) || defaultValue; var error = formDatum.getError(name); if (values.length === 0 && empty) { return empty(this.handleInsert.bind(this, 0)); } (0, _numbers.range)(values.length, 0).forEach(function (i) { if (!_this2.keys[i]) _this2.keys[i] = (0, _uid.getUidStr)(); }); var errorList = Array.isArray(error) ? error : []; var results = values.map(function (value, index) { return _react.default.createElement(Tag, { key: _this2.keys[index] }, children({ list: values, value: value, index: index, error: errorList[index], onChange: _this2.handleChange.bind(_this2, index), onInsert: _this2.handleInsert.bind(_this2, index), onAppend: _this2.handleInsert.bind(_this2, index + 1), onRemove: _this2.handleRemove.bind(_this2, index) })); }); if (error instanceof Error) { results.push(_react.default.createElement(_FieldError.default, { key: "error", error: error })); } return _react.default.createElement(Provider, { value: this.contextValue }, results); }; return Loop; }(_component.PureComponent); exports.default = Loop; Loop.propTypes = { children: _propTypes.default.func.isRequired, defaultValue: _propTypes.default.array, empty: _propTypes.default.func, formDatum: _propTypes.default.object.isRequired, name: _propTypes.default.string, rules: _propTypes.default.array }; Loop.defaultProps = { defaultValue: [], rules: [] // eslint-disable-next-line }; var loopConsumer = function loopConsumer(Origin) { return ( /*#__PURE__*/ function (_PureComponent2) { (0, _inheritsLoose2.default)(_class, _PureComponent2); function _class() { return _PureComponent2.apply(this, arguments) || this; } var _proto2 = _class.prototype; _proto2.render = function render() { var _this3 = this; return _react.default.createElement(Consumer, null, function (value) { return _react.default.createElement(Origin, (0, _extends2.default)({}, _this3.props, { loopContext: value })); }); }; return _class; }(_component.PureComponent) ); }; exports.loopConsumer = loopConsumer;