rofrischmann/fela

View on GitHub
examples/example-with-styleguidist/src/common/createFelaRenderer.js

Summary

Maintainability
A
1 hr
Test Coverage
import { createRenderer as createFelaRenderer } from 'fela'
import embedded from 'fela-plugin-embedded'
import validator from 'fela-plugin-validator'
import friendlyPsuedo from 'fela-plugin-friendly-pseudo-class'
import placeholderPrefixer from 'fela-plugin-placeholder-prefixer'
import beautifier from 'fela-beautifier'
import statistics from 'fela-statistics'
import webPreset from 'fela-preset-web'
import namedMediaQuery from 'fela-plugin-named-media-query'
import unit from 'fela-plugin-unit'
import combineArrays from 'fela-combine-arrays'
import whitelistMediaQuery from './whitelistMediaQueryPlugin'
import theme from './base-ui-theme'

const mediaQueries = {
  mobile: `@media (min-width: ${theme.breakpoints.mobile})`,
  mobileWide: `@media (min-width: ${theme.breakpoints.mobileWide})`,
  tablet: `@media (min-width: ${theme.breakpoints.tablet})`,
  desktop: `@media (min-width: ${theme.breakpoints.desktop})`,
  desktopLarge: `@media (min-width: ${theme.breakpoints.desktopLarge})`,
}

const removePrefix = query => query.replace('@media ', '')

const createRenderer = () => {
  const plugins = [
    unit('px'),
    placeholderPrefixer(),
    friendlyPsuedo(),
    ...webPreset,
    embedded(),
    namedMediaQuery(mediaQueries),
  ]
  const enhancers = [combineArrays()]

  if (process.env.NODE_ENV === 'development') {
    plugins.push(
      validator({
        logInvalid: true,
        deleteInvalid: true,
      })
    )
    plugins.push(whitelistMediaQuery(mediaQueries))
    /* eslint-disable no-undef */
    if (__CLIENT__ && __STATISTICS__) {
      /* eslint-enable */
      // enabled via define plugin in styleguidist.config.js
      plugins.push(statistics())
    }
    enhancers.push(beautifier())
  }

  return createFelaRenderer({
    plugins,
    enhancers,
    mediaQueryOrder: [
      removePrefix(mediaQueries.mobile),
      removePrefix(mediaQueries.mobileWide),
      removePrefix(mediaQueries.tablet),
      removePrefix(mediaQueries.desktop),
      removePrefix(mediaQueries.desktopLarge),
    ],
  })
}

export default createRenderer