styles-merge
Version:
A JavaScript utility for merging style objects together
62 lines (52 loc) • 1.3 kB
JavaScript
/**
* A simple utility to conditionally evaluate style properties
* and merge them into a single one.
*
* @returns {Object}
*/
function StylesMerge () {
const self = this
return function (...stylePredicatePairs) {
let mergedStyles = stylePredicatePairs.reduce((o, pair) => ({ ...o, ...pair }), {})
/**
* Prototype method for an 'if-then' semantic.
*
* @param {Boolean} argIf
* @param {Object} argThen
* @returns {Object}
*/
self.ifThen = (argIf, argThen) => {
if (argIf === true) {
mergedStyles = { ...mergedStyles, ...(argThen || {}) }
}
return self
}
/**
* Prototype method for an 'if-then-else' semantic.
*
* @param {Boolean} argIf
* @param {Object} argThen
* @param {Object} argElse
* @returns {Object}
*/
self.ifThenElse = (argIf, argThen, argElse) => {
if (argIf === true) {
mergedStyles = { ...mergedStyles, ...(argThen || {}) }
} else {
mergedStyles = { ...mergedStyles, ...(argElse || {}) }
}
return self
}
/**
* Return the evaulated styles.
*
* @returns {Object}
*/
self.eval = () => {
return mergedStyles
}
return self
}
}
module.exports = new StylesMerge()