UNPKG

appirio-tech-react-components-test10

Version:

Topcoder UI Kit library of components for our React apps.

99 lines (85 loc) 3.2 kB
require('./UserDropdownMenu.scss') import React from 'react' import PropTypes from 'prop-types' import classNames from 'classnames' import { Link } from 'react-router-dom' import Avatar from '../Avatar/Avatar' import Dropdown from '../Dropdown/Dropdown' const UserDropdownMenu = ({ userName, userHandle, userImage, domain, loginUrl, registerUrl, menuItems, forReactRouter}) => { const userDropdownLists = [ [ { label: 'My Profile', link: '/profile/' + userHandle, id: 0 }, { label: 'Dashboard', link: '/my-dashbaord', id: 1 }, { label: 'Settings', link: '/settings/profile', id: 2 }, { label: 'Payments', link: '//community.' + domain + '/PactsMemberServlet?module=PaymentHistory&full_list=false', id: 3 } ], [ { label: 'Help', link: '//help.' + domain, id: 0 } ], [ { label: 'Log out', link: '/logout', id: 0 } ] ] const loginButtonClasses= classNames('tc-btn', 'tc-btn-sm', { // if register url is not present, we are not showing register button // and if register button is not there, we assume it is present somewhere on the page itself // and Login button should be secondary in that case 'tc-btn-default' : !registerUrl, 'tc-btn-primary': registerUrl }) const publicDOM = ( <div className="UserDropdownMenu non-logged-in"> { registerUrl && <a className="tc-btn tc-btn-sm tc-btn-secondary" href={registerUrl} >Register</a> } { loginUrl && <a className={ loginButtonClasses } href={loginUrl} >Log in</a> } </div> ) const menuList = menuItems ? menuItems : userDropdownLists const rendreLink = (link) => { if (link.link) { return forReactRouter && !link.absolute ? <Link to={ link.link }>{ link.label }</Link> : <a href={ link.link }>{ link.label }</a> } else if (link.onClick) { return <a href="#" onClick={link.onClick} >{ link.label }</a> } } const loggedInDOM = ( <div className="UserDropdownMenu"> <Dropdown pointerShadow> <div className="dropdown-menu-header"> <span className="user-image"><Avatar avatarUrl={ userImage } userName={ userName } /></span> <span className="username">{ userHandle }</span> <img className="dropdown-arrow" src={ require('./arrow-small-down.svg') } /> </div> <div className="dropdown-menu-list"> { menuList.map((list, i) => { return ( <ul key={ i }> { list.map((link, j) => { return (<li className="user-menu-item transition" key={ j }> { rendreLink(link) } </li>) }) } </ul> ) }) } </div> </Dropdown> </div> ) return userHandle ? loggedInDOM : publicDOM } UserDropdownMenu.propTypes = { userHandle : PropTypes.string, userImage : PropTypes.string, domain : PropTypes.string.isRequired, loginUrl : PropTypes.string, registerUrl : PropTypes.string } UserDropdownMenu.defaultProps = { loginUrl : '/login', registerUrl : '/register' } export default UserDropdownMenu