p5.js-web-editor/client/components/Nav.jsx

172 lines
4.8 KiB
React
Raw Normal View History

import React, { PropTypes } from 'react';
2016-06-24 00:29:55 +02:00
import { Link } from 'react-router';
function Nav(props) {
return (
2016-07-14 23:20:44 +02:00
<nav className="nav" role="navigation" title="main-navigation">
2016-07-13 17:59:47 +02:00
<ul className="nav__items-left" title="project-menu">
<li className="nav__item">
2016-07-12 18:25:48 +02:00
<a
className="nav__new"
2017-01-05 21:27:57 +01:00
onClick={() => {
if (props.warnIfUnsavedChanges()) {
props.newProject();
}
}}
>
New
2016-07-12 18:25:48 +02:00
</a>
</li>
{(() => { // eslint-disable-line
if (!props.project.owner || props.project.owner && props.project.owner.id === props.user.id) {
return (
<li className="nav__item">
<a
className="nav__save"
onClick={() => {
if (props.user.authenticated) {
props.saveProject();
} else {
props.openForceAuthentication();
}
}}
>
Save
</a>
</li>
);
}
})()}
{(() => { // eslint-disable-line
if (props.project.id) {
return (
<li className="nav__item">
<a className="nav__clone" onClick={props.cloneProject}>
Duplicate
</a>
</li>
);
}
})()}
{(() => { // eslint-disable-line
if (props.project.id) {
return (
<li className="nav__item">
<a className="nav__export" onClick={() => props.exportProjectAsZip(props.project.id)}>
Download
</a>
</li>
);
}
})()}
{(() => { // eslint-disable-line
if (props.project.id) {
return (
<li className="nav__item">
2016-09-07 04:37:29 +02:00
<a onClick={props.showShareModal}>
Share
</a>
</li>
);
}
})()}
{(() => { // eslint-disable-line
if (props.user.authenticated) {
return (
<li className="nav__item">
<p className="nav__open">
2016-08-28 03:52:00 +02:00
<Link
to="/sketches"
onClick={props.stopSketch}
>
Open
</Link>
</p>
</li>
);
}
})()}
<li className="nav__item">
<p className="nav__open">
<Link to="/p5/sketches">
Examples
</Link>
</p>
</li>
<li className="nav__item">
<p className="nav__reference">
<a
href="https://p5js.org/reference/"
target="_blank"
>Reference</a>
</p>
</li>
2016-08-22 18:35:59 +02:00
<li className="nav__item">
<p className="nav__about">
<Link to="/about">
About
</Link>
</p>
</li>
</ul>
2016-07-13 17:59:47 +02:00
<ul className="nav__items-right" title="user-menu">
2016-08-28 02:46:20 +02:00
{(() => {
if (!props.user.authenticated) {
return (
2016-12-19 23:56:39 +01:00
<li className="nav__item">
2016-08-28 02:46:20 +02:00
<p>
<Link to="/login">Log in</Link> <span className="nav__item-spacer">or</span> <Link to="/signup">Sign up</Link>
2016-08-28 02:46:20 +02:00
</p>
</li>
);
}
return (
<li className="nav__item">
<a>Hello, {props.user.username}!</a>
<ul className="nav__dropdown">
<li className="nav__dropdown-heading">
<a>Hello, {props.user.username}!</a>
</li>
2016-08-28 02:46:20 +02:00
<li>
<Link to="/sketches">
My sketches
2016-08-28 02:46:20 +02:00
</Link>
</li>
<li>
<a onClick={props.logoutUser} >
Log out
2016-08-28 02:46:20 +02:00
</a>
</li>
</ul>
</li>
);
})()}
</ul>
</nav>
);
2016-06-24 00:29:55 +02:00
}
Nav.propTypes = {
newProject: PropTypes.func.isRequired,
saveProject: PropTypes.func.isRequired,
2016-07-15 19:11:50 +02:00
exportProjectAsZip: PropTypes.func.isRequired,
2016-07-15 19:36:33 +02:00
cloneProject: PropTypes.func.isRequired,
user: PropTypes.shape({
authenticated: PropTypes.bool.isRequired,
username: PropTypes.string,
id: PropTypes.string
2016-08-18 00:35:15 +02:00
}).isRequired,
project: PropTypes.shape({
id: PropTypes.string,
owner: PropTypes.shape({
id: PropTypes.string
})
2016-08-28 02:46:20 +02:00
}),
2016-08-28 03:52:00 +02:00
logoutUser: PropTypes.func.isRequired,
2016-09-07 04:37:29 +02:00
stopSketch: PropTypes.func.isRequired,
showShareModal: PropTypes.func.isRequired,
openForceAuthentication: PropTypes.func.isRequired
};
2016-06-24 00:29:55 +02:00
export default Nav;