rofrischmann/fela

View on GitHub
packages/fela-tools/src/combineMultiRules.js

Summary

Maintainability
A
0 mins
Test Coverage
import { objectReduce, arrayReduce } from 'fast-loops'

import { combineRules } from 'fela'

function safeRule(ruleOrObject) {
  return typeof ruleOrObject === 'function' ? ruleOrObject : () => ruleOrObject
}

export default function combineMultiRules(...multiRules) {
  return (props, renderer) =>
    arrayReduce(
      multiRules,
      (resultStyleMap, multiRule) => ({
        ...resultStyleMap,
        ...objectReduce(
          safeRule(multiRule)(props, renderer),
          (styleMap, rule, name) => ({
            ...styleMap,
            [name]: resultStyleMap[name]
              ? combineRules(resultStyleMap[name], safeRule(rule))
              : safeRule(rule),
          }),
          {}
        ),
      }),
      {}
    )
}