UNPKG

@formily/core

Version:

English | [简体中文](./README.zh-cn.md)

241 lines (240 loc) 9.78 kB
"use strict"; 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));