react-jsonschema-form-conditionals
Version:
Extension of react-jsonschema-form with conditional field support
71 lines (56 loc) • 2.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.normRules = normRules;
exports.default = rulesRunner;
var _actions = require("./actions");
var _actions2 = _interopRequireDefault(_actions);
var _deepcopy = require("deepcopy");
var _deepcopy2 = _interopRequireDefault(_deepcopy);
var _utils = require("react-jsonschema-form/lib/utils");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function doRunRules(engine, formData, schema, uiSchema) {
var extraActions = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
var schemaCopy = (0, _deepcopy2.default)(schema);
var uiSchemaCopy = (0, _deepcopy2.default)(uiSchema);
var formDataCopy = (0, _deepcopy2.default)(formData);
var res = engine.run(formData).then(function (events) {
events.forEach(function (event) {
return (0, _actions2.default)(event, schemaCopy, uiSchemaCopy, formDataCopy, extraActions);
});
});
return res.then(function () {
return {
schema: schemaCopy,
uiSchema: uiSchemaCopy,
formData: formDataCopy
};
});
}
function normRules(rules) {
return rules.sort(function (a, b) {
if (a.order === undefined) {
return b.order === undefined ? 0 : 1;
}
return b.order === undefined ? -1 : a.order - b.order;
});
}
function rulesRunner(schema, uiSchema, rules, engine, extraActions) {
engine = typeof engine === "function" ? new engine([], schema) : engine;
normRules(rules).forEach(function (rule) {
return engine.addRule(rule);
});
return function (formData) {
if (formData === undefined || formData === null) {
return Promise.resolve({ schema: schema, uiSchema: uiSchema, formData: formData });
}
return doRunRules(engine, formData, schema, uiSchema, extraActions).then(function (conf) {
if ((0, _utils.deepEquals)(conf.formData, formData)) {
return conf;
} else {
return doRunRules(engine, conf.formData, schema, uiSchema, extraActions);
}
});
};
}