frontend/app/metadata/CommissionProjectView.jsx (79 lines of code) (raw):
import React from "react";
import PropTypes from "prop-types";
/**
* component to display working group->commission->project->master "breadcrumb"
*/
class CommissionProjectView extends React.Component {
static propTypes = {
entry: PropTypes.object,
horizontal: PropTypes.bool,
clickable: PropTypes.bool,
onProjectClicked: PropTypes.func,
};
constructor(props) {
super(props);
this.clickedProject = this.clickedProject.bind(this);
}
shouldDisplay() {
if (!this.props.entry) return false;
if (!this.props.entry.gnmMetadata) return false;
if (!this.props.entry.gnmMetadata.type) return false;
return true;
}
clickedProject() {
if (this.props.clickable && this.props.onProjectClicked)
this.props.onProjectClicked();
}
render() {
if (!this.props.entry || !this.props.entry.gnmMetadata)
return <div className="comm-project-locator" />;
const meta = this.props.entry.gnmMetadata;
const extraProps = this.props.horizontal
? { display: "inline", marginRight: "1em" }
: {};
return (
<div
className="comm-project-locator"
style={{ display: this.shouldDisplay() ? "inline-block" : "none" }}
>
<ul className="comm-project-locator silent-list">
<li style={extraProps}>
{meta.workingGroupName
? meta.workingGroupName
: "(no working group)"}
</li>
<li style={extraProps}>
<img
src="assets/images/icon_commission.png"
alt="commission"
className="inline-bullet-image"
/>
{meta.commissionName}
</li>
<li style={extraProps}>
<img
src="assets/images/icon_project.png"
alt="project"
className="inline-bullet-image"
/>
<a
onClick={this.clickedProject}
className={this.props.clickable ? "clickable" : ""}
>
{meta.projectName}
</a>
</li>
<li style={{ display: meta.masterName ? "inherit" : "none" }}>
<img
src="assets/images/icon_master.png"
alt="master"
className="inline-bullet-image"
/>
{meta.masterName}
</li>
</ul>
</div>
);
}
}
export default CommissionProjectView;