2d249cbbc64dfcc32f2bf20a72cae60f.json 77.2 KB
{"ast":null,"code":"import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport * as React from 'react';\nimport warning from \"rc-util/es/warning\";\nimport { HOOK_MARK } from './FieldContext';\nimport { allPromiseFinish } from './utils/asyncUtil';\nimport NameMap from './utils/NameMap';\nimport { defaultValidateMessages } from './utils/messages';\nimport { cloneByNamePathList, containsNamePath, getNamePath, getValue, setValue, setValues } from './utils/valueUtil';\nexport var FormStore = function FormStore(forceRootUpdate) {\n  var _this = this;\n\n  _classCallCheck(this, FormStore);\n\n  this.formHooked = false;\n  this.subscribable = true;\n  this.store = {};\n  this.fieldEntities = [];\n  this.initialValues = {};\n  this.callbacks = {};\n  this.validateMessages = null;\n  this.preserve = null;\n  this.lastValidatePromise = null;\n\n  this.getForm = function () {\n    return {\n      getFieldValue: _this.getFieldValue,\n      getFieldsValue: _this.getFieldsValue,\n      getFieldError: _this.getFieldError,\n      getFieldsError: _this.getFieldsError,\n      isFieldsTouched: _this.isFieldsTouched,\n      isFieldTouched: _this.isFieldTouched,\n      isFieldValidating: _this.isFieldValidating,\n      isFieldsValidating: _this.isFieldsValidating,\n      resetFields: _this.resetFields,\n      setFields: _this.setFields,\n      setFieldsValue: _this.setFieldsValue,\n      validateFields: _this.validateFields,\n      submit: _this.submit,\n      getInternalHooks: _this.getInternalHooks\n    };\n  }; // ======================== Internal Hooks ========================\n\n\n  this.getInternalHooks = function (key) {\n    if (key === HOOK_MARK) {\n      _this.formHooked = true;\n      return {\n        dispatch: _this.dispatch,\n        initEntityValue: _this.initEntityValue,\n        registerField: _this.registerField,\n        useSubscribe: _this.useSubscribe,\n        setInitialValues: _this.setInitialValues,\n        setCallbacks: _this.setCallbacks,\n        setValidateMessages: _this.setValidateMessages,\n        getFields: _this.getFields,\n        setPreserve: _this.setPreserve\n      };\n    }\n\n    warning(false, '`getInternalHooks` is internal usage. Should not call directly.');\n    return null;\n  };\n\n  this.useSubscribe = function (subscribable) {\n    _this.subscribable = subscribable;\n  };\n  /**\n   * First time `setInitialValues` should update store with initial value\n   */\n\n\n  this.setInitialValues = function (initialValues, init) {\n    _this.initialValues = initialValues || {};\n\n    if (init) {\n      _this.store = setValues({}, initialValues, _this.store);\n    }\n  };\n\n  this.getInitialValue = function (namePath) {\n    return getValue(_this.initialValues, namePath);\n  };\n\n  this.setCallbacks = function (callbacks) {\n    _this.callbacks = callbacks;\n  };\n\n  this.setValidateMessages = function (validateMessages) {\n    _this.validateMessages = validateMessages;\n  };\n\n  this.setPreserve = function (preserve) {\n    _this.preserve = preserve;\n  }; // ========================== Dev Warning =========================\n\n\n  this.timeoutId = null;\n\n  this.warningUnhooked = function () {\n    if (process.env.NODE_ENV !== 'production' && !_this.timeoutId && typeof window !== 'undefined') {\n      _this.timeoutId = window.setTimeout(function () {\n        _this.timeoutId = null;\n\n        if (!_this.formHooked) {\n          warning(false, 'Instance created by `useForm` is not connected to any Form element. Forget to pass `form` prop?');\n        }\n      });\n    }\n  }; // ============================ Fields ============================\n\n  /**\n   * Get registered field entities.\n   * @param pure Only return field which has a `name`. Default: false\n   */\n\n\n  this.getFieldEntities = function () {\n    var pure = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n    if (!pure) {\n      return _this.fieldEntities;\n    }\n\n    return _this.fieldEntities.filter(function (field) {\n      return field.getNamePath().length;\n    });\n  };\n\n  this.getFieldsMap = function () {\n    var pure = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n    var cache = new NameMap();\n\n    _this.getFieldEntities(pure).forEach(function (field) {\n      var namePath = field.getNamePath();\n      cache.set(namePath, field);\n    });\n\n    return cache;\n  };\n\n  this.getFieldEntitiesForNamePathList = function (nameList) {\n    if (!nameList) {\n      return _this.getFieldEntities(true);\n    }\n\n    var cache = _this.getFieldsMap(true);\n\n    return nameList.map(function (name) {\n      var namePath = getNamePath(name);\n      return cache.get(namePath) || {\n        INVALIDATE_NAME_PATH: getNamePath(name)\n      };\n    });\n  };\n\n  this.getFieldsValue = function (nameList, filterFunc) {\n    _this.warningUnhooked();\n\n    if (nameList === true && !filterFunc) {\n      return _this.store;\n    }\n\n    var fieldEntities = _this.getFieldEntitiesForNamePathList(Array.isArray(nameList) ? nameList : null);\n\n    var filteredNameList = [];\n    fieldEntities.forEach(function (entity) {\n      var _entity$isListField;\n\n      var namePath = 'INVALIDATE_NAME_PATH' in entity ? entity.INVALIDATE_NAME_PATH : entity.getNamePath(); // Ignore when it's a list item and not specific the namePath,\n      // since parent field is already take in count\n\n      if (!nameList && ((_entity$isListField = entity.isListField) === null || _entity$isListField === void 0 ? void 0 : _entity$isListField.call(entity))) {\n        return;\n      }\n\n      if (!filterFunc) {\n        filteredNameList.push(namePath);\n      } else {\n        var meta = 'getMeta' in entity ? entity.getMeta() : null;\n\n        if (filterFunc(meta)) {\n          filteredNameList.push(namePath);\n        }\n      }\n    });\n    return cloneByNamePathList(_this.store, filteredNameList.map(getNamePath));\n  };\n\n  this.getFieldValue = function (name) {\n    _this.warningUnhooked();\n\n    var namePath = getNamePath(name);\n    return getValue(_this.store, namePath);\n  };\n\n  this.getFieldsError = function (nameList) {\n    _this.warningUnhooked();\n\n    var fieldEntities = _this.getFieldEntitiesForNamePathList(nameList);\n\n    return fieldEntities.map(function (entity, index) {\n      if (entity && !('INVALIDATE_NAME_PATH' in entity)) {\n        return {\n          name: entity.getNamePath(),\n          errors: entity.getErrors()\n        };\n      }\n\n      return {\n        name: getNamePath(nameList[index]),\n        errors: []\n      };\n    });\n  };\n\n  this.getFieldError = function (name) {\n    _this.warningUnhooked();\n\n    var namePath = getNamePath(name);\n\n    var fieldError = _this.getFieldsError([namePath])[0];\n\n    return fieldError.errors;\n  };\n\n  this.isFieldsTouched = function () {\n    _this.warningUnhooked();\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    var arg0 = args[0],\n        arg1 = args[1];\n    var namePathList;\n    var isAllFieldsTouched = false;\n\n    if (args.length === 0) {\n      namePathList = null;\n    } else if (args.length === 1) {\n      if (Array.isArray(arg0)) {\n        namePathList = arg0.map(getNamePath);\n        isAllFieldsTouched = false;\n      } else {\n        namePathList = null;\n        isAllFieldsTouched = arg0;\n      }\n    } else {\n      namePathList = arg0.map(getNamePath);\n      isAllFieldsTouched = arg1;\n    }\n\n    var fieldEntities = _this.getFieldEntities(true);\n\n    var isFieldTouched = function isFieldTouched(field) {\n      return field.isFieldTouched();\n    }; // ===== Will get fully compare when not config namePathList =====\n\n\n    if (!namePathList) {\n      return isAllFieldsTouched ? fieldEntities.every(isFieldTouched) : fieldEntities.some(isFieldTouched);\n    } // Generate a nest tree for validate\n\n\n    var map = new NameMap();\n    namePathList.forEach(function (shortNamePath) {\n      map.set(shortNamePath, []);\n    });\n    fieldEntities.forEach(function (field) {\n      var fieldNamePath = field.getNamePath(); // Find matched entity and put into list\n\n      namePathList.forEach(function (shortNamePath) {\n        if (shortNamePath.every(function (nameUnit, i) {\n          return fieldNamePath[i] === nameUnit;\n        })) {\n          map.update(shortNamePath, function (list) {\n            return [].concat(_toConsumableArray(list), [field]);\n          });\n        }\n      });\n    }); // Check if NameMap value is touched\n\n    var isNamePathListTouched = function isNamePathListTouched(entities) {\n      return entities.some(isFieldTouched);\n    };\n\n    var namePathListEntities = map.map(function (_ref) {\n      var value = _ref.value;\n      return value;\n    });\n    return isAllFieldsTouched ? namePathListEntities.every(isNamePathListTouched) : namePathListEntities.some(isNamePathListTouched);\n  };\n\n  this.isFieldTouched = function (name) {\n    _this.warningUnhooked();\n\n    return _this.isFieldsTouched([name]);\n  };\n\n  this.isFieldsValidating = function (nameList) {\n    _this.warningUnhooked();\n\n    var fieldEntities = _this.getFieldEntities();\n\n    if (!nameList) {\n      return fieldEntities.some(function (testField) {\n        return testField.isFieldValidating();\n      });\n    }\n\n    var namePathList = nameList.map(getNamePath);\n    return fieldEntities.some(function (testField) {\n      var fieldNamePath = testField.getNamePath();\n      return containsNamePath(namePathList, fieldNamePath) && testField.isFieldValidating();\n    });\n  };\n\n  this.isFieldValidating = function (name) {\n    _this.warningUnhooked();\n\n    return _this.isFieldsValidating([name]);\n  };\n  /**\n   * Reset Field with field `initialValue` prop.\n   * Can pass `entities` or `namePathList` or just nothing.\n   */\n\n\n  this.resetWithFieldInitialValue = function () {\n    var info = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; // Create cache\n\n    var cache = new NameMap();\n\n    var fieldEntities = _this.getFieldEntities(true);\n\n    fieldEntities.forEach(function (field) {\n      var initialValue = field.props.initialValue;\n      var namePath = field.getNamePath(); // Record only if has `initialValue`\n\n      if (initialValue !== undefined) {\n        var records = cache.get(namePath) || new Set();\n        records.add({\n          entity: field,\n          value: initialValue\n        });\n        cache.set(namePath, records);\n      }\n    }); // Reset\n\n    var resetWithFields = function resetWithFields(entities) {\n      entities.forEach(function (field) {\n        var initialValue = field.props.initialValue;\n\n        if (initialValue !== undefined) {\n          var namePath = field.getNamePath();\n\n          var formInitialValue = _this.getInitialValue(namePath);\n\n          if (formInitialValue !== undefined) {\n            // Warning if conflict with form initialValues and do not modify value\n            warning(false, \"Form already set 'initialValues' with path '\".concat(namePath.join('.'), \"'. Field can not overwrite it.\"));\n          } else {\n            var records = cache.get(namePath);\n\n            if (records && records.size > 1) {\n              // Warning if multiple field set `initialValue`and do not modify value\n              warning(false, \"Multiple Field with path '\".concat(namePath.join('.'), \"' set 'initialValue'. Can not decide which one to pick.\"));\n            } else if (records) {\n              var originValue = _this.getFieldValue(namePath); // Set `initialValue`\n\n\n              if (!info.skipExist || originValue === undefined) {\n                _this.store = setValue(_this.store, namePath, _toConsumableArray(records)[0].value);\n              }\n            }\n          }\n        }\n      });\n    };\n\n    var requiredFieldEntities;\n\n    if (info.entities) {\n      requiredFieldEntities = info.entities;\n    } else if (info.namePathList) {\n      requiredFieldEntities = [];\n      info.namePathList.forEach(function (namePath) {\n        var records = cache.get(namePath);\n\n        if (records) {\n          var _requiredFieldEntitie;\n\n          (_requiredFieldEntitie = requiredFieldEntities).push.apply(_requiredFieldEntitie, _toConsumableArray(_toConsumableArray(records).map(function (r) {\n            return r.entity;\n          })));\n        }\n      });\n    } else {\n      requiredFieldEntities = fieldEntities;\n    }\n\n    resetWithFields(requiredFieldEntities);\n  };\n\n  this.resetFields = function (nameList) {\n    _this.warningUnhooked();\n\n    var prevStore = _this.store;\n\n    if (!nameList) {\n      _this.store = setValues({}, _this.initialValues);\n\n      _this.resetWithFieldInitialValue();\n\n      _this.notifyObservers(prevStore, null, {\n        type: 'reset'\n      });\n\n      return;\n    } // Reset by `nameList`\n\n\n    var namePathList = nameList.map(getNamePath);\n    namePathList.forEach(function (namePath) {\n      var initialValue = _this.getInitialValue(namePath);\n\n      _this.store = setValue(_this.store, namePath, initialValue);\n    });\n\n    _this.resetWithFieldInitialValue({\n      namePathList: namePathList\n    });\n\n    _this.notifyObservers(prevStore, namePathList, {\n      type: 'reset'\n    });\n  };\n\n  this.setFields = function (fields) {\n    _this.warningUnhooked();\n\n    var prevStore = _this.store;\n    fields.forEach(function (fieldData) {\n      var name = fieldData.name,\n          errors = fieldData.errors,\n          data = _objectWithoutProperties(fieldData, [\"name\", \"errors\"]);\n\n      var namePath = getNamePath(name); // Value\n\n      if ('value' in data) {\n        _this.store = setValue(_this.store, namePath, data.value);\n      }\n\n      _this.notifyObservers(prevStore, [namePath], {\n        type: 'setField',\n        data: fieldData\n      });\n    });\n  };\n\n  this.getFields = function () {\n    var entities = _this.getFieldEntities(true);\n\n    var fields = entities.map(function (field) {\n      var namePath = field.getNamePath();\n      var meta = field.getMeta();\n\n      var fieldData = _objectSpread(_objectSpread({}, meta), {}, {\n        name: namePath,\n        value: _this.getFieldValue(namePath)\n      });\n\n      Object.defineProperty(fieldData, 'originRCField', {\n        value: true\n      });\n      return fieldData;\n    });\n    return fields;\n  }; // =========================== Observer ===========================\n\n  /**\n   * This only trigger when a field is on constructor to avoid we get initialValue too late\n   */\n\n\n  this.initEntityValue = function (entity) {\n    var initialValue = entity.props.initialValue;\n\n    if (initialValue !== undefined) {\n      var namePath = entity.getNamePath();\n      var prevValue = getValue(_this.store, namePath);\n\n      if (prevValue === undefined) {\n        _this.store = setValue(_this.store, namePath, initialValue);\n      }\n    }\n  };\n\n  this.registerField = function (entity) {\n    _this.fieldEntities.push(entity); // Set initial values\n\n\n    if (entity.props.initialValue !== undefined) {\n      var prevStore = _this.store;\n\n      _this.resetWithFieldInitialValue({\n        entities: [entity],\n        skipExist: true\n      });\n\n      _this.notifyObservers(prevStore, [entity.getNamePath()], {\n        type: 'valueUpdate',\n        source: 'internal'\n      });\n    } // un-register field callback\n\n\n    return function (isListField, preserve) {\n      _this.fieldEntities = _this.fieldEntities.filter(function (item) {\n        return item !== entity;\n      }); // Clean up store value if preserve\n\n      var mergedPreserve = preserve !== undefined ? preserve : _this.preserve;\n\n      if (mergedPreserve === false && !isListField) {\n        var namePath = entity.getNamePath();\n\n        if (namePath.length && _this.getFieldValue(namePath) !== undefined) {\n          _this.store = setValue(_this.store, namePath, undefined);\n        }\n      }\n    };\n  };\n\n  this.dispatch = function (action) {\n    switch (action.type) {\n      case 'updateValue':\n        {\n          var namePath = action.namePath,\n              value = action.value;\n\n          _this.updateValue(namePath, value);\n\n          break;\n        }\n\n      case 'validateField':\n        {\n          var _namePath = action.namePath,\n              triggerName = action.triggerName;\n\n          _this.validateFields([_namePath], {\n            triggerName: triggerName\n          });\n\n          break;\n        }\n\n      default: // Currently we don't have other action. Do nothing.\n\n    }\n  };\n\n  this.notifyObservers = function (prevStore, namePathList, info) {\n    if (_this.subscribable) {\n      var mergedInfo = _objectSpread(_objectSpread({}, info), {}, {\n        store: _this.getFieldsValue(true)\n      });\n\n      _this.getFieldEntities().forEach(function (_ref2) {\n        var onStoreChange = _ref2.onStoreChange;\n        onStoreChange(prevStore, namePathList, mergedInfo);\n      });\n    } else {\n      _this.forceRootUpdate();\n    }\n  };\n\n  this.updateValue = function (name, value) {\n    var namePath = getNamePath(name);\n    var prevStore = _this.store;\n    _this.store = setValue(_this.store, namePath, value);\n\n    _this.notifyObservers(prevStore, [namePath], {\n      type: 'valueUpdate',\n      source: 'internal'\n    }); // Notify dependencies children with parent update\n    // We need delay to trigger validate in case Field is under render props\n\n\n    var childrenFields = _this.getDependencyChildrenFields(namePath);\n\n    if (childrenFields.length) {\n      _this.validateFields(childrenFields);\n    }\n\n    _this.notifyObservers(prevStore, childrenFields, {\n      type: 'dependenciesUpdate',\n      relatedFields: [namePath].concat(_toConsumableArray(childrenFields))\n    }); // trigger callback function\n\n\n    var onValuesChange = _this.callbacks.onValuesChange;\n\n    if (onValuesChange) {\n      var changedValues = cloneByNamePathList(_this.store, [namePath]);\n      onValuesChange(changedValues, _this.getFieldsValue());\n    }\n\n    _this.triggerOnFieldsChange([namePath].concat(_toConsumableArray(childrenFields)));\n  }; // Let all child Field get update.\n\n\n  this.setFieldsValue = function (store) {\n    _this.warningUnhooked();\n\n    var prevStore = _this.store;\n\n    if (store) {\n      _this.store = setValues(_this.store, store);\n    }\n\n    _this.notifyObservers(prevStore, null, {\n      type: 'valueUpdate',\n      source: 'external'\n    });\n  };\n\n  this.getDependencyChildrenFields = function (rootNamePath) {\n    var children = new Set();\n    var childrenFields = [];\n    var dependencies2fields = new NameMap();\n    /**\n     * Generate maps\n     * Can use cache to save perf if user report performance issue with this\n     */\n\n    _this.getFieldEntities().forEach(function (field) {\n      var dependencies = field.props.dependencies;\n      (dependencies || []).forEach(function (dependency) {\n        var dependencyNamePath = getNamePath(dependency);\n        dependencies2fields.update(dependencyNamePath, function () {\n          var fields = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Set();\n          fields.add(field);\n          return fields;\n        });\n      });\n    });\n\n    var fillChildren = function fillChildren(namePath) {\n      var fields = dependencies2fields.get(namePath) || new Set();\n      fields.forEach(function (field) {\n        if (!children.has(field)) {\n          children.add(field);\n          var fieldNamePath = field.getNamePath();\n\n          if (field.isFieldDirty() && fieldNamePath.length) {\n            childrenFields.push(fieldNamePath);\n            fillChildren(fieldNamePath);\n          }\n        }\n      });\n    };\n\n    fillChildren(rootNamePath);\n    return childrenFields;\n  };\n\n  this.triggerOnFieldsChange = function (namePathList, filedErrors) {\n    var onFieldsChange = _this.callbacks.onFieldsChange;\n\n    if (onFieldsChange) {\n      var fields = _this.getFields();\n      /**\n       * Fill errors since `fields` may be replaced by controlled fields\n       */\n\n\n      if (filedErrors) {\n        var cache = new NameMap();\n        filedErrors.forEach(function (_ref3) {\n          var name = _ref3.name,\n              errors = _ref3.errors;\n          cache.set(name, errors);\n        });\n        fields.forEach(function (field) {\n          // eslint-disable-next-line no-param-reassign\n          field.errors = cache.get(field.name) || field.errors;\n        });\n      }\n\n      var changedFields = fields.filter(function (_ref4) {\n        var fieldName = _ref4.name;\n        return containsNamePath(namePathList, fieldName);\n      });\n      onFieldsChange(changedFields, fields);\n    }\n  }; // =========================== Validate ===========================\n\n\n  this.validateFields = function (nameList, options) {\n    _this.warningUnhooked();\n\n    var provideNameList = !!nameList;\n    var namePathList = provideNameList ? nameList.map(getNamePath) : []; // Collect result in promise list\n\n    var promiseList = [];\n\n    _this.getFieldEntities(true).forEach(function (field) {\n      // Add field if not provide `nameList`\n      if (!provideNameList) {\n        namePathList.push(field.getNamePath());\n      }\n      /**\n       * Recursive validate if configured.\n       * TODO: perf improvement @zombieJ\n       */\n\n\n      if ((options === null || options === void 0 ? void 0 : options.recursive) && provideNameList) {\n        var namePath = field.getNamePath();\n\n        if ( // nameList[i] === undefined 说明是以 nameList 开头的\n        // ['name'] -> ['name','list']\n        namePath.every(function (nameUnit, i) {\n          return nameList[i] === nameUnit || nameList[i] === undefined;\n        })) {\n          namePathList.push(namePath);\n        }\n      } // Skip if without rule\n\n\n      if (!field.props.rules || !field.props.rules.length) {\n        return;\n      }\n\n      var fieldNamePath = field.getNamePath(); // Add field validate rule in to promise list\n\n      if (!provideNameList || containsNamePath(namePathList, fieldNamePath)) {\n        var promise = field.validateRules(_objectSpread({\n          validateMessages: _objectSpread(_objectSpread({}, defaultValidateMessages), _this.validateMessages)\n        }, options)); // Wrap promise with field\n\n        promiseList.push(promise.then(function () {\n          return {\n            name: fieldNamePath,\n            errors: []\n          };\n        }).catch(function (errors) {\n          return Promise.reject({\n            name: fieldNamePath,\n            errors: errors\n          });\n        }));\n      }\n    });\n\n    var summaryPromise = allPromiseFinish(promiseList);\n    _this.lastValidatePromise = summaryPromise; // Notify fields with rule that validate has finished and need update\n\n    summaryPromise.catch(function (results) {\n      return results;\n    }).then(function (results) {\n      var resultNamePathList = results.map(function (_ref5) {\n        var name = _ref5.name;\n        return name;\n      });\n\n      _this.notifyObservers(_this.store, resultNamePathList, {\n        type: 'validateFinish'\n      });\n\n      _this.triggerOnFieldsChange(resultNamePathList, results);\n    });\n    var returnPromise = summaryPromise.then(function () {\n      if (_this.lastValidatePromise === summaryPromise) {\n        return Promise.resolve(_this.getFieldsValue(namePathList));\n      }\n\n      return Promise.reject([]);\n    }).catch(function (results) {\n      var errorList = results.filter(function (result) {\n        return result && result.errors.length;\n      });\n      return Promise.reject({\n        values: _this.getFieldsValue(namePathList),\n        errorFields: errorList,\n        outOfDate: _this.lastValidatePromise !== summaryPromise\n      });\n    }); // Do not throw in console\n\n    returnPromise.catch(function (e) {\n      return e;\n    });\n    return returnPromise;\n  }; // ============================ Submit ============================\n\n\n  this.submit = function () {\n    _this.warningUnhooked();\n\n    _this.validateFields().then(function (values) {\n      var onFinish = _this.callbacks.onFinish;\n\n      if (onFinish) {\n        try {\n          onFinish(values);\n        } catch (err) {\n          // Should print error if user `onFinish` callback failed\n          console.error(err);\n        }\n      }\n    }).catch(function (e) {\n      var onFinishFailed = _this.callbacks.onFinishFailed;\n\n      if (onFinishFailed) {\n        onFinishFailed(e);\n      }\n    });\n  };\n\n  this.forceRootUpdate = forceRootUpdate;\n};\n\nfunction useForm(form) {\n  var formRef = React.useRef();\n\n  var _React$useState = React.useState({}),\n      _React$useState2 = _slicedToArray(_React$useState, 2),\n      forceUpdate = _React$useState2[1];\n\n  if (!formRef.current) {\n    if (form) {\n      formRef.current = form;\n    } else {\n      // Create a new FormStore if not provided\n      var forceReRender = function forceReRender() {\n        forceUpdate({});\n      };\n\n      var formStore = new FormStore(forceReRender);\n      formRef.current = formStore.getForm();\n    }\n  }\n\n  return [formRef.current];\n}\n\nexport default useForm;","map":{"version":3,"sources":["C:/Users/kkwan_000/Desktop/git/2017110269/minsung/node_modules/rc-field-form/es/useForm.js"],"names":["_slicedToArray","_objectSpread","_objectWithoutProperties","_toConsumableArray","_classCallCheck","React","warning","HOOK_MARK","allPromiseFinish","NameMap","defaultValidateMessages","cloneByNamePathList","containsNamePath","getNamePath","getValue","setValue","setValues","FormStore","forceRootUpdate","_this","formHooked","subscribable","store","fieldEntities","initialValues","callbacks","validateMessages","preserve","lastValidatePromise","getForm","getFieldValue","getFieldsValue","getFieldError","getFieldsError","isFieldsTouched","isFieldTouched","isFieldValidating","isFieldsValidating","resetFields","setFields","setFieldsValue","validateFields","submit","getInternalHooks","key","dispatch","initEntityValue","registerField","useSubscribe","setInitialValues","setCallbacks","setValidateMessages","getFields","setPreserve","init","getInitialValue","namePath","timeoutId","warningUnhooked","process","env","NODE_ENV","window","setTimeout","getFieldEntities","pure","arguments","length","undefined","filter","field","getFieldsMap","cache","forEach","set","getFieldEntitiesForNamePathList","nameList","map","name","get","INVALIDATE_NAME_PATH","filterFunc","Array","isArray","filteredNameList","entity","_entity$isListField","isListField","call","push","meta","getMeta","index","errors","getErrors","fieldError","_len","args","_key","arg0","arg1","namePathList","isAllFieldsTouched","every","some","shortNamePath","fieldNamePath","nameUnit","i","update","list","concat","isNamePathListTouched","entities","namePathListEntities","_ref","value","testField","resetWithFieldInitialValue","info","initialValue","props","records","Set","add","resetWithFields","formInitialValue","join","size","originValue","skipExist","requiredFieldEntities","_requiredFieldEntitie","apply","r","prevStore","notifyObservers","type","fields","fieldData","data","Object","defineProperty","prevValue","source","item","mergedPreserve","action","updateValue","_namePath","triggerName","mergedInfo","_ref2","onStoreChange","childrenFields","getDependencyChildrenFields","relatedFields","onValuesChange","changedValues","triggerOnFieldsChange","rootNamePath","children","dependencies2fields","dependencies","dependency","dependencyNamePath","fillChildren","has","isFieldDirty","filedErrors","onFieldsChange","_ref3","changedFields","_ref4","fieldName","options","provideNameList","promiseList","recursive","rules","promise","validateRules","then","catch","Promise","reject","summaryPromise","results","resultNamePathList","_ref5","returnPromise","resolve","errorList","result","values","errorFields","outOfDate","e","onFinish","err","console","error","onFinishFailed","useForm","form","formRef","useRef","_React$useState","useState","_React$useState2","forceUpdate","current","forceReRender","formStore"],"mappings":"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","sourcesContent":["import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport * as React from 'react';\nimport warning from \"rc-util/es/warning\";\nimport { HOOK_MARK } from './FieldContext';\nimport { allPromiseFinish } from './utils/asyncUtil';\nimport NameMap from './utils/NameMap';\nimport { defaultValidateMessages } from './utils/messages';\nimport { cloneByNamePathList, containsNamePath, getNamePath, getValue, setValue, setValues } from './utils/valueUtil';\nexport var FormStore = function FormStore(forceRootUpdate) {\n  var _this = this;\n\n  _classCallCheck(this, FormStore);\n\n  this.formHooked = false;\n  this.subscribable = true;\n  this.store = {};\n  this.fieldEntities = [];\n  this.initialValues = {};\n  this.callbacks = {};\n  this.validateMessages = null;\n  this.preserve = null;\n  this.lastValidatePromise = null;\n\n  this.getForm = function () {\n    return {\n      getFieldValue: _this.getFieldValue,\n      getFieldsValue: _this.getFieldsValue,\n      getFieldError: _this.getFieldError,\n      getFieldsError: _this.getFieldsError,\n      isFieldsTouched: _this.isFieldsTouched,\n      isFieldTouched: _this.isFieldTouched,\n      isFieldValidating: _this.isFieldValidating,\n      isFieldsValidating: _this.isFieldsValidating,\n      resetFields: _this.resetFields,\n      setFields: _this.setFields,\n      setFieldsValue: _this.setFieldsValue,\n      validateFields: _this.validateFields,\n      submit: _this.submit,\n      getInternalHooks: _this.getInternalHooks\n    };\n  }; // ======================== Internal Hooks ========================\n\n\n  this.getInternalHooks = function (key) {\n    if (key === HOOK_MARK) {\n      _this.formHooked = true;\n      return {\n        dispatch: _this.dispatch,\n        initEntityValue: _this.initEntityValue,\n        registerField: _this.registerField,\n        useSubscribe: _this.useSubscribe,\n        setInitialValues: _this.setInitialValues,\n        setCallbacks: _this.setCallbacks,\n        setValidateMessages: _this.setValidateMessages,\n        getFields: _this.getFields,\n        setPreserve: _this.setPreserve\n      };\n    }\n\n    warning(false, '`getInternalHooks` is internal usage. Should not call directly.');\n    return null;\n  };\n\n  this.useSubscribe = function (subscribable) {\n    _this.subscribable = subscribable;\n  };\n  /**\n   * First time `setInitialValues` should update store with initial value\n   */\n\n\n  this.setInitialValues = function (initialValues, init) {\n    _this.initialValues = initialValues || {};\n\n    if (init) {\n      _this.store = setValues({}, initialValues, _this.store);\n    }\n  };\n\n  this.getInitialValue = function (namePath) {\n    return getValue(_this.initialValues, namePath);\n  };\n\n  this.setCallbacks = function (callbacks) {\n    _this.callbacks = callbacks;\n  };\n\n  this.setValidateMessages = function (validateMessages) {\n    _this.validateMessages = validateMessages;\n  };\n\n  this.setPreserve = function (preserve) {\n    _this.preserve = preserve;\n  }; // ========================== Dev Warning =========================\n\n\n  this.timeoutId = null;\n\n  this.warningUnhooked = function () {\n    if (process.env.NODE_ENV !== 'production' && !_this.timeoutId && typeof window !== 'undefined') {\n      _this.timeoutId = window.setTimeout(function () {\n        _this.timeoutId = null;\n\n        if (!_this.formHooked) {\n          warning(false, 'Instance created by `useForm` is not connected to any Form element. Forget to pass `form` prop?');\n        }\n      });\n    }\n  }; // ============================ Fields ============================\n\n  /**\n   * Get registered field entities.\n   * @param pure Only return field which has a `name`. Default: false\n   */\n\n\n  this.getFieldEntities = function () {\n    var pure = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n    if (!pure) {\n      return _this.fieldEntities;\n    }\n\n    return _this.fieldEntities.filter(function (field) {\n      return field.getNamePath().length;\n    });\n  };\n\n  this.getFieldsMap = function () {\n    var pure = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n    var cache = new NameMap();\n\n    _this.getFieldEntities(pure).forEach(function (field) {\n      var namePath = field.getNamePath();\n      cache.set(namePath, field);\n    });\n\n    return cache;\n  };\n\n  this.getFieldEntitiesForNamePathList = function (nameList) {\n    if (!nameList) {\n      return _this.getFieldEntities(true);\n    }\n\n    var cache = _this.getFieldsMap(true);\n\n    return nameList.map(function (name) {\n      var namePath = getNamePath(name);\n      return cache.get(namePath) || {\n        INVALIDATE_NAME_PATH: getNamePath(name)\n      };\n    });\n  };\n\n  this.getFieldsValue = function (nameList, filterFunc) {\n    _this.warningUnhooked();\n\n    if (nameList === true && !filterFunc) {\n      return _this.store;\n    }\n\n    var fieldEntities = _this.getFieldEntitiesForNamePathList(Array.isArray(nameList) ? nameList : null);\n\n    var filteredNameList = [];\n    fieldEntities.forEach(function (entity) {\n      var _entity$isListField;\n\n      var namePath = 'INVALIDATE_NAME_PATH' in entity ? entity.INVALIDATE_NAME_PATH : entity.getNamePath(); // Ignore when it's a list item and not specific the namePath,\n      // since parent field is already take in count\n\n      if (!nameList && ((_entity$isListField = entity.isListField) === null || _entity$isListField === void 0 ? void 0 : _entity$isListField.call(entity))) {\n        return;\n      }\n\n      if (!filterFunc) {\n        filteredNameList.push(namePath);\n      } else {\n        var meta = 'getMeta' in entity ? entity.getMeta() : null;\n\n        if (filterFunc(meta)) {\n          filteredNameList.push(namePath);\n        }\n      }\n    });\n    return cloneByNamePathList(_this.store, filteredNameList.map(getNamePath));\n  };\n\n  this.getFieldValue = function (name) {\n    _this.warningUnhooked();\n\n    var namePath = getNamePath(name);\n    return getValue(_this.store, namePath);\n  };\n\n  this.getFieldsError = function (nameList) {\n    _this.warningUnhooked();\n\n    var fieldEntities = _this.getFieldEntitiesForNamePathList(nameList);\n\n    return fieldEntities.map(function (entity, index) {\n      if (entity && !('INVALIDATE_NAME_PATH' in entity)) {\n        return {\n          name: entity.getNamePath(),\n          errors: entity.getErrors()\n        };\n      }\n\n      return {\n        name: getNamePath(nameList[index]),\n        errors: []\n      };\n    });\n  };\n\n  this.getFieldError = function (name) {\n    _this.warningUnhooked();\n\n    var namePath = getNamePath(name);\n\n    var fieldError = _this.getFieldsError([namePath])[0];\n\n    return fieldError.errors;\n  };\n\n  this.isFieldsTouched = function () {\n    _this.warningUnhooked();\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    var arg0 = args[0],\n        arg1 = args[1];\n    var namePathList;\n    var isAllFieldsTouched = false;\n\n    if (args.length === 0) {\n      namePathList = null;\n    } else if (args.length === 1) {\n      if (Array.isArray(arg0)) {\n        namePathList = arg0.map(getNamePath);\n        isAllFieldsTouched = false;\n      } else {\n        namePathList = null;\n        isAllFieldsTouched = arg0;\n      }\n    } else {\n      namePathList = arg0.map(getNamePath);\n      isAllFieldsTouched = arg1;\n    }\n\n    var fieldEntities = _this.getFieldEntities(true);\n\n    var isFieldTouched = function isFieldTouched(field) {\n      return field.isFieldTouched();\n    }; // ===== Will get fully compare when not config namePathList =====\n\n\n    if (!namePathList) {\n      return isAllFieldsTouched ? fieldEntities.every(isFieldTouched) : fieldEntities.some(isFieldTouched);\n    } // Generate a nest tree for validate\n\n\n    var map = new NameMap();\n    namePathList.forEach(function (shortNamePath) {\n      map.set(shortNamePath, []);\n    });\n    fieldEntities.forEach(function (field) {\n      var fieldNamePath = field.getNamePath(); // Find matched entity and put into list\n\n      namePathList.forEach(function (shortNamePath) {\n        if (shortNamePath.every(function (nameUnit, i) {\n          return fieldNamePath[i] === nameUnit;\n        })) {\n          map.update(shortNamePath, function (list) {\n            return [].concat(_toConsumableArray(list), [field]);\n          });\n        }\n      });\n    }); // Check if NameMap value is touched\n\n    var isNamePathListTouched = function isNamePathListTouched(entities) {\n      return entities.some(isFieldTouched);\n    };\n\n    var namePathListEntities = map.map(function (_ref) {\n      var value = _ref.value;\n      return value;\n    });\n    return isAllFieldsTouched ? namePathListEntities.every(isNamePathListTouched) : namePathListEntities.some(isNamePathListTouched);\n  };\n\n  this.isFieldTouched = function (name) {\n    _this.warningUnhooked();\n\n    return _this.isFieldsTouched([name]);\n  };\n\n  this.isFieldsValidating = function (nameList) {\n    _this.warningUnhooked();\n\n    var fieldEntities = _this.getFieldEntities();\n\n    if (!nameList) {\n      return fieldEntities.some(function (testField) {\n        return testField.isFieldValidating();\n      });\n    }\n\n    var namePathList = nameList.map(getNamePath);\n    return fieldEntities.some(function (testField) {\n      var fieldNamePath = testField.getNamePath();\n      return containsNamePath(namePathList, fieldNamePath) && testField.isFieldValidating();\n    });\n  };\n\n  this.isFieldValidating = function (name) {\n    _this.warningUnhooked();\n\n    return _this.isFieldsValidating([name]);\n  };\n  /**\n   * Reset Field with field `initialValue` prop.\n   * Can pass `entities` or `namePathList` or just nothing.\n   */\n\n\n  this.resetWithFieldInitialValue = function () {\n    var info = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    // Create cache\n    var cache = new NameMap();\n\n    var fieldEntities = _this.getFieldEntities(true);\n\n    fieldEntities.forEach(function (field) {\n      var initialValue = field.props.initialValue;\n      var namePath = field.getNamePath(); // Record only if has `initialValue`\n\n      if (initialValue !== undefined) {\n        var records = cache.get(namePath) || new Set();\n        records.add({\n          entity: field,\n          value: initialValue\n        });\n        cache.set(namePath, records);\n      }\n    }); // Reset\n\n    var resetWithFields = function resetWithFields(entities) {\n      entities.forEach(function (field) {\n        var initialValue = field.props.initialValue;\n\n        if (initialValue !== undefined) {\n          var namePath = field.getNamePath();\n\n          var formInitialValue = _this.getInitialValue(namePath);\n\n          if (formInitialValue !== undefined) {\n            // Warning if conflict with form initialValues and do not modify value\n            warning(false, \"Form already set 'initialValues' with path '\".concat(namePath.join('.'), \"'. Field can not overwrite it.\"));\n          } else {\n            var records = cache.get(namePath);\n\n            if (records && records.size > 1) {\n              // Warning if multiple field set `initialValue`and do not modify value\n              warning(false, \"Multiple Field with path '\".concat(namePath.join('.'), \"' set 'initialValue'. Can not decide which one to pick.\"));\n            } else if (records) {\n              var originValue = _this.getFieldValue(namePath); // Set `initialValue`\n\n\n              if (!info.skipExist || originValue === undefined) {\n                _this.store = setValue(_this.store, namePath, _toConsumableArray(records)[0].value);\n              }\n            }\n          }\n        }\n      });\n    };\n\n    var requiredFieldEntities;\n\n    if (info.entities) {\n      requiredFieldEntities = info.entities;\n    } else if (info.namePathList) {\n      requiredFieldEntities = [];\n      info.namePathList.forEach(function (namePath) {\n        var records = cache.get(namePath);\n\n        if (records) {\n          var _requiredFieldEntitie;\n\n          (_requiredFieldEntitie = requiredFieldEntities).push.apply(_requiredFieldEntitie, _toConsumableArray(_toConsumableArray(records).map(function (r) {\n            return r.entity;\n          })));\n        }\n      });\n    } else {\n      requiredFieldEntities = fieldEntities;\n    }\n\n    resetWithFields(requiredFieldEntities);\n  };\n\n  this.resetFields = function (nameList) {\n    _this.warningUnhooked();\n\n    var prevStore = _this.store;\n\n    if (!nameList) {\n      _this.store = setValues({}, _this.initialValues);\n\n      _this.resetWithFieldInitialValue();\n\n      _this.notifyObservers(prevStore, null, {\n        type: 'reset'\n      });\n\n      return;\n    } // Reset by `nameList`\n\n\n    var namePathList = nameList.map(getNamePath);\n    namePathList.forEach(function (namePath) {\n      var initialValue = _this.getInitialValue(namePath);\n\n      _this.store = setValue(_this.store, namePath, initialValue);\n    });\n\n    _this.resetWithFieldInitialValue({\n      namePathList: namePathList\n    });\n\n    _this.notifyObservers(prevStore, namePathList, {\n      type: 'reset'\n    });\n  };\n\n  this.setFields = function (fields) {\n    _this.warningUnhooked();\n\n    var prevStore = _this.store;\n    fields.forEach(function (fieldData) {\n      var name = fieldData.name,\n          errors = fieldData.errors,\n          data = _objectWithoutProperties(fieldData, [\"name\", \"errors\"]);\n\n      var namePath = getNamePath(name); // Value\n\n      if ('value' in data) {\n        _this.store = setValue(_this.store, namePath, data.value);\n      }\n\n      _this.notifyObservers(prevStore, [namePath], {\n        type: 'setField',\n        data: fieldData\n      });\n    });\n  };\n\n  this.getFields = function () {\n    var entities = _this.getFieldEntities(true);\n\n    var fields = entities.map(function (field) {\n      var namePath = field.getNamePath();\n      var meta = field.getMeta();\n\n      var fieldData = _objectSpread(_objectSpread({}, meta), {}, {\n        name: namePath,\n        value: _this.getFieldValue(namePath)\n      });\n\n      Object.defineProperty(fieldData, 'originRCField', {\n        value: true\n      });\n      return fieldData;\n    });\n    return fields;\n  }; // =========================== Observer ===========================\n\n  /**\n   * This only trigger when a field is on constructor to avoid we get initialValue too late\n   */\n\n\n  this.initEntityValue = function (entity) {\n    var initialValue = entity.props.initialValue;\n\n    if (initialValue !== undefined) {\n      var namePath = entity.getNamePath();\n      var prevValue = getValue(_this.store, namePath);\n\n      if (prevValue === undefined) {\n        _this.store = setValue(_this.store, namePath, initialValue);\n      }\n    }\n  };\n\n  this.registerField = function (entity) {\n    _this.fieldEntities.push(entity); // Set initial values\n\n\n    if (entity.props.initialValue !== undefined) {\n      var prevStore = _this.store;\n\n      _this.resetWithFieldInitialValue({\n        entities: [entity],\n        skipExist: true\n      });\n\n      _this.notifyObservers(prevStore, [entity.getNamePath()], {\n        type: 'valueUpdate',\n        source: 'internal'\n      });\n    } // un-register field callback\n\n\n    return function (isListField, preserve) {\n      _this.fieldEntities = _this.fieldEntities.filter(function (item) {\n        return item !== entity;\n      }); // Clean up store value if preserve\n\n      var mergedPreserve = preserve !== undefined ? preserve : _this.preserve;\n\n      if (mergedPreserve === false && !isListField) {\n        var namePath = entity.getNamePath();\n\n        if (namePath.length && _this.getFieldValue(namePath) !== undefined) {\n          _this.store = setValue(_this.store, namePath, undefined);\n        }\n      }\n    };\n  };\n\n  this.dispatch = function (action) {\n    switch (action.type) {\n      case 'updateValue':\n        {\n          var namePath = action.namePath,\n              value = action.value;\n\n          _this.updateValue(namePath, value);\n\n          break;\n        }\n\n      case 'validateField':\n        {\n          var _namePath = action.namePath,\n              triggerName = action.triggerName;\n\n          _this.validateFields([_namePath], {\n            triggerName: triggerName\n          });\n\n          break;\n        }\n\n      default: // Currently we don't have other action. Do nothing.\n\n    }\n  };\n\n  this.notifyObservers = function (prevStore, namePathList, info) {\n    if (_this.subscribable) {\n      var mergedInfo = _objectSpread(_objectSpread({}, info), {}, {\n        store: _this.getFieldsValue(true)\n      });\n\n      _this.getFieldEntities().forEach(function (_ref2) {\n        var onStoreChange = _ref2.onStoreChange;\n        onStoreChange(prevStore, namePathList, mergedInfo);\n      });\n    } else {\n      _this.forceRootUpdate();\n    }\n  };\n\n  this.updateValue = function (name, value) {\n    var namePath = getNamePath(name);\n    var prevStore = _this.store;\n    _this.store = setValue(_this.store, namePath, value);\n\n    _this.notifyObservers(prevStore, [namePath], {\n      type: 'valueUpdate',\n      source: 'internal'\n    }); // Notify dependencies children with parent update\n    // We need delay to trigger validate in case Field is under render props\n\n\n    var childrenFields = _this.getDependencyChildrenFields(namePath);\n\n    if (childrenFields.length) {\n      _this.validateFields(childrenFields);\n    }\n\n    _this.notifyObservers(prevStore, childrenFields, {\n      type: 'dependenciesUpdate',\n      relatedFields: [namePath].concat(_toConsumableArray(childrenFields))\n    }); // trigger callback function\n\n\n    var onValuesChange = _this.callbacks.onValuesChange;\n\n    if (onValuesChange) {\n      var changedValues = cloneByNamePathList(_this.store, [namePath]);\n      onValuesChange(changedValues, _this.getFieldsValue());\n    }\n\n    _this.triggerOnFieldsChange([namePath].concat(_toConsumableArray(childrenFields)));\n  }; // Let all child Field get update.\n\n\n  this.setFieldsValue = function (store) {\n    _this.warningUnhooked();\n\n    var prevStore = _this.store;\n\n    if (store) {\n      _this.store = setValues(_this.store, store);\n    }\n\n    _this.notifyObservers(prevStore, null, {\n      type: 'valueUpdate',\n      source: 'external'\n    });\n  };\n\n  this.getDependencyChildrenFields = function (rootNamePath) {\n    var children = new Set();\n    var childrenFields = [];\n    var dependencies2fields = new NameMap();\n    /**\n     * Generate maps\n     * Can use cache to save perf if user report performance issue with this\n     */\n\n    _this.getFieldEntities().forEach(function (field) {\n      var dependencies = field.props.dependencies;\n      (dependencies || []).forEach(function (dependency) {\n        var dependencyNamePath = getNamePath(dependency);\n        dependencies2fields.update(dependencyNamePath, function () {\n          var fields = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Set();\n          fields.add(field);\n          return fields;\n        });\n      });\n    });\n\n    var fillChildren = function fillChildren(namePath) {\n      var fields = dependencies2fields.get(namePath) || new Set();\n      fields.forEach(function (field) {\n        if (!children.has(field)) {\n          children.add(field);\n          var fieldNamePath = field.getNamePath();\n\n          if (field.isFieldDirty() && fieldNamePath.length) {\n            childrenFields.push(fieldNamePath);\n            fillChildren(fieldNamePath);\n          }\n        }\n      });\n    };\n\n    fillChildren(rootNamePath);\n    return childrenFields;\n  };\n\n  this.triggerOnFieldsChange = function (namePathList, filedErrors) {\n    var onFieldsChange = _this.callbacks.onFieldsChange;\n\n    if (onFieldsChange) {\n      var fields = _this.getFields();\n      /**\n       * Fill errors since `fields` may be replaced by controlled fields\n       */\n\n\n      if (filedErrors) {\n        var cache = new NameMap();\n        filedErrors.forEach(function (_ref3) {\n          var name = _ref3.name,\n              errors = _ref3.errors;\n          cache.set(name, errors);\n        });\n        fields.forEach(function (field) {\n          // eslint-disable-next-line no-param-reassign\n          field.errors = cache.get(field.name) || field.errors;\n        });\n      }\n\n      var changedFields = fields.filter(function (_ref4) {\n        var fieldName = _ref4.name;\n        return containsNamePath(namePathList, fieldName);\n      });\n      onFieldsChange(changedFields, fields);\n    }\n  }; // =========================== Validate ===========================\n\n\n  this.validateFields = function (nameList, options) {\n    _this.warningUnhooked();\n\n    var provideNameList = !!nameList;\n    var namePathList = provideNameList ? nameList.map(getNamePath) : []; // Collect result in promise list\n\n    var promiseList = [];\n\n    _this.getFieldEntities(true).forEach(function (field) {\n      // Add field if not provide `nameList`\n      if (!provideNameList) {\n        namePathList.push(field.getNamePath());\n      }\n      /**\n       * Recursive validate if configured.\n       * TODO: perf improvement @zombieJ\n       */\n\n\n      if ((options === null || options === void 0 ? void 0 : options.recursive) && provideNameList) {\n        var namePath = field.getNamePath();\n\n        if ( // nameList[i] === undefined 说明是以 nameList 开头的\n        // ['name'] -> ['name','list']\n        namePath.every(function (nameUnit, i) {\n          return nameList[i] === nameUnit || nameList[i] === undefined;\n        })) {\n          namePathList.push(namePath);\n        }\n      } // Skip if without rule\n\n\n      if (!field.props.rules || !field.props.rules.length) {\n        return;\n      }\n\n      var fieldNamePath = field.getNamePath(); // Add field validate rule in to promise list\n\n      if (!provideNameList || containsNamePath(namePathList, fieldNamePath)) {\n        var promise = field.validateRules(_objectSpread({\n          validateMessages: _objectSpread(_objectSpread({}, defaultValidateMessages), _this.validateMessages)\n        }, options)); // Wrap promise with field\n\n        promiseList.push(promise.then(function () {\n          return {\n            name: fieldNamePath,\n            errors: []\n          };\n        }).catch(function (errors) {\n          return Promise.reject({\n            name: fieldNamePath,\n            errors: errors\n          });\n        }));\n      }\n    });\n\n    var summaryPromise = allPromiseFinish(promiseList);\n    _this.lastValidatePromise = summaryPromise; // Notify fields with rule that validate has finished and need update\n\n    summaryPromise.catch(function (results) {\n      return results;\n    }).then(function (results) {\n      var resultNamePathList = results.map(function (_ref5) {\n        var name = _ref5.name;\n        return name;\n      });\n\n      _this.notifyObservers(_this.store, resultNamePathList, {\n        type: 'validateFinish'\n      });\n\n      _this.triggerOnFieldsChange(resultNamePathList, results);\n    });\n    var returnPromise = summaryPromise.then(function () {\n      if (_this.lastValidatePromise === summaryPromise) {\n        return Promise.resolve(_this.getFieldsValue(namePathList));\n      }\n\n      return Promise.reject([]);\n    }).catch(function (results) {\n      var errorList = results.filter(function (result) {\n        return result && result.errors.length;\n      });\n      return Promise.reject({\n        values: _this.getFieldsValue(namePathList),\n        errorFields: errorList,\n        outOfDate: _this.lastValidatePromise !== summaryPromise\n      });\n    }); // Do not throw in console\n\n    returnPromise.catch(function (e) {\n      return e;\n    });\n    return returnPromise;\n  }; // ============================ Submit ============================\n\n\n  this.submit = function () {\n    _this.warningUnhooked();\n\n    _this.validateFields().then(function (values) {\n      var onFinish = _this.callbacks.onFinish;\n\n      if (onFinish) {\n        try {\n          onFinish(values);\n        } catch (err) {\n          // Should print error if user `onFinish` callback failed\n          console.error(err);\n        }\n      }\n    }).catch(function (e) {\n      var onFinishFailed = _this.callbacks.onFinishFailed;\n\n      if (onFinishFailed) {\n        onFinishFailed(e);\n      }\n    });\n  };\n\n  this.forceRootUpdate = forceRootUpdate;\n};\n\nfunction useForm(form) {\n  var formRef = React.useRef();\n\n  var _React$useState = React.useState({}),\n      _React$useState2 = _slicedToArray(_React$useState, 2),\n      forceUpdate = _React$useState2[1];\n\n  if (!formRef.current) {\n    if (form) {\n      formRef.current = form;\n    } else {\n      // Create a new FormStore if not provided\n      var forceReRender = function forceReRender() {\n        forceUpdate({});\n      };\n\n      var formStore = new FormStore(forceReRender);\n      formRef.current = formStore.getForm();\n    }\n  }\n\n  return [formRef.current];\n}\n\nexport default useForm;"]},"metadata":{},"sourceType":"module"}