@formily/core
Version:
English | [简体中文](./README.zh-cn.md)
241 lines (240 loc) • 9.78 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
var model_1 = require("../shared/model");
var shared_1 = require("@formily/shared");
exports.FieldState = model_1.createStateModel((_a = (function () {
function FieldState(state, props) {
this.state = state;
this.nodePath = shared_1.FormPath.getPath(props.nodePath);
this.dataPath = shared_1.FormPath.getPath(props.dataPath);
this.state.name = this.dataPath.entire;
this.state.path = this.nodePath.entire;
this.state.dataType = props.dataType || 'any';
}
FieldState.prototype.readValues = function (_a) {
var value = _a.value, values = _a.values;
if (shared_1.isValid(values)) {
values = shared_1.toArr(values);
values[0] = value;
}
else {
if (shared_1.isValid(value)) {
values = shared_1.toArr(value);
}
}
values = shared_1.toArr(values);
if (/array/gi.test(this.state.dataType)) {
value = shared_1.toArr(value);
values[0] = shared_1.toArr(values[0]);
}
return {
value: value,
values: values
};
};
FieldState.prototype.readRequired = function (rules) {
for (var i = 0; i < rules.length; i++) {
if (shared_1.isValid(rules[i].required)) {
return rules[i].required;
}
}
};
FieldState.prototype.syncRulesByRequired = function (rules, required) {
if (shared_1.isValid(required)) {
if (rules.length) {
if (!rules.some(function (rule) { return rule && shared_1.isValid(rule.required); })) {
rules.push({ required: required });
}
else {
rules = rules.reduce(function (buf, item) {
var keys = Object.keys(item || {});
if (shared_1.isValid(item.required)) {
if (shared_1.isValid(item.message)) {
if (keys.length > 2) {
return buf.concat(__assign(__assign({}, item), { required: required }));
}
}
else {
if (keys.length > 1) {
return buf.concat(__assign(__assign({}, item), { required: required }));
}
}
}
if (shared_1.isValid(item.required)) {
return buf.concat(__assign(__assign({}, item), { required: required }));
}
return buf.concat(item);
}, []);
}
}
else {
if (required === true) {
rules.push({
required: required
});
}
}
}
return rules;
};
FieldState.prototype.readRules = function (_a, prevState) {
var rules = _a.rules, required = _a.required;
var newRules = shared_1.isValid(rules) ? shared_1.toArr(rules) : this.state.rules;
var newRequired = shared_1.isValid(required) ? required : false;
var currentRuleRequired = this.readRequired(newRules);
var prevRuleRequired = this.readRequired(prevState.rules);
var ruleRequiredChanged = currentRuleRequired !== prevRuleRequired;
var requiredChanged = !shared_1.isEqual(required, prevState.required);
if (ruleRequiredChanged && !requiredChanged) {
if (shared_1.isValid(currentRuleRequired)) {
newRequired = currentRuleRequired;
}
}
else if (requiredChanged && !ruleRequiredChanged) {
newRules = this.syncRulesByRequired(newRules, newRequired);
}
else if (ruleRequiredChanged && requiredChanged) {
if (shared_1.isValid(currentRuleRequired)) {
newRequired = currentRuleRequired;
}
}
else {
newRules = this.syncRulesByRequired(newRules, newRequired);
}
return {
rules: newRules,
required: newRequired
};
};
FieldState.prototype.computeState = function (draft, prevState) {
if (!shared_1.isEqual(draft.errors, prevState.errors)) {
draft.effectErrors = draft.errors;
}
if (!shared_1.isEqual(draft.warnings, prevState.warnings)) {
draft.effectWarnings = draft.warnings;
}
draft.rules = shared_1.toArr(draft.rules).filter(function (v) { return !!v; });
draft.effectWarnings = shared_1.toArr(draft.effectWarnings).filter(function (v) { return !!v; });
draft.effectErrors = shared_1.toArr(draft.effectErrors).filter(function (v) { return !!v; });
draft.ruleWarnings = shared_1.toArr(draft.ruleWarnings).filter(function (v) { return !!v; });
draft.ruleErrors = shared_1.toArr(draft.ruleErrors).filter(function (v) { return !!v; });
draft.errors = draft.ruleErrors.concat(draft.effectErrors);
draft.warnings = draft.ruleWarnings.concat(draft.effectWarnings);
if (!shared_1.isEqual(draft.editable, prevState.editable)) {
draft.selfEditable = draft.editable;
}
draft.editable = shared_1.isValid(draft.selfEditable)
? draft.selfEditable
: shared_1.isValid(draft.formEditable)
? shared_1.isFn(draft.formEditable)
? draft.formEditable(draft.name)
: draft.formEditable
: true;
var _a = this.readValues(draft), value = _a.value, values = _a.values;
draft.value = value;
draft.values = values;
if (draft.initialized && prevState.initialized && !draft.modified) {
if (!shared_1.isEqual(prevState.value, draft.value)) {
draft.modified = true;
}
}
if (shared_1.isEqual(draft.initialValue, draft.value)) {
draft.pristine = true;
}
else {
draft.pristine = false;
}
if (!shared_1.isValid(draft.props)) {
draft.props = prevState.props;
}
if (draft.validating !== prevState.validating) {
if (draft.validating === true) {
draft.loading = true;
}
else if (draft.validating === false) {
draft.loading = false;
}
}
if ((draft.selfEditable !== prevState.selfEditable &&
!draft.selfEditable) ||
draft.visible === false ||
draft.unmounted === true) {
draft.errors = [];
draft.effectErrors = [];
draft.warnings = [];
draft.effectWarnings = [];
}
if (draft.mounted === true && draft.mounted !== prevState.mounted) {
draft.unmounted = false;
}
if (draft.unmounted === true && draft.unmounted !== prevState.unmounted) {
draft.mounted = false;
}
if (draft.errors.length) {
draft.invalid = true;
draft.valid = false;
}
else {
draft.invalid = false;
draft.valid = true;
}
var _b = this.readRules(draft, prevState), rules = _b.rules, required = _b.required;
draft.rules = rules;
draft.required = required;
};
return FieldState;
}()),
_a.displayName = 'FieldState',
_a.defaultState = {
name: '',
path: '',
dataType: 'any',
initialized: false,
pristine: true,
valid: true,
modified: false,
touched: false,
active: false,
visited: false,
invalid: false,
visible: true,
display: true,
loading: false,
validating: false,
errors: [],
values: [],
ruleErrors: [],
ruleWarnings: [],
effectErrors: [],
warnings: [],
effectWarnings: [],
editable: true,
selfEditable: undefined,
formEditable: undefined,
value: undefined,
visibleCacheValue: undefined,
initialValue: undefined,
rules: [],
required: false,
mounted: false,
unmounted: false,
unmountRemoveValue: true,
props: {}
},
_a.defaultProps = {
path: '',
dataType: 'any'
},
_a));