Skip to content

Commit 0b35550

Browse files
authored
Merge pull request #2684 from appirio-tech/hotfix/show-error-for-project
[HOTFIX] [PROD] for issue #2683 - show proper error message when error happens during project loading
2 parents 85ab96e + 832b00c commit 0b35550

File tree

3 files changed

+22
-27
lines changed

3 files changed

+22
-27
lines changed

src/components/TopBar/ProjectToolBar.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ class ProjectToolBar extends React.Component {
7272
<span ref="name" onMouseEnter={this.onNameEnter} onMouseLeave={this.onNameLeave}>{_.unescape(project.name)}</span>
7373
{isTooltipVisible && <div className="breadcrumb-tooltip">{_.unescape(project.name)}</div>}
7474
</div>}
75-
<div className="bar-column project-name mobile"><span>{_.unescape(project.name)}</span></div>
75+
{project && project.name && <div className="bar-column project-name mobile"><span>{_.unescape(project.name)}</span></div>}
7676
<div className="bar-column">
7777
<NewProjectNavLink compact />
7878
{userMenu}

src/projects/detail/ProjectDetail.jsx

+14-14
Original file line numberDiff line numberDiff line change
@@ -57,20 +57,20 @@ const ProjectDetailView = (props) => {
5757
const regex = /#(feed-([0-9]+)|comment-([0-9]+))/
5858
const match = props.location.hash.match(regex)
5959
const ids = match ? { feedId: match[2], commentId: match[3] } : {}
60-
const children = React.Children.map(props.children, (child) => {
61-
return React.cloneElement(child, {
62-
project: props.project,
63-
currentMemberRole: currentMemberRole || '',
64-
isSuperUser: props.isSuperUser,
65-
isManageUser: props.isManageUser,
66-
isCustomerUser: props.isCustomerUser,
67-
isProcessing: props.isProcessing,
68-
allProductTemplates: props.allProductTemplates,
69-
productsTimelines: props.productsTimelines,
70-
...ids
71-
})
72-
})
73-
return <div>{children}</div>
60+
61+
const { component: Component } = props
62+
const componentProps = {
63+
project: props.project,
64+
currentMemberRole: currentMemberRole || '',
65+
isSuperUser: props.isSuperUser,
66+
isManageUser: props.isManageUser,
67+
isCustomerUser: props.isCustomerUser,
68+
isProcessing: props.isProcessing,
69+
allProductTemplates: props.allProductTemplates,
70+
productsTimelines: props.productsTimelines,
71+
...ids
72+
}
73+
return <Component {...componentProps} />
7474
}
7575
const EnhancedProjectDetailView = spinner(errorHandler(ProjectDetailView))
7676

src/projects/routes.jsx

+7-12
Original file line numberDiff line numberDiff line change
@@ -21,20 +21,15 @@ import { requiresAuthentication } from '../components/AuthenticatedComponent'
2121
const ProjectLayoutWithAuth = requiresAuthentication(ProjectLayout)
2222
const FileDownloadWithAuth = requiresAuthentication(FileDownload)
2323

24-
// NOTE:
25-
// we cannot move up ProjectDetail component
26-
// we have to keep it like it's done below because
27-
// Dashboard, SpecificationContainer and ProjectMessages have to be immediate children
28-
// of ProjectDetail component because ProjectDetail updates children props by React.Children method
2924
const ProjectDetailWithAuth = withProps({ main:
3025
<Switch>
31-
<Route exact path="/projects/:projectId" render={() => <ProjectDetail><Dashboard /></ProjectDetail>} />
32-
<Route path="/projects/:projectId/status/:statusId" render={() => <ProjectDetail><Dashboard /></ProjectDetail>} />
33-
<Route path="/projects/:projectId/specification" render={() => <ProjectDetail><SpecificationContainer /></ProjectDetail>} />
34-
<Route path="/projects/:projectId/scope" render={() => <ProjectDetail><Scope /></ProjectDetail>} />
35-
<Route path="/projects/:projectId/plan" render={() => <ProjectDetail><ProjectPlan /></ProjectDetail>} />
36-
<Route path="/projects/:projectId/add-phase" render={() => <ProjectDetail><ProjectAddPhaseContainer /></ProjectDetail>} />
37-
<Route path="/projects/:projectId/discussions/:discussionId?" render={() => <ProjectDetail><ProjectMessages /></ProjectDetail>} />
26+
<Route exact path="/projects/:projectId" render={() => <ProjectDetail component={Dashboard} />} />
27+
<Route path="/projects/:projectId/status/:statusId" render={() => <ProjectDetail component={Dashboard} />} />
28+
<Route path="/projects/:projectId/specification" render={() => <ProjectDetail component={SpecificationContainer} />} />
29+
<Route path="/projects/:projectId/scope" render={() => <ProjectDetail component={Scope} />} />
30+
<Route path="/projects/:projectId/plan" render={() => <ProjectDetail component={ProjectPlan} />} />
31+
<Route path="/projects/:projectId/add-phase" render={() => <ProjectDetail component={ProjectAddPhaseContainer} />} />
32+
<Route path="/projects/:projectId/discussions/:discussionId?" render={() => <ProjectDetail component={ProjectMessages} />} />
3833
<Route render={() => <CoderBot code={404}/>} />
3934
</Switch>
4035
})(ProjectLayoutWithAuth)

0 commit comments

Comments
 (0)