UNPKG

@rocketsofawesome/mirage

Version:

[Live Demo of the Pattern Library](https://rocketsofawesome.github.io/mirage/)

100 lines (93 loc) 2.52 kB
import React from 'react' import PropTypes from 'prop-types' import * as Core from './core' import * as Components from './components' import * as Modules from './modules' const COMPONENT_RENDER_MAP = { Core: { BackgroundImage: (item) => { return ( <Core.BackgroundImage {...item.props}> {item.children.map(child => Renderer({item: child}))} </Core.BackgroundImage> ) }, Caption: (item) => <Core.Caption {...item.props}> {item.children} </Core.Caption>, H1: (item) => <Core.H1 {...item.props}> {item.children} </Core.H1>, H2: (item) => <Core.H2 {...item.props}> {item.children} </Core.H2>, H3: (item) => <Core.H3 {...item.props}> {item.children} </Core.H3>, H4: (item) => <Core.H4 {...item.props}> {item.children} </Core.H4>, H5: (item) => <Core.H5 {...item.props}> {item.children} </Core.H5>, H6: (item) => <Core.H6 {...item.props}> {item.children} </Core.H6>, Label: (item) => <Core.Label {...item.props}> {item.children} </Core.Label>, P: (item) => <Core.P {...item.props}> {item.children} </Core.P>, Grid: (item) => <Core.Grid> {item.children.map(child => Renderer({item: child}))} </Core.Grid>, Logo: () => <Core.Logo />, Sizer: (item) => <Core.Sizer {...item.props}> {item.children.map(child => Renderer({item: child}))} </Core.Sizer> }, Components: { InformationalSection: (item) => <Components.InformationalSection> {item.children.map(child => Renderer({item: child}))} </Components.InformationalSection>, BackgroundVideo: (item) => <Components.BackgroundVideo {...item.props}> {item.children.map(child => Renderer({item: child}))} </Components.BackgroundVideo> }, Modules: { Page: (item) => <Modules.Page> {item.children.map(child => Renderer({item: child}))} </Modules.Page> } } const Renderer = ({item}) => { try { return COMPONENT_RENDER_MAP[item.sys.type][item.sys.component](item.data) } catch(err) { console.warn(`It appears that you are tying to render an element that doesn't exist in the COMPONENT_RENDER_MAP`) return null } } Renderer.propTypes = { item: PropTypes.oneOfType([ PropTypes.string, PropTypes.array, PropTypes.object ]) } export default Renderer