frontend/app/searchnbrowse/DetailsPanel.jsx (93 lines of code) (raw):
import React from "react";
import PropTypes from "prop-types";
import PathView, { TRUNC_END, TRUNC_MIDDLE, TRUNC_START } from "./PathView";
import CommissionProjectView from "../metadata/CommissionProjectView.jsx";
import MetadataTabView from "../metadata/MetadataTabView.jsx";
import DownloadButton from "../common/DownloadButton";
import SearchComponentContext from "./SearchComponentContext";
class DetailsPanel extends React.Component {
static propTypes = {
entry: PropTypes.object,
previewRequestedCb: PropTypes.func.isRequired,
projectClicked: PropTypes.func,
className: PropTypes.string,
};
static mdTabNames = ["GNM metadata", "Media Info", "MXFS metadata", "All"];
static mdTabPrefixes = ["GNM_", "_mediainfo", "MXFS_", ""];
constructor(props) {
super(props);
this.projectClicked = this.projectClicked.bind(this);
}
projectClicked() {
const entry = this.props.entry;
if (!entry) return;
if (
this.props.projectClicked &&
entry.gnmMetadata &&
entry.gnmMetadata.projectId
)
this.props.projectClicked(entry.gnmMetadata.projectId);
}
render() {
const entry = this.props.entry;
if (!entry) {
return (
<div className={this.props.className}>
<span className="centered filename semilarge">Nothing selected</span>
</div>
);
}
const pathParts = entry.attributes.name
.split("/")
.filter((entry) => entry.length > 0);
const fileName =
pathParts.length > 0 ? pathParts[pathParts.length - 1] : "(no name)";
return (
<div className={this.props.className}>
<span className="centered filename semilarge">{fileName}</span>
<span className="centered">
{entry.gnmMetadata
? entry.gnmMetadata.type
: "(no filetype)"}
</span>
{this.context.vaultId && entry ? (
<span className="centered">
<DownloadButton
vaultId={this.context.vaultId}
oid={this.props.entry.oid}
fileName={fileName}
/>
</span>
) : null}
{/*
"preview" link is currently hidden until proper proxy playback is implemented
*/}
<a
style={{ display: "none" }}
className="centered clickable"
onClick={() => this.props.previewRequestedCb(entry.oid)}
>
>> Preview <<
</a>
<CommissionProjectView
entry={this.props.entry}
clickable={true}
onProjectClicked={this.projectClicked}
/>
<PathView
pathParts={pathParts.slice(0, -1)}
truncateMode={TRUNC_MIDDLE}
limit={5}
stripStart={5}
/>
<MetadataTabView
tabNames={DetailsPanel.mdTabNames}
tabPrefixes={DetailsPanel.mdTabPrefixes}
metaDataString={entry.customMeta}
/>
</div>
);
}
}
DetailsPanel.contextType = SearchComponentContext;
export default DetailsPanel;