UNPKG

forest-express

Version:

Official package for all Forest Express Lianas

130 lines (125 loc) 6.3 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); 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 SmartActionHookService = /*#__PURE__*/function () { function SmartActionHookService(_ref) { var setFieldWidget = _ref.setFieldWidget, smartActionFieldValidator = _ref.smartActionFieldValidator, smartActionFormLayoutService = _ref.smartActionFormLayoutService; (0, _classCallCheck2["default"])(this, SmartActionHookService); this.setFieldWidget = setFieldWidget; this.smartActionFieldValidator = smartActionFieldValidator; this.smartActionFormLayoutService = smartActionFormLayoutService; } /** * Transform fields from an array to an object to ease usage in hook, * adds null value, prepare widgets. * * @param {*} fields A smart action field */ (0, _createClass2["default"])(SmartActionHookService, [{ key: "getFieldsForUser", value: function getFieldsForUser(fields) { var _this = this; return fields.map(function (field) { // Update widget from legacy to current format. _this.setFieldWidget(field); if (field.value === undefined) field.value = null; return field; }); } /** * Get the response from user-defined hook. * * @param {Function} hook the callback hook of the smart action. * @param {Array} fields the array of fields. * @param {Object} record the current record that has to be passed to load hook. */ }, { key: "getResponse", value: function () { var _getResponse = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(action, hook, fields, request) { var _this2 = this; var changedField, fieldsForUser, hookResult, _this$smartActionForm, fieldHookResult, layout, validFields, _args = arguments; return _regenerator["default"].wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: changedField = _args.length > 4 && _args[4] !== undefined ? _args[4] : null; fieldsForUser = this.getFieldsForUser(fields); if (!(typeof hook !== 'function')) { _context.next = 4; break; } throw new Error('hook must be a function'); case 4: _context.next = 6; return hook({ request: request, fields: fieldsForUser, changedField: changedField }); case 6: hookResult = _context.sent; if (hookResult && Array.isArray(hookResult)) { _context.next = 9; break; } throw new Error('hook must return an array'); case 9: _this$smartActionForm = this.smartActionFormLayoutService.extractFieldsAndLayout(hookResult), fieldHookResult = _this$smartActionForm.fields, layout = _this$smartActionForm.layout; validFields = fieldHookResult.map(function (field) { var _action$hooks; _this2.smartActionFieldValidator.validateField(field, action.name); _this2.smartActionFieldValidator.validateFieldChangeHook(field, action.name, (_action$hooks = action.hooks) === null || _action$hooks === void 0 ? void 0 : _action$hooks.change); if (field.value === undefined) field.value = null; // Reset `value` when not present in `enums` (which means `enums` has changed). if (Array.isArray(field.enums)) { // `Value` can be an array if the type of fields is `[x]` if (Array.isArray(field.type) && Array.isArray(field.value) && field.value.some(function (value) { return !field.enums.includes(value); })) { return _objectSpread(_objectSpread({}, field), {}, { value: null }); } // `Value` can be any other value if (!Array.isArray(field.type) && !field.enums.includes(field.value)) { return _objectSpread(_objectSpread({}, field), {}, { value: null }); } } return field; }); return _context.abrupt("return", { fields: validFields, layout: layout }); case 12: case "end": return _context.stop(); } }, _callee, this); })); function getResponse(_x, _x2, _x3, _x4) { return _getResponse.apply(this, arguments); } return getResponse; }() }]); return SmartActionHookService; }(); module.exports = SmartActionHookService;