100 lines
3.3 KiB
JavaScript
100 lines
3.3 KiB
JavaScript
import React, { Component } from 'react';
|
|
import PropTypes from 'prop-types';
|
|
import { connect } from 'react-redux';
|
|
import { workspaceName } from '../../actions/workspaceActions';
|
|
import { getProject, resetProject } from '../../actions/projectActions';
|
|
import { clearMessages, returnErrors } from '../../actions/messageActions';
|
|
|
|
import { withRouter } from 'react-router-dom';
|
|
|
|
import Home from '../Home';
|
|
import Breadcrumbs from '../Breadcrumbs';
|
|
|
|
import Backdrop from '@material-ui/core/Backdrop';
|
|
import CircularProgress from '@material-ui/core/CircularProgress';
|
|
|
|
|
|
class Project extends Component {
|
|
|
|
componentDidMount() {
|
|
this.props.resetProject();
|
|
this.getProject();
|
|
}
|
|
|
|
componentDidUpdate(props) {
|
|
if (props.location.pathname !== this.props.location.pathname ||
|
|
props.match.params[`${this.props.type}Id`] !== this.props.match.params[`${this.props.type}Id`]) {
|
|
if (this.props.message.msg) {
|
|
this.props.clearMessages();
|
|
}
|
|
this.getProject();
|
|
}
|
|
if (this.props.message !== props.message) {
|
|
if (this.props.message.id === 'PROJECT_EMPTY' || this.props.message.id === 'GET_PROJECT_FAIL') {
|
|
if (this.props.type !== 'share') {
|
|
this.props.returnErrors('', 404, 'GET_PROJECT_FAIL');
|
|
this.props.history.push(`/${this.props.type}`);
|
|
} else {
|
|
this.props.history.push('/');
|
|
this.props.returnErrors('', 404, 'GET_SHARE_FAIL');
|
|
}
|
|
}
|
|
else if (this.props.message.id === 'GET_PROJECT_SUCCESS') {
|
|
this.props.workspaceName(this.props.project.title);
|
|
}
|
|
else if (this.props.message.id === 'PROJECT_DELETE_SUCCESS' || this.props.message.id === 'GALLERY_DELETE_SUCCESS') {
|
|
this.props.history.push(`/${this.props.type}`);
|
|
}
|
|
}
|
|
}
|
|
|
|
componentWillUnmount() {
|
|
this.props.resetProject();
|
|
this.props.workspaceName(null);
|
|
}
|
|
|
|
getProject = () => {
|
|
var id = this.props.location.pathname.replace(/\/[a-z]{1,}\//, '');
|
|
var param = this.props.location.pathname.replace(`/${id}`, '').replace('/', '');
|
|
this.props.getProject(param, id);
|
|
}
|
|
|
|
render() {
|
|
var data = this.props.type === 'project' ? 'Projekte' : 'Galerie';
|
|
return (
|
|
this.props.progress ?
|
|
<Backdrop open invisible>
|
|
<CircularProgress color="primary" />
|
|
</Backdrop>
|
|
: this.props.project ?
|
|
<div>
|
|
{this.props.type !== 'share' ?
|
|
<Breadcrumbs content={[{ link: `/${this.props.type}`, title: data }, { link: this.props.location.pathname, title: this.props.project.title }]} />
|
|
: null}
|
|
<Home project={this.props.project} projectType={this.props.type} />
|
|
</div> : null
|
|
);
|
|
};
|
|
}
|
|
|
|
Project.propTypes = {
|
|
workspaceName: PropTypes.func.isRequired,
|
|
getProject: PropTypes.func.isRequired,
|
|
resetProject: PropTypes.func.isRequired,
|
|
clearMessages: PropTypes.func.isRequired,
|
|
returnErrors: PropTypes.func.isRequired,
|
|
project: PropTypes.object.isRequired,
|
|
type: PropTypes.string.isRequired,
|
|
message: PropTypes.object.isRequired,
|
|
progress: PropTypes.bool.isRequired
|
|
};
|
|
|
|
const mapStateToProps = state => ({
|
|
project: state.project.projects[0],
|
|
progress: state.project.progress,
|
|
type: state.project.type,
|
|
message: state.message
|
|
});
|
|
|
|
export default connect(mapStateToProps, { workspaceName, getProject, resetProject, clearMessages, returnErrors })(withRouter(Project));
|