@data-driven-forms/react-form-renderer
Version:
React Form Renderer. Data Driven Forms converts JSON form definitions into fully functional React forms.
98 lines • 4.4 kB
JavaScript
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 __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
var mergeFunctionTrigger = function (fn, field) {
var internalTriggers = [];
var internalWhen = fn(field);
if (Array.isArray(internalWhen)) {
internalTriggers = __spreadArray([], internalWhen, true);
}
else {
internalTriggers.push(internalWhen);
}
return internalTriggers;
};
var getConditionTriggers = function (condition, field, conditionMapper) {
if (conditionMapper === void 0) { conditionMapper = {}; }
var triggers = [];
if (Array.isArray(condition)) {
return condition.reduce(function (acc, item) { return __spreadArray(__spreadArray([], acc, true), getConditionTriggers(item, field, conditionMapper), true); }, []);
}
// extract mapped attributes to a new static condition object
if (typeof condition.mappedAttributes === 'object') {
try {
var newCondition_1 = __assign(__assign({}, condition), { mappedAttributes: undefined });
Object.entries(condition.mappedAttributes).forEach(function (_a) {
var attribute = _a[0], mappedValue = _a[1];
var _b = mappedValue, functionName = _b[0], args = _b.slice(1);
if (!conditionMapper[functionName]) {
throw new Error("Missing condition mapper function \"".concat(functionName, "\" for field ").concat((field === null || field === void 0 ? void 0 : field.name) || 'undefined', "!"));
}
newCondition_1[attribute] = conditionMapper[functionName].apply(conditionMapper, args);
});
return getConditionTriggers(newCondition_1, field, conditionMapper);
}
catch (error) {
console.error(error.toString());
}
}
var when = condition.when, rest = __rest(condition, ["when"]);
var nestedKeys = ['and', 'or', 'sequence'];
if (typeof when === 'string') {
triggers = __spreadArray(__spreadArray([], triggers, true), [when], false);
}
if (typeof when === 'function') {
triggers = __spreadArray(__spreadArray([], triggers, true), mergeFunctionTrigger(when, field), true);
}
if (Array.isArray(when)) {
when.forEach(function (item) {
if (typeof item === 'string') {
triggers = __spreadArray(__spreadArray([], triggers, true), [item], false);
}
if (typeof item === 'function') {
triggers = __spreadArray(__spreadArray([], triggers, true), mergeFunctionTrigger(item, field), true);
}
});
}
nestedKeys.forEach(function (key) {
if (Array.isArray(rest[key])) {
rest[key].forEach(function (item) {
triggers = __spreadArray(__spreadArray([], triggers, true), getConditionTriggers(item, field, conditionMapper), true);
});
}
});
if (typeof condition.not === 'object') {
triggers = __spreadArray(__spreadArray([], triggers, true), getConditionTriggers(condition.not, field, conditionMapper), true);
}
return Array.from(new Set(triggers));
};
export default getConditionTriggers;
//# sourceMappingURL=get-condition-triggers.js.map