@@ -5,6 +5,7 @@ import { withRouter, Route } from 'react-router-dom'
55import ChallengeEditorComponent from '../../components/ChallengeEditor'
66import ChallengeViewComponent from '../../components/ChallengeEditor/ChallengeView'
77import Loader from '../../components/Loader'
8+ import styles from './ChallengeEditor.module.scss'
89
910import {
1011 loadTimelineTemplates ,
@@ -113,10 +114,21 @@ class ChallengeEditor extends Component {
113114 loadChallengeDetails ( projectId , challengeId )
114115 }
115116
117+ isEditable ( ) {
118+ const { hasProjectAccess, metadata : { resourceRoles } , challengeResources, loggedInUser } = this . props
119+ if ( ! hasProjectAccess ) {
120+ return false
121+ }
122+ const userRoles = _ . filter ( challengeResources , cr => cr . memberId === `${ loggedInUser . userId } ` )
123+ const userResourceRoles = _ . filter ( resourceRoles , rr => _ . some ( userRoles , ur => ur . roleId === rr . id ) )
124+ return _ . some ( userResourceRoles , urr => urr . fullAccess && urr . isActive )
125+ }
126+
116127 render ( ) {
117128 const {
118129 match,
119130 isLoading,
131+ isProjectLoading,
120132 challengeDetails,
121133 challengeResources,
122134 metadata,
@@ -132,6 +144,7 @@ class ChallengeEditor extends Component {
132144 replaceResourceInRole
133145 // members
134146 } = this . props
147+ if ( isProjectLoading || isLoading ) return < Loader />
135148 const challengeId = _ . get ( match . params , 'challengeId' , null )
136149 if ( challengeId && ( ! challengeDetails || ! challengeDetails . id ) ) {
137150 return ( < Loader /> )
@@ -144,6 +157,7 @@ class ChallengeEditor extends Component {
144157 handle : submitters [ 0 ] . memberHandle
145158 }
146159 }
160+ const enableEdit = true // this.isEditable()
147161 return < div >
148162 < Route
149163 exact
@@ -171,7 +185,8 @@ class ChallengeEditor extends Component {
171185 />
172186 ) )
173187 } />
174- < Route
188+ { ! enableEdit && < div className = { styles . errorContainer } > You don't have access to edit the challenge</ div > }
189+ { enableEdit && < Route
175190 exact
176191 path = { `${ this . props . match . path } /edit` }
177192 render = { ( { match } ) => ( (
@@ -196,6 +211,7 @@ class ChallengeEditor extends Component {
196211 />
197212 ) )
198213 } />
214+ }
199215 < Route
200216 exact
201217 path = { `${ this . props . match . path } /view` }
@@ -209,6 +225,7 @@ class ChallengeEditor extends Component {
209225 token = { token }
210226 challengeId = { challengeId }
211227 assignedMemberDetails = { assignedMemberDetails }
228+ enableEdit = { enableEdit }
212229 />
213230 ) )
214231 } />
@@ -237,6 +254,8 @@ ChallengeEditor.propTypes = {
237254 loadResourceRoles : PropTypes . func ,
238255 challengeResources : PropTypes . arrayOf ( PropTypes . object ) ,
239256 challengeDetails : PropTypes . object ,
257+ isProjectLoading : PropTypes . bool ,
258+ hasProjectAccess : PropTypes . bool ,
240259 projectDetail : PropTypes . object ,
241260 // history: PropTypes.object,
242261 metadata : PropTypes . shape ( {
@@ -246,6 +265,7 @@ ChallengeEditor.propTypes = {
246265 createAttachment : PropTypes . func ,
247266 attachments : PropTypes . arrayOf ( PropTypes . shape ( ) ) ,
248267 token : PropTypes . string ,
268+ loggedInUser : PropTypes . object ,
249269 removeAttachment : PropTypes . func ,
250270 failedToLoad : PropTypes . bool ,
251271 loadMemberDetails : PropTypes . func ,
@@ -256,14 +276,17 @@ ChallengeEditor.propTypes = {
256276 // members: PropTypes.arrayOf(PropTypes.shape())
257277}
258278
259- const mapStateToProps = ( { projects : { projectDetail } , challenges : { challengeDetails, challengeResources, metadata, isLoading, attachments, failedToLoad } , auth : { token } , members : { members } } ) => ( {
279+ const mapStateToProps = ( { projects, challenges : { challengeDetails, challengeResources, metadata, isLoading, attachments, failedToLoad } , auth : { token, user } , members : { members } } ) => ( {
260280 challengeDetails,
261- projectDetail,
281+ hasProjectAccess : projects . hasProjectAccess ,
282+ projectDetail : projects . projectDetail ,
262283 challengeResources,
263284 metadata,
264285 isLoading,
286+ isProjectLoading : projects . isLoading ,
265287 attachments,
266288 token,
289+ loggedInUser : user ,
267290 failedToLoad
268291 // members
269292} )
0 commit comments