admin-on-rest-fr05t1k
Version:
A frontend Framework for building admin applications on top of REST services, using ES6, React and Material UI
64 lines (56 loc) • 1.84 kB
JavaScript
import React, { PropTypes } from 'react';
import inflection from 'inflection';
import MenuItem from 'material-ui/MenuItem';
import { Link } from 'react-router';
import pure from 'recompose/pure';
import compose from 'recompose/compose';
import DashboardMenuItem from './DashboardMenuItem';
import translate from '../../i18n/translate';
const styles = {
main: {
display: 'flex',
flexDirection: 'column',
justifyContent: 'flex-start',
height: '100%',
},
};
const translatedResourceName = (resource, translate) =>
translate(`resources.${resource.name}.name`, {
smart_count: 2,
_: resource.options && resource.options.label ?
translate(resource.options.label, { smart_count: 2, _: resource.options.label }) :
inflection.humanize(inflection.pluralize(resource.name)),
});
const Menu = ({ hasDashboard, onMenuTap, resources, translate, logout }) => (
<div style={styles.main}>
{hasDashboard && <DashboardMenuItem onTouchTap={onMenuTap}/>}
{resources
.filter(r => r.list)
.map(resource =>
<MenuItem
key={resource.name}
containerElement={<Link to={`/${resource.name}`} />}
primaryText={translatedResourceName(resource, translate)}
leftIcon={<resource.icon />}
onTouchTap={onMenuTap}
/>,
)
}
{logout}
</div>
);
Menu.propTypes = {
hasDashboard: PropTypes.bool,
logout: PropTypes.element,
onMenuTap: PropTypes.func,
resources: PropTypes.array.isRequired,
translate: PropTypes.func.isRequired,
};
Menu.defaultProps = {
onMenuTap: () => null,
};
const enhance = compose(
pure,
translate,
);
export default enhance(Menu);