Skip to content

Commit 667b930

Browse files
committed
Read only fix
1 parent 064bf79 commit 667b930

File tree

3 files changed

+47
-11
lines changed

3 files changed

+47
-11
lines changed

src/components/ChallengesComponent/ChallengeCard/index.js

+9-6
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import ChallengeStatus from '../ChallengeStatus'
1212
import ChallengeTag from '../ChallengeTag'
1313
import styles from './ChallengeCard.module.scss'
1414
import { formatDate } from '../../../util/date'
15-
import { CHALLENGE_STATUS, COMMUNITY_APP_URL, DIRECT_PROJECT_URL, MESSAGE, ONLINE_REVIEW_URL } from '../../../config/constants'
15+
import { CHALLENGE_STATUS, COMMUNITY_APP_URL, DIRECT_PROJECT_URL, MESSAGE, ONLINE_REVIEW_URL, PROJECT_ROLES } from '../../../config/constants'
1616
import ConfirmationModal from '../../Modal/ConfirmationModal'
1717
import { checkChallengeEditPermission, checkReadOnlyRoles } from '../../../util/tc'
1818
import AlertModal from '../../Modal/AlertModal'
@@ -119,7 +119,8 @@ class ChallengeCard extends React.Component {
119119
isDeleteLaunch: false,
120120
isSaving: false,
121121
isCheckChalengePermission: false,
122-
hasEditChallengePermission: false
122+
hasEditChallengePermission: false,
123+
loginUserRoleInProject: ''
123124
}
124125
this.onUpdateConfirm = this.onUpdateConfirm.bind(this)
125126
this.onUpdateLaunch = this.onUpdateLaunch.bind(this)
@@ -202,13 +203,13 @@ class ChallengeCard extends React.Component {
202203

203204
render () {
204205
const { isLaunch, isConfirm, isSaving, isDeleteLaunch, isCheckChalengePermission, hasEditChallengePermission } = this.state
205-
const { setActiveProject, challenge, reloadChallengeList, isBillingAccountExpired, disableHover, getStatusText, challengeTypes } = this.props
206+
const { setActiveProject, challenge, reloadChallengeList, isBillingAccountExpired, disableHover, getStatusText, challengeTypes, loginUserRoleInProject } = this.props
206207
const deleteMessage = isCheckChalengePermission
207208
? 'Checking permissions...'
208209
: `Do you want to delete "${challenge.name}"?`
209210
const orUrl = `${ONLINE_REVIEW_URL}/review/actions/ViewProjectDetails?pid=${challenge.legacyId}`
210211
const communityAppUrl = `${COMMUNITY_APP_URL}/challenges/${challenge.id}`
211-
const isReadOnly = checkReadOnlyRoles(this.props.auth.token)
212+
const isReadOnly = checkReadOnlyRoles(this.props.auth.token) || loginUserRoleInProject === PROJECT_ROLES.READ
212213

213214
return (
214215
<div className={styles.item}>
@@ -299,7 +300,8 @@ class ChallengeCard extends React.Component {
299300
ChallengeCard.defaultPrps = {
300301
reloadChallengeList: () => { },
301302
challengeTypes: [],
302-
setActiveProject: () => {}
303+
setActiveProject: () => {},
304+
loginUserRoleInProject: ''
303305
}
304306

305307
ChallengeCard.propTypes = {
@@ -312,7 +314,8 @@ ChallengeCard.propTypes = {
312314
disableHover: PropTypes.bool,
313315
getStatusText: PropTypes.func,
314316
challengeTypes: PropTypes.arrayOf(PropTypes.shape()),
315-
auth: PropTypes.object.isRequired
317+
auth: PropTypes.object.isRequired,
318+
loginUserRoleInProject: PropTypes.string
316319
}
317320

318321
export default withRouter(ChallengeCard)

src/components/ChallengesComponent/ChallengeList/index.js

+19-2
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ class ChallengeList extends Component {
4343
challengeProjectOption: this.props.filterProjectOption,
4444
challengeStatus: this.props.status,
4545
challengeType: this.props.filterChallengeType,
46-
challengeDate: this.props.filterDate
46+
challengeDate: this.props.filterDate,
47+
loginUserRoleInProject: ''
4748
}
4849
this.directUpdateSearchParam = this.updateSearchParam.bind(this) // update search param without debounce
4950
this.handlePageChange = this.handlePageChange.bind(this) // update search param without debounce
@@ -57,6 +58,20 @@ class ChallengeList extends Component {
5758
this.resetFilter = this.resetFilter.bind(this)
5859
}
5960

61+
componentWillReceiveProps (nextProps) {
62+
const { activeProject, auth } = nextProps
63+
if (activeProject && auth && auth.user) {
64+
const loggedInUser = auth.user
65+
const projectMembers = activeProject.members
66+
const loginUserProjectInfo = _.find(projectMembers, { userId: loggedInUser.userId })
67+
if (loginUserProjectInfo && this.state.loginUserRoleInProject !== loginUserProjectInfo.role) {
68+
this.setState({
69+
loginUserRoleInProject: loginUserProjectInfo.role
70+
})
71+
}
72+
}
73+
}
74+
6075
/**
6176
* Update filter for getting project
6277
* @param {String} searchText search text
@@ -346,7 +361,8 @@ class ChallengeList extends Component {
346361
challengeProjectOption,
347362
challengeStatus,
348363
challengeType,
349-
challengeDate
364+
challengeDate,
365+
loginUserRoleInProject
350366
} = this.state
351367

352368
const {
@@ -777,6 +793,7 @@ class ChallengeList extends Component {
777793
disableHover
778794
getStatusText={this.getStatusTextFunc(selfService)}
779795
challengeTypes={challengeTypes}
796+
loginUserRoleInProject={loginUserRoleInProject}
780797
auth={this.props.auth}
781798
/>
782799
</li>

src/containers/ChallengeEditor/index.js

+19-3
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ import { loadSubmissions } from '../../actions/challengeSubmissions'
3636
import { loadProject } from '../../actions/projects'
3737

3838
import { connect } from 'react-redux'
39-
import { SUBMITTER_ROLE_UUID, MESSAGE } from '../../config/constants'
39+
import { SUBMITTER_ROLE_UUID, MESSAGE, PROJECT_ROLES } from '../../config/constants'
4040
import { patchChallenge } from '../../services/challenges'
4141
import ConfirmationModal from '../../components/Modal/ConfirmationModal'
4242
import AlertModal from '../../components/Modal/AlertModal'
@@ -59,7 +59,8 @@ class ChallengeEditor extends Component {
5959
showSuccessModal: false,
6060
showLaunchModal: false,
6161
showRejectModal: false,
62-
cancelReason: null
62+
cancelReason: null,
63+
loginUserRoleInProject: ''
6364
}
6465

6566
this.onLaunchChallenge = this.onLaunchChallenge.bind(this)
@@ -125,7 +126,7 @@ class ChallengeEditor extends Component {
125126

126127
componentWillReceiveProps (nextProps) {
127128
const { match } = this.props
128-
const { match: newMatch, loadChallengeDetails, loadResources, loadSubmissions } = nextProps
129+
const { match: newMatch, loadChallengeDetails, loadResources, loadSubmissions, projectDetail, loggedInUser } = nextProps
129130
const projectId = _.get(newMatch.params, 'projectId', null)
130131
const challengeId = _.get(newMatch.params, 'challengeId', null)
131132
if (
@@ -136,6 +137,15 @@ class ChallengeEditor extends Component {
136137
} else {
137138
this.setState({ challengeDetails: nextProps.challengeDetails })
138139
}
140+
if (projectDetail && loggedInUser) {
141+
const projectMembers = projectDetail.members
142+
const loginUserProjectInfo = _.find(projectMembers, { userId: loggedInUser.userId })
143+
if (loginUserProjectInfo && this.state.loginUserRoleInProject !== loginUserProjectInfo.role) {
144+
this.setState({
145+
loginUserRoleInProject: loginUserProjectInfo.role
146+
})
147+
}
148+
}
139149
}
140150

141151
async fetchProjectDetails (newMatch) {
@@ -175,6 +185,10 @@ class ChallengeEditor extends Component {
175185
if (isAdmin) {
176186
return true
177187
}
188+
const { loginUserRoleInProject } = this.state
189+
if (loginUserRoleInProject === PROJECT_ROLES.READ) {
190+
return false
191+
}
178192
const userRoles = _.filter(
179193
challengeResources,
180194
cr => cr.memberId === `${loggedInUser.userId}`
@@ -532,6 +546,7 @@ class ChallengeEditor extends Component {
532546
rejectChallenge={this.rejectChallenge}
533547
showRejectChallengeModal={showRejectChallengeModal}
534548
loggedInUser={loggedInUser}
549+
enableEdit={enableEdit}
535550
/>
536551
)}
537552
/>
@@ -571,6 +586,7 @@ class ChallengeEditor extends Component {
571586
loggedInUser={loggedInUser}
572587
projectPhases={projectPhases}
573588
assignYourselfCopilot={this.assignYourselfCopilot}
589+
enableEdit={enableEdit}
574590
/>
575591
)}
576592
/>

0 commit comments

Comments
 (0)