@data-driven-forms/react-form-renderer
Version:
React Form Renderer. Data Driven Forms converts JSON form definitions into fully functional React forms.
117 lines (87 loc) • 5.03 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _toArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toArray"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _excluded = ["when"];
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
var mergeFunctionTrigger = function mergeFunctionTrigger(fn, field) {
var internalTriggers = [];
var internalWhen = fn(field);
if (Array.isArray(internalWhen)) {
internalTriggers = (0, _toConsumableArray2["default"])(internalWhen);
} else {
internalTriggers.push(internalWhen);
}
return internalTriggers;
};
var getConditionTriggers = function getConditionTriggers(condition, field) {
var conditionMapper = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var triggers = [];
if (Array.isArray(condition)) {
return condition.reduce(function (acc, item) {
return [].concat((0, _toConsumableArray2["default"])(acc), (0, _toConsumableArray2["default"])(getConditionTriggers(item, field, conditionMapper)));
}, []);
} // extract mapped attributes to a new static condition object
if ((0, _typeof2["default"])(condition.mappedAttributes) === 'object') {
try {
var newCondition = _objectSpread(_objectSpread({}, condition), {}, {
mappedAttributes: undefined
});
Object.entries(condition.mappedAttributes).forEach(function (_ref) {
var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
attribute = _ref2[0],
_ref2$ = (0, _toArray2["default"])(_ref2[1]),
functionName = _ref2$[0],
args = _ref2$.slice(1);
if (!conditionMapper[functionName]) {
throw new Error("Missing condition mapper function \"".concat(functionName, "\" for field ").concat(field.name, "!"));
}
newCondition[attribute] = conditionMapper[functionName].apply(conditionMapper, (0, _toConsumableArray2["default"])(args));
});
return getConditionTriggers(newCondition, field, conditionMapper);
} catch (error) {
console.error(error.toString());
}
}
var when = condition.when,
rest = (0, _objectWithoutProperties2["default"])(condition, _excluded);
var nestedKeys = ['and', 'or', 'sequence'];
if (typeof when === 'string') {
triggers = [].concat((0, _toConsumableArray2["default"])(triggers), [when]);
}
if (typeof when === 'function') {
triggers = [].concat((0, _toConsumableArray2["default"])(triggers), (0, _toConsumableArray2["default"])(mergeFunctionTrigger(when, field)));
}
if (Array.isArray(when)) {
when.forEach(function (item) {
if (typeof item === 'string') {
triggers = [].concat((0, _toConsumableArray2["default"])(triggers), [item]);
}
if (typeof item === 'function') {
triggers = [].concat((0, _toConsumableArray2["default"])(triggers), (0, _toConsumableArray2["default"])(mergeFunctionTrigger(item, field)));
}
});
}
nestedKeys.forEach(function (key) {
if (typeof rest[key] !== 'undefined') {
rest[key].forEach(function (item) {
triggers = [].concat((0, _toConsumableArray2["default"])(triggers), (0, _toConsumableArray2["default"])(getConditionTriggers(item, field, conditionMapper)));
});
}
});
if ((0, _typeof2["default"])(condition.not) === 'object') {
triggers = [].concat((0, _toConsumableArray2["default"])(triggers), (0, _toConsumableArray2["default"])(getConditionTriggers(condition.not, field, conditionMapper)));
}
return Array.from(new Set(triggers));
};
var _default = getConditionTriggers;
exports["default"] = _default;