p5.js-web-editor/client/modules/IDE/components/Sidebar.js

72 lines
2.0 KiB
JavaScript
Raw Normal View History

import React, { PropTypes } from 'react';
2016-07-08 20:57:22 +02:00
import classNames from 'classnames';
2016-07-14 18:47:54 +02:00
import InlineSVG from 'react-inlinesvg';
const rightArrowUrl = require('../../../images/right-arrow.svg');
const leftArrowUrl = require('../../../images/left-arrow.svg');
function Sidebar(props) {
2016-07-14 18:47:54 +02:00
const sidebarClass = classNames({
sidebar: true,
'sidebar--contracted': !props.isExpanded
});
return (
2016-07-15 23:25:54 +02:00
<nav className={sidebarClass} title="file-navigation" role="navigation">
<div className="sidebar__header">
<h3 className="sidebar__title">Sketch Files</h3>
2016-07-14 18:47:54 +02:00
<div className="sidebar__icons">
2016-07-31 04:46:48 +02:00
<button
aria-label="add file"
2016-07-14 18:47:54 +02:00
className="sidebar__add"
onClick={props.newFile}
>
+
2016-07-31 04:46:48 +02:00
</button>
<button
aria-label="collapse file navigation"
2016-07-14 18:47:54 +02:00
className="sidebar__contract"
onClick={props.collapseSidebar}
>
<InlineSVG src={leftArrowUrl} />
2016-07-31 04:46:48 +02:00
</button>
<button
aria-label="expand file navigation"
2016-07-14 18:47:54 +02:00
className="sidebar__expand"
onClick={props.expandSidebar}
>
<InlineSVG src={rightArrowUrl} />
2016-07-31 04:46:48 +02:00
</button>
2016-07-14 18:47:54 +02:00
</div>
</div>
<ul className="sidebar__file-list">
2016-07-08 20:57:22 +02:00
{props.files.map(file => {
let itemClass = classNames({
'sidebar__file-item': true,
'sidebar__file-item--selected': file.id === props.selectedFile.id
});
return (
2016-07-12 21:11:45 +02:00
<li
className={itemClass}
key={file.id}
>
2016-07-12 18:25:48 +02:00
<a
onClick={() => props.setSelectedFile(file.id)}
2016-07-12 21:11:45 +02:00
>{file.name}</a>
2016-07-12 18:25:48 +02:00
</li>
2016-07-08 20:57:22 +02:00
);
})}
</ul>
2016-07-14 23:20:44 +02:00
</nav>
);
}
Sidebar.propTypes = {
2016-07-08 20:57:22 +02:00
files: PropTypes.array.isRequired,
selectedFile: PropTypes.shape({
id: PropTypes.string.isRequired
}),
setSelectedFile: PropTypes.func.isRequired
};
export default Sidebar;