From 7bd29dcc90012fcc0a2538a6a1d3a4077448a347 Mon Sep 17 00:00:00 2001 From: rishabhtc Date: Tue, 7 Oct 2025 17:47:55 +0530 Subject: [PATCH 1/3] Removed specficScorecard logic --- src/actions/challenges.js | 29 ------------ .../ChallengeReviewer-Field/index.js | 44 ++----------------- src/services/challenges.js | 10 +---- 3 files changed, 5 insertions(+), 78 deletions(-) diff --git a/src/actions/challenges.js b/src/actions/challenges.js index 187d1f1e..74a7252d 100644 --- a/src/actions/challenges.js +++ b/src/actions/challenges.js @@ -23,7 +23,6 @@ import { updateChallengeSkillsApi, fetchDefaultReviewers, fetchScorecards, - fetchScorecardById, fetchWorkflows } from '../services/challenges' import { searchProfilesByUserIds } from '../services/user' @@ -795,34 +794,6 @@ export function loadScorecards (filters = {}) { } } -/** - * Load a specific scorecard by ID - * @param {string} scorecardId the scorecard ID - */ -export function loadScorecardById (scorecardId) { - return async (dispatch) => { - try { - const scorecard = await fetchScorecardById(scorecardId) - dispatch({ - type: LOAD_CHALLENGE_METADATA_SUCCESS, - metadataKey: 'scorecardById', - metadataValue: { - ...scorecard, - id: scorecardId - } - }) - } catch (error) { - console.error('Error loading scorecard by ID:', error) - // Return null on error - dispatch({ - type: LOAD_CHALLENGE_METADATA_SUCCESS, - metadataKey: 'scorecardById', - metadataValue: null - }) - } - } -} - /** * Load default reviewers * @param {Object} filters filters for default reviewers diff --git a/src/components/ChallengeEditor/ChallengeReviewer-Field/index.js b/src/components/ChallengeEditor/ChallengeReviewer-Field/index.js index 5168f06f..b16c74a9 100644 --- a/src/components/ChallengeEditor/ChallengeReviewer-Field/index.js +++ b/src/components/ChallengeEditor/ChallengeReviewer-Field/index.js @@ -4,7 +4,7 @@ import { connect } from 'react-redux' import cn from 'classnames' import { PrimaryButton, OutlineButton } from '../../Buttons' import { REVIEW_OPPORTUNITY_TYPE_LABELS, REVIEW_OPPORTUNITY_TYPES, VALIDATION_VALUE_TYPE } from '../../../config/constants' -import { loadScorecards, loadDefaultReviewers, loadWorkflows, loadScorecardById } from '../../../actions/challenges' +import { loadScorecards, loadDefaultReviewers, loadWorkflows } from '../../../actions/challenges' import styles from './ChallengeReviewer-Field.module.scss' import { convertDollarToInteger, validateValue } from '../../../util/input-check' @@ -75,13 +75,7 @@ class ChallengeReviewerField extends Component { } componentDidMount () { - if (this.props.readOnly) { - // In read-only mode, only load specific scorecards for existing reviewers - this.loadSpecificScorecards() - } else { - // In edit mode, load all scorecards for dropdown - this.loadScorecards() - } + this.loadScorecards() this.loadDefaultReviewers() this.loadWorkflows() } @@ -123,27 +117,6 @@ class ChallengeReviewerField extends Component { loadScorecards(filters) } - loadSpecificScorecards () { - const { challenge, loadScorecardById } = this.props - const reviewers = challenge.reviewers || [] - - // Get unique scorecard IDs from reviewers - const scorecardIds = [...new Set( - reviewers - .filter(reviewer => reviewer.scorecardId) - .map(reviewer => reviewer.scorecardId) - )] - - if (scorecardIds.length === 0) { - return - } - - // Load each scorecard individually - scorecardIds.forEach(scorecardId => { - loadScorecardById(scorecardId) - }) - } - loadDefaultReviewers () { const { challenge, loadDefaultReviewers } = this.props @@ -424,13 +397,6 @@ class ChallengeReviewerField extends Component { {readOnly ? ( {(() => { - const { metadata = {} } = this.props - const specificScorecard = metadata.scorecardById - if (specificScorecard && specificScorecard.id === reviewer.scorecardId) { - return `${specificScorecard.name || 'Unknown'} - ${specificScorecard.type || 'Unknown'} (${specificScorecard.challengeTrack || 'Unknown'}) v${specificScorecard.version || 'Unknown'}` - } - - // Fallback to searching in the general scorecards array const scorecard = scorecards.find(s => s.id === reviewer.scorecardId) return scorecard ? `${scorecard.name || 'Unknown'} - ${scorecard.type || 'Unknown'} (${scorecard.challengeTrack || 'Unknown'}) v${scorecard.version || 'Unknown'}` : 'Not selected' })()} @@ -745,8 +711,7 @@ ChallengeReviewerField.propTypes = { readOnly: PropTypes.bool, loadScorecards: PropTypes.func.isRequired, loadDefaultReviewers: PropTypes.func.isRequired, - loadWorkflows: PropTypes.func.isRequired, - loadScorecardById: PropTypes.func.isRequired + loadWorkflows: PropTypes.func.isRequired } const mapStateToProps = (state) => ({ @@ -757,8 +722,7 @@ const mapStateToProps = (state) => ({ const mapDispatchToProps = { loadScorecards, loadDefaultReviewers, - loadWorkflows, - loadScorecardById + loadWorkflows } export default connect(mapStateToProps, mapDispatchToProps)(ChallengeReviewerField) diff --git a/src/services/challenges.js b/src/services/challenges.js index 6a019f5e..ebe6c961 100644 --- a/src/services/challenges.js +++ b/src/services/challenges.js @@ -335,15 +335,7 @@ export async function fetchScorecards (filters = {}) { const response = await axiosInstance.get(`${SCORECARDS_API_URL}?${qs.stringify(query, { encode: false })}`) return _.get(response, 'data', {}) } -/** - * Api request for fetching a specific scorecard by ID - * @param {string} scorecardId the scorecard ID - * @returns {Promise<*>} - */ -export async function fetchScorecardById (scorecardId) { - const response = await axiosInstance.get(`${SCORECARDS_API_URL}/${scorecardId}`) - return _.get(response, 'data', {}) -} + /** * Api request for fetching default reviewers * @param {Object} filters filters for default reviewers From 8fdd9bc4a3b41cd2cad2ca7125bd8240c5f0677e Mon Sep 17 00:00:00 2001 From: rishabhtc Date: Tue, 7 Oct 2025 18:24:51 +0530 Subject: [PATCH 2/3] Removed extra calls for scorecard from parent component --- src/containers/ChallengeEditor/index.js | 29 +------------------------ 1 file changed, 1 insertion(+), 28 deletions(-) diff --git a/src/containers/ChallengeEditor/index.js b/src/containers/ChallengeEditor/index.js index a3995be2..cd328a9c 100644 --- a/src/containers/ChallengeEditor/index.js +++ b/src/containers/ChallengeEditor/index.js @@ -30,9 +30,7 @@ import { replaceResourceInRole, updateChallengeSkills, createResource, - deleteResource, - loadScorecards, - loadDefaultReviewers + deleteResource } from '../../actions/challenges' import { loadSubmissions } from '../../actions/challengeSubmissions' @@ -99,8 +97,6 @@ class ChallengeEditor extends Component { loadSubmissions, loadChallengeDetails, loadResources, - loadScorecards, - loadDefaultReviewers, submissionsPerPage } = this.props loadTimelineTemplates() @@ -111,8 +107,6 @@ class ChallengeEditor extends Component { // loadChallengeTerms() loadGroups() loadResourceRoles() - loadScorecards() - this.fetchDefaultReviewersForChallenge(this.props.challengeDetails, loadDefaultReviewers) this.fetchChallengeDetails( match, loadChallengeDetails, @@ -129,15 +123,6 @@ class ChallengeEditor extends Component { // }) } - fetchDefaultReviewersForChallenge (challengeDetails, loadDefaultReviewersFn) { - const typeId = _.get(challengeDetails, 'typeId') - const trackId = _.get(challengeDetails, 'trackId') - - if (typeId && trackId && typeof loadDefaultReviewersFn === 'function') { - loadDefaultReviewersFn({ typeId, trackId }) - } - } - componentWillUnmount () { // this.unlisten() } @@ -156,18 +141,6 @@ class ChallengeEditor extends Component { this.setState({ challengeDetails: nextProps.challengeDetails }) } - const prevTypeId = _.get(this.props.challengeDetails, 'typeId') - const prevTrackId = _.get(this.props.challengeDetails, 'trackId') - const nextTypeId = _.get(nextProps.challengeDetails, 'typeId') - const nextTrackId = _.get(nextProps.challengeDetails, 'trackId') - - if ( - nextTypeId && - nextTrackId && - (nextTypeId !== prevTypeId || nextTrackId !== prevTrackId) - ) { - this.fetchDefaultReviewersForChallenge(nextProps.challengeDetails, nextProps.loadDefaultReviewers) - } if (projectDetail && loggedInUser) { const projectMembers = projectDetail.members const loginUserProjectInfo = _.find(projectMembers, { userId: loggedInUser.userId }) From 90a8e6effaaf91f9b8c81da7bec748201718fb99 Mon Sep 17 00:00:00 2001 From: rishabhtc Date: Tue, 7 Oct 2025 18:39:34 +0530 Subject: [PATCH 3/3] load scorecard only if either track or type present in challenge --- .../ChallengeReviewer-Field/index.js | 13 ++++++------- src/containers/ChallengeEditor/index.js | 6 +----- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/components/ChallengeEditor/ChallengeReviewer-Field/index.js b/src/components/ChallengeEditor/ChallengeReviewer-Field/index.js index b16c74a9..4b282993 100644 --- a/src/components/ChallengeEditor/ChallengeReviewer-Field/index.js +++ b/src/components/ChallengeEditor/ChallengeReviewer-Field/index.js @@ -75,20 +75,20 @@ class ChallengeReviewerField extends Component { } componentDidMount () { - this.loadScorecards() + if (this.props.challenge.track || this.props.challenge.type) { + this.loadScorecards() + } this.loadDefaultReviewers() this.loadWorkflows() } componentDidUpdate (prevProps) { - const { challenge, readOnly } = this.props + const { challenge } = this.props const prevChallenge = prevProps.challenge if (challenge && prevChallenge && (challenge.type !== prevChallenge.type || challenge.track !== prevChallenge.track)) { - if (readOnly) { - this.loadSpecificScorecards() - } else { + if (challenge.track || challenge.type) { this.loadScorecards() } } @@ -704,8 +704,7 @@ ChallengeReviewerField.propTypes = { metadata: PropTypes.shape({ scorecards: PropTypes.array, defaultReviewers: PropTypes.array, - workflows: PropTypes.array, - scorecardById: PropTypes.object + workflows: PropTypes.array }), isLoading: PropTypes.bool, readOnly: PropTypes.bool, diff --git a/src/containers/ChallengeEditor/index.js b/src/containers/ChallengeEditor/index.js index cd328a9c..3dd79e45 100644 --- a/src/containers/ChallengeEditor/index.js +++ b/src/containers/ChallengeEditor/index.js @@ -666,8 +666,6 @@ ChallengeEditor.propTypes = { loadResources: PropTypes.func, loadResourceRoles: PropTypes.func, loadSubmissions: PropTypes.func, - loadScorecards: PropTypes.func, - loadDefaultReviewers: PropTypes.func, challengeResources: PropTypes.arrayOf(PropTypes.object), challengeSubmissions: PropTypes.arrayOf(PropTypes.object), challengeDetails: PropTypes.object, @@ -767,9 +765,7 @@ const mapDispatchToProps = { updateChallengeSkills, loadProject, createResource, - deleteResource, - loadScorecards, - loadDefaultReviewers + deleteResource } export default withRouter(