labo-components
Version:
104 lines (91 loc) • 3.48 kB
JSX
import React from 'react';
import PropTypes from 'prop-types';
import IDUtil from '../../../../util/IDUtil';
import Project from '../../../../model/Project';
import { Link } from 'react-router-dom';
/**
* Shows the project form and handles saving the project data using the given api.
*/
class ProjectForm extends React.PureComponent {
handleSubmit(e) {
e.preventDefault();
const project = Project.construct(this.props.project);
project.name = this.name.value; //TODO user a proper react ref
project.description = this.description.value;
this.saveProject(project);
return false;
}
saveProject(project, callback) {
this.props.api.save(this.props.user.id, project, proj => {
if (proj && proj.id) {
this.props.projectDidSave(proj.id);
} else {
alert('An error occurred while saving this project');
}
})
}
render() {
let cancelButton = null;
if(this.props.cancelLink && this.props.cancelLink !== '') {
cancelButton = (
<Link to={this.props.cancelLink} className="btn">
Cancel
</Link>
)
} else if(this.props.onCancel){
cancelButton = (
<button className="btn" type="button" onClick={this.props.onCancel}>
Cancel
</button>
);
}
return (
<form className={IDUtil.cssClassName('project-form')} onSubmit={this.handleSubmit.bind(this)}>
<div className="new-project-container">
<span className="bg__new-project-wrapper">
<label className="label project-modal-left">Name</label>
<input
type="text"
name="name"
required={true}
className="project-modal-right"
defaultValue={this.props.project.name}
ref={elem => (this.name = elem)}/>
</span>
<span className="bg__new-project-wrapper">
<label className="label project-modal-left">Description</label>
<textarea
name="description"
className="project-modal-right"
defaultValue={this.props.project.description}
ref={elem => (this.description = elem)}/>
</span>
</div>
<div className="actions">
{cancelButton}
<input
type="submit"
className="btn primary add"
value={this.props.submitButton}/>
</div>
</form>
)
}
}
ProjectForm.propTypes = {
api: PropTypes.func.isRequired,
id: PropTypes.string,
cancelLink: PropTypes.string,
onCancel: PropTypes.func,
project: Project.getPropTypes(),
projectDidSave: PropTypes.func.isRequired,
submitButton: PropTypes.string.isRequired,
user: PropTypes.shape({
id: PropTypes.string.isRequired,
name: PropTypes.string,
attributes: PropTypes.shape({
allowPersonalCollections: PropTypes.bool
})
}).isRequired,
};
export default ProjectForm;