public/js/components/AtomEdit/AtomEditHeader.js (62 lines of code) (raw):
import React from 'react';
import {PropTypes} from 'prop-types';
import {atomPropType} from '../../constants/atomPropType.js';
import {allAtomTypes} from '../../constants/atomData.js';
import {ManagedForm, ManagedField} from '../ManagedEditor';
import {getTitleForAtom, isAtomWorkshopEditable} from '../../util/atomDataExtractors';
import FormFieldTextInput from '../FormFields/FormFieldTextInput';
import FormFieldArrayWrapper from '../FormFields/FormFieldArrayWrapper';
import FormFieldTagPicker from '../FormFields/FormFieldTagPicker';
export default class AtomEditHeader extends React.Component {
static propTypes = {
atom: atomPropType.isRequired,
onUpdate: PropTypes.func
};
renderDate(dateType) {
const dateInfo = this.props.atom.contentChangeDetails[dateType];
if (!dateInfo) {
return 'Never';
}
const date = new Date(dateInfo.date);
const nameOfUser = dateInfo.user ? ` by ${dateInfo.user.firstName} ${dateInfo.user.lastName}` : '';
return `${date.toLocaleDateString()} at ${date.toLocaleTimeString()} ${nameOfUser}`;
}
renderAtomTitleEdit = (atom) => {
if(isAtomWorkshopEditable(atom)) {
return (
<ManagedForm data={atom} updateData={this.props.onUpdate} formName={`${atom.atomType.toLowerCase()}Editor`}>
<ManagedField fieldLocation="title" name="Public title:">
<FormFieldTextInput/>
</ManagedField>
<ManagedField fieldLocation="commissioningDesks" name="Commissioning desks:">
<FormFieldArrayWrapper>
<FormFieldTagPicker tagType="tracking" />
</FormFieldArrayWrapper>
</ManagedField>
</ManagedForm>
);
}
return (
<h4 className="atom-card__subheading">Title: {getTitleForAtom(atom)}</h4>
);
};
render () {
const atomTypeData = allAtomTypes.filter(atomData => {
return atomData.type.toLowerCase() === this.props.atom.atomType.toLowerCase();
})[0];
const atomTypeName = atomTypeData ? atomTypeData.fullName : this.props.atom.atomType;
return (
<div className="atom-card--header" key={this.props.atom.atomType}>
<div className="atom-card__icon">
<img src={`/assets/images/typeicons/${this.props.atom.atomType.toLowerCase()}-icon.svg`} />
</div>
<div className="atom-card__details">
<h3 className="atom-card__heading">{atomTypeName} Atom</h3>
{this.renderAtomTitleEdit(this.props.atom)}
<ul className="atom-card__dates">
<li><b>Created: </b>{this.renderDate('created')}</li>
<li><b>Last Modified: </b>{this.renderDate('lastModified')}</li>
<li><b>Published: </b>{this.renderDate('published')}</li>
</ul>
</div>
</div>
);
}
}