✨ make login/logout options on dropdown
This commit is contained in:
parent
a28a4a5c83
commit
32efc40298
4 changed files with 24 additions and 12 deletions
|
@ -58,23 +58,27 @@ const DropdownWrapper = styled.ul`
|
|||
`;
|
||||
|
||||
// TODO: Add Icon to the left of the items in the menu
|
||||
// const MaybeIcon = (Element, label) => Element && <Element aria-label={label} />;
|
||||
const MaybeIcon = (Element, label) => Element && <Element aria-label={label} />;
|
||||
|
||||
const Dropdown = ({ items, align }) => (
|
||||
<DropdownWrapper align={align} >
|
||||
{/* className="nav__items-left" */}
|
||||
{items && items.map(({ title, icon, href }) => (
|
||||
{items && items.map(({
|
||||
title, icon, href, action
|
||||
}) => (
|
||||
<li key={`nav-${title && title.toLowerCase()}`}>
|
||||
<Link to={href}>
|
||||
{/* {MaybeIcon(icon, `Navigate to ${title}`)} */}
|
||||
{title}
|
||||
</Link>
|
||||
{MaybeIcon(icon, `Navigate to ${title}`)}
|
||||
{href
|
||||
? <IconButton to={href}>{title}</IconButton>
|
||||
: <IconButton onClick={() => action()}>{title}</IconButton>}
|
||||
|
||||
</li>
|
||||
))
|
||||
}
|
||||
</DropdownWrapper>
|
||||
);
|
||||
|
||||
|
||||
Dropdown.propTypes = {
|
||||
align: PropTypes.oneOf(['left', 'right']),
|
||||
items: PropTypes.arrayOf(PropTypes.shape({
|
||||
|
|
|
@ -17,7 +17,7 @@ const IconButton = (props) => {
|
|||
const Icon = icon;
|
||||
|
||||
return (<ButtonWrapper
|
||||
iconBefore={<Icon />}
|
||||
iconBefore={icon && <Icon />}
|
||||
kind={Button.kinds.inline}
|
||||
focusable="false"
|
||||
{...otherProps}
|
||||
|
@ -25,7 +25,11 @@ const IconButton = (props) => {
|
|||
};
|
||||
|
||||
IconButton.propTypes = {
|
||||
icon: PropTypes.func.isRequired
|
||||
icon: PropTypes.func
|
||||
};
|
||||
|
||||
IconButton.defaultProps = {
|
||||
icon: null
|
||||
};
|
||||
|
||||
export default IconButton;
|
||||
|
|
|
@ -34,7 +34,7 @@ class App extends React.Component {
|
|||
render() {
|
||||
return (
|
||||
<div className="app">
|
||||
{this.state.isMounted && !window.devToolsExtension && getConfig('NODE_ENV') === 'development' && <DevTools />}
|
||||
{false && this.state.isMounted && !window.devToolsExtension && getConfig('NODE_ENV') === 'development' && <DevTools />}
|
||||
{this.props.children}
|
||||
</div>
|
||||
);
|
||||
|
|
|
@ -46,18 +46,20 @@ const NavItem = styled.li`
|
|||
position: relative;
|
||||
`;
|
||||
|
||||
const getNatOptions = (username = undefined) =>
|
||||
const getNavOptions = (username = undefined, logoutUser = () => {}) =>
|
||||
(username
|
||||
? [
|
||||
{ icon: PreferencesIcon, title: 'Preferences', href: '/mobile/preferences', },
|
||||
{ icon: PreferencesIcon, title: 'My Stuff', href: `/mobile/${username}/sketches` },
|
||||
{ icon: PreferencesIcon, title: 'Examples', href: '/mobile/p5/sketches' },
|
||||
{ icon: PreferencesIcon, title: 'Original Editor', href: '/', },
|
||||
{ icon: PreferencesIcon, title: 'Logout', action: logoutUser, },
|
||||
]
|
||||
: [
|
||||
{ icon: PreferencesIcon, title: 'Preferences', href: '/mobile/preferences', },
|
||||
{ icon: PreferencesIcon, title: 'Examples', href: '/mobile/p5/sketches' },
|
||||
{ icon: PreferencesIcon, title: 'Original Editor', href: '/', },
|
||||
{ icon: PreferencesIcon, title: 'Login', href: '/login', },
|
||||
]
|
||||
);
|
||||
|
||||
|
@ -65,7 +67,7 @@ const MobileIDEView = (props) => {
|
|||
const {
|
||||
preferences, ide, editorAccessibility, project, updateLintMessage, clearLintMessage,
|
||||
selectedFile, updateFileContent, files, user, params,
|
||||
closeEditorOptions, showEditorOptions,
|
||||
closeEditorOptions, showEditorOptions, logoutUser,
|
||||
startRefreshSketch, stopSketch, expandSidebar, collapseSidebar, clearConsole, console,
|
||||
showRuntimeErrorWarning, hideRuntimeErrorWarning, startSketch, getProject, clearPersistedState
|
||||
} = props;
|
||||
|
@ -75,7 +77,7 @@ const MobileIDEView = (props) => {
|
|||
const { username } = user;
|
||||
|
||||
const [triggerNavDropdown, NavDropDown] = useAsModal(<Dropdown
|
||||
items={getNatOptions(username)}
|
||||
items={getNavOptions(username, logoutUser)}
|
||||
align="right"
|
||||
/>);
|
||||
|
||||
|
@ -267,6 +269,8 @@ MobileIDEView.propTypes = {
|
|||
username: PropTypes.string,
|
||||
}).isRequired,
|
||||
|
||||
logoutUser: PropTypes.func.isRequired,
|
||||
|
||||
getProject: PropTypes.func.isRequired,
|
||||
clearPersistedState: PropTypes.func.isRequired,
|
||||
params: PropTypes.shape({
|
||||
|
|
Loading…
Reference in a new issue