UNPKG

react-mdlite

Version:

React wrappers for Material Design Lite (MDL) components

93 lines (74 loc) 2.73 kB
var React = require('react'); var PureRenderMixin = require('react/addons').addons.PureRenderMixin; var mdlUpgradable = require('../utils/mdlUpgradable'); var mdlModifiable = require('../utils/mdlModifiable'); var mdlHelpers = require('../utils/mdlHelpers'); var modifiers = ['overlay-drawer-button', 'fixed-drawer', 'fixed-header', 'large-screen-only'], misc = {}; var Layout = React.createClass({ displayName: 'MaterialLayout', mixins: [ PureRenderMixin ], upgradeCommon(element) { switch (element.type) { case 'span': return mdlHelpers.updateChildWithClassName(['mdl-layout-title'], element); case 'nav': return this.upgradeNavigation(element); default: return element; } }, upgradeNavigation(nav) { var children = React.Children.map(nav.props.children, function (child) { return mdlHelpers.updateChildWithClassName(['mdl-navigation__link'], child); }); return mdlHelpers.updateChildWithClassName(['mdl-navigation'], nav, children); }, upgradeHeader(headerChildren) { return React.Children.map(headerChildren, function (child) { if (child.type.displayName === 'Tabs') { return child; } var grandChildren = React.Children.map(child.props.children, function (grandChild) { if (grandChild.props.spacer) { return mdlHelpers.updateChildWithClassName(['mdl-layout-spacer'], grandChild); } return this.upgradeCommon(grandChild); }, this); return mdlHelpers.updateChildWithClassName(['mdl-layout__header-row'], child, grandChildren); }, this); }, upgradeDrawer(drawerChildren) { return React.Children.map(drawerChildren, this.upgradeCommon); }, upgradeContent(contentChildren) { return contentChildren; }, upgradeComponent(child) { switch (child.type) { case 'header': return mdlHelpers.updateChildWithClassName( ['mdl-layout__header', child.props.transparent ? 'mdl-layout__header--transparent' : ''], child, this.upgradeHeader(child.props.children) ); case 'div': return mdlHelpers.updateChildWithClassName( ['mdl-layout__drawer'], child, this.upgradeDrawer(child.props.children) ); case 'main': return mdlHelpers.updateChildWithClassName( ['mdl-layout__content'], child, this.upgradeContent(child.props.children) ); default: return child; } }, render: function() { return ( <div {...this.props}> { React.Children.map(this.props.children, this.upgradeComponent) } </div> ); } }); module.exports = mdlModifiable(mdlUpgradable(Layout), modifiers, misc);