diff --git a/src/components/ChallengeEditor/index.js b/src/components/ChallengeEditor/index.js index 76223c11..2d4bdef7 100644 --- a/src/components/ChallengeEditor/index.js +++ b/src/components/ChallengeEditor/index.js @@ -655,7 +655,11 @@ class ChallengeEditor extends Component { toggleLaunch (e) { e.preventDefault() if (this.validateChallenge()) { - this.setState({ isLaunch: true }) + if (!this.props.isBillingAccountExpired) { + this.setState({ isLaunch: true }) + } else { + this.setState({ isLaunch: true, error: 'Unable to activate challenge as Billing Account is not active.' }) + } } } @@ -1279,6 +1283,7 @@ class ChallengeEditor extends Component { errorMessage={this.state.error} onCancel={this.resetModal} onConfirm={this.onActiveChallenge} + disableConfirmButton={isBillingAccountExpired} /> ) } diff --git a/src/components/ChallengesComponent/ChallengeCard/index.js b/src/components/ChallengesComponent/ChallengeCard/index.js index 5a1258ae..4a0695a2 100644 --- a/src/components/ChallengesComponent/ChallengeCard/index.js +++ b/src/components/ChallengesComponent/ChallengeCard/index.js @@ -209,7 +209,11 @@ class ChallengeCard extends React.Component { onUpdateLaunch () { if (!this.state.isLaunch) { - this.setState({ isLaunch: true }) + if (!this.props.isBillingAccountExpired) { + this.setState({ isLaunch: true }) + } else { + this.setState({ isLaunch: true, error: 'Unable to activate challenge as Billing Account is not active.' }) + } } } @@ -272,7 +276,7 @@ class ChallengeCard extends React.Component { render () { const { isLaunch, isConfirm, isSaving, isDeleteLaunch, isCheckChalengePermission, hasEditChallengePermission } = this.state - const { challenge, shouldShowCurrentPhase, reloadChallengeList } = this.props + const { challenge, shouldShowCurrentPhase, reloadChallengeList, isBillingAccountExpired } = this.props const { phaseMessage, endTime } = getPhaseInfo(challenge) const deleteMessage = isCheckChalengePermission ? 'Checking permissions...' @@ -305,6 +309,7 @@ class ChallengeCard extends React.Component { errorMessage={this.state.error} onCancel={this.resetModal} onConfirm={this.onLaunchChallenge} + disableConfirmButton={isBillingAccountExpired} /> ) } @@ -364,7 +369,8 @@ ChallengeCard.propTypes = { shouldShowCurrentPhase: PropTypes.bool, reloadChallengeList: PropTypes.func, partiallyUpdateChallengeDetails: PropTypes.func.isRequired, - deleteChallenge: PropTypes.func.isRequired + deleteChallenge: PropTypes.func.isRequired, + isBillingAccountExpired: PropTypes.bool } export default withRouter(ChallengeCard) diff --git a/src/components/ChallengesComponent/ChallengeList/index.js b/src/components/ChallengesComponent/ChallengeList/index.js index 941c27eb..e7c355a2 100644 --- a/src/components/ChallengesComponent/ChallengeList/index.js +++ b/src/components/ChallengesComponent/ChallengeList/index.js @@ -103,7 +103,8 @@ class ChallengeList extends Component { perPage, totalChallenges, partiallyUpdateChallengeDetails, - deleteChallenge + deleteChallenge, + isBillingAccountExpired } = this.props if (warnMessage) { return @@ -215,6 +216,7 @@ class ChallengeList extends Component { reloadChallengeList={this.reloadChallengeList} partiallyUpdateChallengeDetails={partiallyUpdateChallengeDetails} deleteChallenge={deleteChallenge} + isBillingAccountExpired={isBillingAccountExpired} /> ) @@ -258,7 +260,8 @@ ChallengeList.propTypes = { perPage: PropTypes.number.isRequired, totalChallenges: PropTypes.number.isRequired, partiallyUpdateChallengeDetails: PropTypes.func.isRequired, - deleteChallenge: PropTypes.func.isRequired + deleteChallenge: PropTypes.func.isRequired, + isBillingAccountExpired: PropTypes.bool } export default ChallengeList diff --git a/src/components/ChallengesComponent/index.js b/src/components/ChallengesComponent/index.js index eb386d49..d96f9850 100644 --- a/src/components/ChallengesComponent/index.js +++ b/src/components/ChallengesComponent/index.js @@ -27,7 +27,8 @@ const ChallengesComponent = ({ perPage, totalChallenges, partiallyUpdateChallengeDetails, - deleteChallenge + deleteChallenge, + isBillingAccountExpired }) => { return ( @@ -88,6 +89,7 @@ const ChallengesComponent = ({ totalChallenges={totalChallenges} partiallyUpdateChallengeDetails={partiallyUpdateChallengeDetails} deleteChallenge={deleteChallenge} + isBillingAccountExpired={isBillingAccountExpired} /> )} @@ -112,7 +114,8 @@ ChallengesComponent.propTypes = { perPage: PropTypes.number.isRequired, totalChallenges: PropTypes.number.isRequired, partiallyUpdateChallengeDetails: PropTypes.func.isRequired, - deleteChallenge: PropTypes.func.isRequired + deleteChallenge: PropTypes.func.isRequired, + isBillingAccountExpired: PropTypes.bool } ChallengesComponent.defaultProps = { diff --git a/src/containers/ChallengeEditor/index.js b/src/containers/ChallengeEditor/index.js index cbe144b1..3be5fd34 100644 --- a/src/containers/ChallengeEditor/index.js +++ b/src/containers/ChallengeEditor/index.js @@ -148,7 +148,11 @@ class ChallengeEditor extends Component { } onLaunchChallenge () { - this.setState({ showLaunchModal: true }) + if (!this.props.isBillingAccountExpired) { + this.setState({ showLaunchModal: true }) + } else { + this.setState({ showLaunchModal: true, launchError: 'Unable to activate challenge as Billing Account is not active.' }) + } } onCloseTask () { @@ -289,6 +293,7 @@ class ChallengeEditor extends Component { errorMessage={this.state.launchError} onCancel={this.closeLaunchModal} onConfirm={this.activateChallenge} + disableConfirmButton={isBillingAccountExpired} /> const closeTaskModal = } @@ -176,7 +178,8 @@ Challenges.propTypes = { loadProjects: PropTypes.func.isRequired, setActiveProject: PropTypes.func.isRequired, partiallyUpdateChallengeDetails: PropTypes.func.isRequired, - deleteChallenge: PropTypes.func.isRequired + deleteChallenge: PropTypes.func.isRequired, + isBillingAccountExpired: PropTypes.bool } const mapStateToProps = ({ challenges, sidebar, projects }) => ({ @@ -184,7 +187,8 @@ const mapStateToProps = ({ challenges, sidebar, projects }) => ({ challengeProjectId: challenges.projectId, activeProjectId: sidebar.activeProjectId, projects: sidebar.projects, - projectDetail: projects.projectDetail + projectDetail: projects.projectDetail, + isBillingAccountExpired: projects.isBillingAccountExpired }) const mapDispatchToProps = {