Recompose branch example

Using branch to conditionally wrap components.

by Kye Hohenberger

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.24/browser.js"></script>
<script src="https://fb.me/react-with-addons-15.0.1.js"></script>
<script src="https://fb.me/react-dom-15.0.1.js"></script>
<script src="https://npmcdn.com/[email protected]/build/Recompose.js"></script>
<div id="demo1"></div>
<div id="demo2"></div>

Babel + JSX

const { branch } = Recompose

// Box is a normal component
const Box = props => {
  return (
    <pre
      style={{
        color: props.color,
        background: 'white',
        padding: 4
      }}
    >
      {JSON.stringify(props, null, 2)}
    </pre>
  )
}

const wrapGreen = WrappedComponent =>
  props => {
    return (
      <div style={{ color: 'white', background: '#51cf66', padding: 8 }}>
        <WrappedComponent {...props} />
      </div>
    )
  }

const wrapRed = WrappedComponent =>
  props => {
    return (
      <div style={{ color: 'white', background: '#ff6b6b', padding: 8 }}>
        <WrappedComponent {...props} />
      </div>
    )
  }

const WrappedBox = branch(
  ({ color }) => {
    return color === 'green'
  },
  wrapGreen,
  wrapRed
)(Box)

ReactDOM.render(
  <WrappedBox color={'green'}>This should be render green</WrappedBox>,
  document.getElementById('demo1')
)

ReactDOM.render(
  <WrappedBox color={'red'}>This should be render red</WrappedBox>,
  document.getElementById('demo2')
)