ramda-extension
Version:
Helpful functions built on top of the mighty Ramda
53 lines (43 loc) • 1.95 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _ramda = require("ramda");
var _flattenArgs = _interopRequireDefault(require("./flattenArgs"));
var _joinWithSpace = _interopRequireDefault(require("./joinWithSpace"));
var _isObject = _interopRequireDefault(require("./isObject"));
var _isString = _interopRequireDefault(require("./isString"));
var _isNumber = _interopRequireDefault(require("./isNumber"));
var filterFalsy = (0, _ramda.filter)(_ramda.identity);
var keepObjectStringNumber = (0, _ramda.filter)((0, _ramda.anyPass)([_isObject.default, _isString.default, _isNumber.default]));
var keepKeyIfValueIsTruthy = (0, _ramda.mapObjIndexed)(function (v, k) {
return v && k;
});
var destructObject = (0, _ramda.compose)(filterFalsy, _ramda.values, keepKeyIfValueIsTruthy);
var transduceArgs = (0, _ramda.into)([], (0, _ramda.compose)((0, _ramda.map)((0, _ramda.when)(_isObject.default, destructObject)), keepObjectStringNumber, filterFalsy));
/**
* Conditionally joining classNames together.
*
* The cx function takes any number of arguments which can be a string, object
* even nested arrays of strings and objects.
*
* The argument 'foo' is short for { foo: true }.
*
* If the value associated with a given key is falsy, that key won't be included in the output.
*
* @func
* @category String
*
* @example
*
* R_.cx('Table', ['MagicTable'], {'Table--active': true }) // 'Table MagicTable Table--active'
* R_.cx('Table', ['MagicTable'], {'Table--active': false }) // 'Table MagicTable'
* R_.cx(['Table', ['MagicTable']]) // 'Table MagicTable'
*
* @sig String | [String] | Object -> String
*/
var cx = (0, _ramda.compose)(_joinWithSpace.default, _ramda.flatten, transduceArgs, _flattenArgs.default);
var _default = cx;
exports.default = _default;