UNPKG

@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
"use strict"; 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;