choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
343 lines (301 loc) • 11.5 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = createFieldsStore;
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _set = _interopRequireDefault(require("lodash/set"));
var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
var _createFormField = _interopRequireWildcard(require("./createFormField"));
var _utils = require("./utils");
function partOf(a, b) {
return b.indexOf(a) === 0 && ['.', '['].indexOf(b[a.length]) !== -1;
}
var FieldsStore = /*#__PURE__*/function () {
function FieldsStore(_fields) {
var _this = this;
(0, _classCallCheck2["default"])(this, FieldsStore);
(0, _defineProperty2["default"])(this, "setFieldsInitialValue", function (initialValues) {
var flattenedInitialValues = _this.flattenRegisteredFields(initialValues);
var fieldsMeta = _this.fieldsMeta;
Object.keys(flattenedInitialValues).forEach(function (name) {
if (fieldsMeta[name]) {
_this.setFieldMeta(name, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, _this.getFieldMeta(name)), {}, {
initialValue: flattenedInitialValues[name]
}));
}
});
});
(0, _defineProperty2["default"])(this, "getAllValues", function () {
var fieldsMeta = _this.fieldsMeta,
fields = _this.fields;
return Object.keys(fieldsMeta).reduce(function (acc, name) {
return (0, _set["default"])(acc, name, _this.getValueFromFields(name, fields));
}, {});
});
(0, _defineProperty2["default"])(this, "getFieldsValue", function (names) {
return _this.getNestedFields(names, _this.getFieldValue);
});
(0, _defineProperty2["default"])(this, "getFieldValue", function (name) {
var fields = _this.fields;
return _this.getNestedField(name, function (fullName) {
return _this.getValueFromFields(fullName, fields);
});
});
(0, _defineProperty2["default"])(this, "getFieldsError", function (names) {
return _this.getNestedFields(names, _this.getFieldError);
});
(0, _defineProperty2["default"])(this, "getFieldError", function (name) {
return _this.getNestedField(name, function (fullName) {
return (0, _utils.getErrorStrs)(_this.getFieldMember(fullName, 'errors'));
});
});
(0, _defineProperty2["default"])(this, "isFieldValidating", function (name) {
return _this.getFieldMember(name, 'validating');
});
(0, _defineProperty2["default"])(this, "isFieldsValidating", function (ns) {
var names = ns || _this.getValidFieldsName();
return names.some(function (n) {
return _this.isFieldValidating(n);
});
});
(0, _defineProperty2["default"])(this, "isFieldTouched", function (name) {
return _this.getFieldMember(name, 'touched');
});
(0, _defineProperty2["default"])(this, "isFieldsTouched", function (ns) {
var names = ns || _this.getValidFieldsName();
return names.some(function (n) {
return _this.isFieldTouched(n);
});
});
(0, _defineProperty2["default"])(this, "isModifiedField", function (name) {
var value = _this.getFieldValue(name);
var fieldMeta = _this.getFieldMeta(name);
var initialValue = fieldMeta && fieldMeta.initialValue;
if (!value && !initialValue) {
return false;
}
if (!(0, _isEqual["default"])(value, initialValue)) {
return true;
}
return false;
});
(0, _defineProperty2["default"])(this, "isModifiedFields", function (names) {
var i;
var length;
var fieldNames = names ? _this.getValidFieldsFullName(names) : _this.getValidFieldsName();
if (fieldNames && Array.isArray(fieldNames)) {
for (i = 0, length = fieldNames.length; i < length; i++) {
if (_this.isModifiedField(fieldNames[i])) {
return true;
}
}
}
return false;
});
this.fields = this.flattenFields(_fields);
this.fieldsMeta = {};
}
(0, _createClass2["default"])(FieldsStore, [{
key: "updateFields",
value: function updateFields(fields) {
this.fields = this.flattenFields(fields);
}
}, {
key: "flattenFields",
value: function flattenFields(fields) {
return (0, _utils.flattenFields)(fields, function (_, node) {
return (0, _createFormField.isFormField)(node);
}, 'You must wrap field data with `createFormField`.');
}
}, {
key: "flattenRegisteredFields",
value: function flattenRegisteredFields(fields) {
var validFieldsName = this.getAllFieldsName();
return (0, _utils.flattenFields)(fields, function (path) {
return validFieldsName.indexOf(path) >= 0;
}, 'You cannot set field before registering it.');
}
}, {
key: "setFields",
value: function setFields(fields) {
var _this2 = this;
var fieldsMeta = this.fieldsMeta;
var nowFields = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, this.fields), fields);
var nowValues = {};
Object.keys(fieldsMeta).forEach(function (f) {
return nowValues[f] = _this2.getValueFromFields(f, nowFields);
});
Object.keys(nowValues).forEach(function (f) {
var value = nowValues[f];
var fieldMeta = _this2.getFieldMeta(f);
if (fieldMeta && fieldMeta.normalize) {
var nowValue = fieldMeta.normalize(value, _this2.getValueFromFields(f, _this2.fields), nowValues);
if (nowValue !== value) {
nowFields[f] = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, nowFields[f]), {}, {
value: nowValue
});
}
}
});
this.fields = nowFields;
}
}, {
key: "resetFields",
value: function resetFields(ns) {
var fields = this.fields;
var names = ns ? this.getValidFieldsFullName(ns) : this.getAllFieldsName();
return names.reduce(function (acc, name) {
var field = fields[name];
if (field && 'value' in field) {
acc[name] = {};
}
return acc;
}, {});
}
}, {
key: "setFieldMeta",
value: function setFieldMeta(name, meta) {
this.fieldsMeta[name] = meta;
}
}, {
key: "getFieldMeta",
value: function getFieldMeta(name) {
this.fieldsMeta[name] = this.fieldsMeta[name] || {};
return this.fieldsMeta[name];
}
}, {
key: "getValueFromFields",
value: function getValueFromFields(name, fields) {
var field = fields[name];
if (field && 'value' in field) {
return field.value;
}
var fieldMeta = this.getFieldMeta(name);
return fieldMeta && fieldMeta.initialValue;
}
}, {
key: "getValidFieldsName",
value: function getValidFieldsName() {
var _this3 = this;
var fieldsMeta = this.fieldsMeta;
return fieldsMeta ? Object.keys(fieldsMeta).filter(function (name) {
return !_this3.getFieldMeta(name).hidden;
}) : [];
}
}, {
key: "getAllFieldsName",
value: function getAllFieldsName() {
var fieldsMeta = this.fieldsMeta;
return fieldsMeta ? Object.keys(fieldsMeta) : [];
}
}, {
key: "getValidFieldsFullName",
value: function getValidFieldsFullName(maybePartialName) {
var maybePartialNames = Array.isArray(maybePartialName) ? maybePartialName : [maybePartialName];
return this.getValidFieldsName().filter(function (fullName) {
return maybePartialNames.some(function (partialName) {
return fullName === partialName || (0, _utils.startsWith)(fullName, partialName) && ['.', '['].indexOf(fullName[partialName.length]) >= 0;
});
});
}
}, {
key: "getFieldValuePropValue",
value: function getFieldValuePropValue(fieldMeta) {
var name = fieldMeta.name,
getValueProps = fieldMeta.getValueProps,
valuePropName = fieldMeta.valuePropName;
var field = this.getField(name);
var fieldValue = 'value' in field ? field.value : fieldMeta.initialValue;
if (getValueProps) {
return getValueProps(fieldValue);
}
return (0, _defineProperty2["default"])({}, valuePropName, fieldValue);
}
}, {
key: "getField",
value: function getField(name) {
return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, this.fields[name]), {}, {
name: name
});
}
}, {
key: "getNotCollectedFields",
value: function getNotCollectedFields() {
var _this4 = this;
return this.getValidFieldsName().filter(function (name) {
return !_this4.fields[name];
}).map(function (name) {
return {
name: name,
dirty: false,
value: _this4.getFieldMeta(name).initialValue
};
}).reduce(function (acc, field) {
return (0, _set["default"])(acc, field.name, (0, _createFormField["default"])(field));
}, {});
}
}, {
key: "getNestedAllFields",
value: function getNestedAllFields() {
var _this5 = this;
return Object.keys(this.fields).reduce(function (acc, name) {
return (0, _set["default"])(acc, name, (0, _createFormField["default"])(_this5.fields[name]));
}, this.getNotCollectedFields());
}
}, {
key: "getFieldMember",
value: function getFieldMember(name, member) {
return this.getField(name)[member];
}
}, {
key: "getNestedFields",
value: function getNestedFields(names, getter) {
var fields = names || this.getValidFieldsName();
return fields.reduce(function (acc, f) {
return (0, _set["default"])(acc, f, getter(f));
}, {});
}
}, {
key: "getNestedField",
value: function getNestedField(name, getter) {
var fullNames = this.getValidFieldsFullName(name);
if (fullNames.length === 0 || // Not registered
fullNames.length === 1 && fullNames[0] === name // Name already is full name.
) {
return getter(name);
}
var isArrayValue = fullNames[0][name.length] === '[';
var suffixNameStartIndex = isArrayValue ? name.length : name.length + 1;
return fullNames.reduce(function (acc, fullName) {
return (0, _set["default"])(acc, fullName.slice(suffixNameStartIndex), getter(fullName));
}, isArrayValue ? [] : {});
}
}, {
key: "isValidNestedFieldName",
value: // @private
// BG: `a` and `a.b` cannot be use in the same form
function isValidNestedFieldName(name) {
var names = this.getAllFieldsName();
return names.every(function (n) {
return !partOf(n, name) && !partOf(name, n);
});
}
}, {
key: "clearField",
value: function clearField(name) {
delete this.fields[name];
delete this.fieldsMeta[name];
}
}]);
return FieldsStore;
}();
function createFieldsStore(fields) {
return new FieldsStore(fields);
}
//# sourceMappingURL=createFieldsStore.js.map