shineout
Version:
Shein 前端组件库
103 lines (88 loc) • 3.24 kB
JavaScript
import _extends from "@babel/runtime/helpers/extends";
import _inheritsLoose from "@babel/runtime/helpers/inheritsLoose";
import _assertThisInitialized from "@babel/runtime/helpers/assertThisInitialized";
import React, { PureComponent } from 'react';
import createReactContext from '../context';
import { deepGet } from '../utils/objects';
import { isObject, isArray } from '../utils/is';
import { curry3 } from '../utils/func'; // 去掉独有的属性
var context = createReactContext({}); // eslint-disable-next-line
export var Provider = context.Provider; // eslint-disable-next-line
export var Consumer = context.Consumer;
export var formProvider = function formProvider(Origin) {
var FormProvider =
/*#__PURE__*/
function (_PureComponent) {
_inheritsLoose(FormProvider, _PureComponent);
function FormProvider(props) {
var _this;
_this = _PureComponent.call(this, props) || this;
_this.combineRules = _this.combineRules.bind(_assertThisInitialized(_assertThisInitialized(_this))); // this.groupValidate = this.groupValidate.bind(this)
return _this;
}
var _proto = FormProvider.prototype;
_proto.combineRules = function combineRules(name, propRules) {
var rules = this.props.rules;
var newRules = [];
if (isObject(rules) && name) {
newRules = deepGet(rules, name) || [];
} else if (isArray(rules)) {
newRules = rules;
}
if (isArray(propRules)) {
newRules = newRules.concat(propRules);
}
return newRules;
} // groupValidate(name) {
// not implement...
// }
;
_proto.render = function render() {
var _this$props = this.props,
datum = _this$props.datum,
labelAlign = _this$props.labelAlign,
labelVerticalAlign = _this$props.labelVerticalAlign,
labelWidth = _this$props.labelWidth,
disabled = _this$props.disabled,
pending = _this$props.pending,
mode = _this$props.mode,
size = _this$props.size,
keepErrorHeight = _this$props.keepErrorHeight;
var value = {
formDatum: datum,
formMode: mode,
disabled: !!(disabled || pending),
labelAlign: labelAlign,
labelVerticalAlign: labelVerticalAlign,
labelWidth: labelWidth,
size: size,
combineRules: this.combineRules,
// groupValidate: this.groupValidate,
keepErrorHeight: keepErrorHeight
};
return React.createElement(Provider, {
value: value
}, React.createElement(Origin, this.props));
};
return FormProvider;
}(PureComponent);
return FormProvider;
};
export var formConsumer = curry3(function (keys, Origin, props) {
var filterProps = function filterProps(value) {
var cps = {};
if (!value) return cps;
if (!keys) return value;
keys.forEach(function (k) {
var val = value[k];
if (val !== undefined) cps[k] = val;
});
return cps;
};
return React.createElement(Consumer, null, function (value) {
var formProps = filterProps(value);
return React.createElement(Origin, _extends({}, formProps, props, {
disabled: formProps.disabled || props.disabled
}));
});
});