ramda-extension
Version:
Helpful functions built on top of the mighty Ramda
45 lines (38 loc) • 1.44 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _ramda = require("ramda");
var _applyCompose = _interopRequireDefault(require("./applyCompose"));
var _xPairs = _interopRequireDefault(require("./xPairs"));
var getPredicates = (0, _ramda.compose)((0, _ramda.map)((0, _ramda.juxt)([_applyCompose.default, _ramda.last])), _xPairs.default);
/**
* Returns first result from evaluation of functions in the list, that satisfies predicate.
* Returns `undefined` otherwise.
*
* @func
* @category Function
* @see dispatch
*
* @param {function} predicate Predicate that is applied to result of calling fn from `listFns` with `values`
* @param {array} listFns List of functions
* @param {*} values Values applied to functions from `listFns`
* @return {any} Returns first result of calling fn from `listFns` with `values` that satisfies `predicate`.
*
* @example
*
* const firstTruthy = R_.dispatchWith(Boolean)([
* prop("foo"),
* prop("bar"),
* ])
*
* firstTruthy({foo: "foo", bar: false}) // "foo"
* firstTruthy({foo: false, bar: "bar" }) // "bar"
*
* @sig [a] -> b|undefined
*/
var dispatchWith = (0, _ramda.converge)((0, _ramda.call)(_ramda.cond), [getPredicates]);
var _default = dispatchWith;
exports.default = _default;