diff --git a/src/components/Assignments/Assignment/AssignmentStatusIcon/AssignmentStatusIcon.js b/src/components/Assignments/Assignment/AssignmentStatusIcon/AssignmentStatusIcon.js index 5a6b4a97c..b27e80b5b 100644 --- a/src/components/Assignments/Assignment/AssignmentStatusIcon/AssignmentStatusIcon.js +++ b/src/components/Assignments/Assignment/AssignmentStatusIcon/AssignmentStatusIcon.js @@ -2,121 +2,98 @@ import React from 'react'; import PropTypes from 'prop-types'; import { FormattedMessage } from 'react-intl'; import StatusIcon from '../../../widgets/StatusIcon'; -import Icon, { CodeIcon, EvaluationFailedIcon } from '../../../icons'; +import Icon, { EvaluationFailedIcon } from '../../../icons'; -export const getStatusDesc = (status, lastSubmission) => { - if (status === null) { - status = 'work-in-progress'; +const AssignmentStatusIcon = ({ id, submission = null, accepted = false, isBestSolution = false }) => { + if (!submission) { + return ( + } + message={ + + } + /> + ); } - return status === 'work-in-progress' && !lastSubmission ? 'missing-submission' : status; -}; -const AssignmentStatusIcon = ({ id, status, accepted = false, isBestSolution = false }) => { - switch (status) { - case 'done': - return ( - } - message={ - <> - - {isBestSolution && !accepted && ( - - )} - - } - /> - ); + if (!submission.evaluation && !submission.failure) { + return ( + } + message={ + + } + /> + ); + } - case 'work-in-progress': - return ( - } - message={ - - } - /> - ); + if (submission.failure) { + return ( + } + message={ + + } + /> + ); + } - case 'failed': - return ( - } - message={ - <> + if (submission.evaluation.score >= 1.0) { + return ( + } + message={ + <> + + {isBestSolution && !accepted && ( - {isBestSolution && !accepted && ( - - )} - - } - /> - ); - - case 'evaluation-failed': - return ( - } - message={ - - } - /> - ); - - case 'missing-submission': - return ( - } - message={ - - } - /> - ); + )} + + } + /> + ); + } - default: - return ( - } - message={ + return ( + } + message={ + <> + + {isBestSolution && !accepted && ( - } - /> - ); - } + )} + + } + /> + ); }; AssignmentStatusIcon.propTypes = { id: PropTypes.string.isRequired, - status: PropTypes.string, + submission: PropTypes.object, accepted: PropTypes.bool, isBestSolution: PropTypes.bool, }; diff --git a/src/components/Assignments/Assignment/AssignmentStatusIcon/index.js b/src/components/Assignments/Assignment/AssignmentStatusIcon/index.js index bd63ee35e..11629b6d2 100644 --- a/src/components/Assignments/Assignment/AssignmentStatusIcon/index.js +++ b/src/components/Assignments/Assignment/AssignmentStatusIcon/index.js @@ -1 +1 @@ -export { default, getStatusDesc } from './AssignmentStatusIcon'; +export { default } from './AssignmentStatusIcon'; diff --git a/src/components/Assignments/SolutionsTable/SolutionTableRowIcons.js b/src/components/Assignments/SolutionsTable/SolutionTableRowIcons.js index 1929c9bdd..bfb67ee47 100644 --- a/src/components/Assignments/SolutionsTable/SolutionTableRowIcons.js +++ b/src/components/Assignments/SolutionsTable/SolutionTableRowIcons.js @@ -5,7 +5,7 @@ import { Link } from 'react-router-dom'; import { FormattedMessage } from 'react-intl'; import SolutionReviewIcon from '../../Solutions/SolutionReviewIcon'; -import AssignmentStatusIcon, { getStatusDesc } from '../Assignment/AssignmentStatusIcon'; +import AssignmentStatusIcon from '../Assignment/AssignmentStatusIcon'; import CommentsIcon from './CommentsIcon'; import { PlagiarismIcon } from '../../icons'; @@ -17,7 +17,6 @@ const SolutionTableRowIcons = ({ accepted, review = null, isBestSolution, - status, lastSubmission, commentsStats = null, isReviewer = false, @@ -25,12 +24,7 @@ const SolutionTableRowIcons = ({ links: { SOLUTION_PLAGIARISMS_URI_FACTORY }, }) => ( <> - + {review && } @@ -66,7 +60,6 @@ SolutionTableRowIcons.propTypes = { issues: PropTypes.number, }), isBestSolution: PropTypes.bool.isRequired, - status: PropTypes.string, lastSubmission: PropTypes.shape({ evaluation: PropTypes.shape({ score: PropTypes.number.isRequired, diff --git a/src/components/Assignments/SolutionsTable/SolutionsTable.js b/src/components/Assignments/SolutionsTable/SolutionsTable.js index cd78890e6..d0cb2daa8 100644 --- a/src/components/Assignments/SolutionsTable/SolutionsTable.js +++ b/src/components/Assignments/SolutionsTable/SolutionsTable.js @@ -131,7 +131,6 @@ const SolutionsTable = ({ status === 'done' || status === 'failed'; - const SolutionsTableRow = ({ id, attemptIndex, assignmentId, groupId, - status = null, note, lastSubmission, maxPoints, @@ -90,7 +87,6 @@ const SolutionsTableRow = ({ accepted={accepted} review={review} isBestSolution={isBestSolution} - status={status} lastSubmission={lastSubmission} commentsStats={commentsStats} isReviewer={permissionHints && permissionHints.review} @@ -103,7 +99,7 @@ const SolutionsTableRow = ({ - {showScoreAndPoints(status) ? ( + {lastSubmission.evaluation ? ( @@ -113,7 +109,7 @@ const SolutionsTableRow = ({ - {showScoreAndPoints(status) ? ( + {lastSubmission.evaluation ? ( @@ -206,7 +202,6 @@ SolutionsTableRow.propTypes = { attemptIndex: PropTypes.number.isRequired, assignmentId: PropTypes.string.isRequired, groupId: PropTypes.string.isRequired, - status: PropTypes.string, note: PropTypes.any.isRequired, maxPoints: PropTypes.number.isRequired, bonusPoints: PropTypes.number.isRequired, diff --git a/src/components/Exercises/ReferenceSolutionsTable/ReferenceSolutionsTableRow.js b/src/components/Exercises/ReferenceSolutionsTable/ReferenceSolutionsTableRow.js index 248f54a04..6af7c291d 100644 --- a/src/components/Exercises/ReferenceSolutionsTable/ReferenceSolutionsTableRow.js +++ b/src/components/Exercises/ReferenceSolutionsTable/ReferenceSolutionsTableRow.js @@ -71,7 +71,7 @@ const ReferenceSolutionsTableRow = ({ ) : ( - + = 1.0 ? 'text-success' : 'text-danger'}> )} diff --git a/src/components/ReferenceSolutions/EvaluationTable/EvaluationTable.js b/src/components/ReferenceSolutions/EvaluationTable/EvaluationTable.js index bf692ff5b..9ae86c20b 100644 --- a/src/components/ReferenceSolutions/EvaluationTable/EvaluationTable.js +++ b/src/components/ReferenceSolutions/EvaluationTable/EvaluationTable.js @@ -27,7 +27,7 @@ const EvaluationTable = ({ evaluations, renderButtons, selectedRowId = '' }) => {evaluations .sort((a, b) => { if (!a.submittedAt || !b.submittedAt) { - return a.evaluationStatus.localeCompare(b.evaluationStatus); + return a.id.localeCompare(b.id); // just to make it deterministic } return ( ((b.evaluation && b.evaluation.evaluatedAt) || b.submittedAt) - @@ -38,7 +38,7 @@ const EvaluationTable = ({ evaluations, renderButtons, selectedRowId = '' }) => - + {e.isDebug && ( {e.evaluation && ( = 1.0, })}> diff --git a/src/components/ReferenceSolutions/ReferenceSolutionDetail/ReferenceSolutionDetail.js b/src/components/ReferenceSolutions/ReferenceSolutionDetail/ReferenceSolutionDetail.js index f5e096228..3d6fece8b 100644 --- a/src/components/ReferenceSolutions/ReferenceSolutionDetail/ReferenceSolutionDetail.js +++ b/src/components/ReferenceSolutions/ReferenceSolutionDetail/ReferenceSolutionDetail.js @@ -80,12 +80,7 @@ class ReferenceSolutionDetail extends Component { if (activeSubmissionId && evaluationsJS[activeSubmissionId] && evaluationsJS[activeSubmissionId].data) { /* eslint-disable no-var */ - var { submittedBy, evaluation, failure, isCorrect, evaluationStatus, isDebug, ...restSub } = - evaluationsJS[activeSubmissionId].data; - } else evaluationStatus = 'missing-submission'; - - if (evaluationStatus === 'evaluation-failed' && !failure) { - failure = true; + var { submittedBy, evaluation, failure, isDebug, ...restSub } = evaluationsJS[activeSubmissionId].data; } return ( @@ -214,8 +209,6 @@ class ReferenceSolutionDetail extends Component { {evaluation && ( = 1.0, })}> @@ -113,8 +108,8 @@ const EvaluationDetail = ({ 0, + 'text-danger': evaluation.score < 1.0 || evaluation.points <= 0, + 'text-success': evaluation.score >= 1.0 && evaluation.points > 0, })}> {evaluation.points} / {maxPoints} @@ -123,53 +118,6 @@ const EvaluationDetail = ({ )} - {!referenceSolution && ( - - - - - - - - : - - - - {evaluationStatus === 'done' && ( - - )} - {evaluationStatus === 'work-in-progress' && ( - - )} - {evaluationStatus === 'failed' && ( - - )} - {evaluationStatus === 'evaluation-failed' && ( - - )} - {evaluationStatus === 'missing-submission' && ( - - )} - - - - )} - {viewResumbissions && ( @@ -195,12 +143,8 @@ const EvaluationDetail = ({ ); EvaluationDetail.propTypes = { - isCorrect: PropTypes.bool.isRequired, - submittedAt: PropTypes.number.isRequired, evaluation: PropTypes.object, maxPoints: PropTypes.number, - accepted: PropTypes.bool, - evaluationStatus: PropTypes.string, isDebug: PropTypes.bool.isRequired, viewResumbissions: PropTypes.bool, showScoreDetail: PropTypes.func, diff --git a/src/components/Solutions/SolutionDetail/SolutionDetail.js b/src/components/Solutions/SolutionDetail/SolutionDetail.js index 2f34aeea6..02e2ebea8 100644 --- a/src/components/Solutions/SolutionDetail/SolutionDetail.js +++ b/src/components/Solutions/SolutionDetail/SolutionDetail.js @@ -92,14 +92,7 @@ class SolutionDetail extends Component { const evaluationsJS = evaluations.toJS(); if (activeSubmissionId && evaluationsJS[activeSubmissionId] && evaluationsJS[activeSubmissionId].data) { /* eslint-disable no-var */ - var { submittedBy, evaluation, failure, isCorrect, evaluationStatus, isDebug, ...restSub } = - evaluationsJS[activeSubmissionId].data; - } else { - evaluationStatus = 'missing-submission'; - } - - if (evaluationStatus === 'evaluation-failed' && !failure) { - failure = true; + var { submittedBy, evaluation, failure, isDebug, ...restSub } = evaluationsJS[activeSubmissionId].data; } return ( @@ -110,7 +103,7 @@ class SolutionDetail extends Component { id={id} attemptIndex={attemptIndex} evaluation={evaluation} - evaluationStatus={safeGet(lastSubmission, ['evaluationStatus'], 'missing-submission')} + lastSubmission={lastSubmission} submittedAt={createdAt} userId={authorId} submittedBy={submittedBy} @@ -222,11 +215,7 @@ class SolutionDetail extends Component { {evaluation && ( - + : @@ -613,7 +613,7 @@ SolutionStatus.propTypes = { pointsPercentualThreshold: PropTypes.number, }).isRequired, evaluation: PropTypes.object, - evaluationStatus: PropTypes.string.isRequired, + lastSubmission: PropTypes.object, submittedAt: PropTypes.number.isRequired, userId: PropTypes.string.isRequired, submittedBy: PropTypes.string, diff --git a/src/pages/AssignmentSolutions/AssignmentSolutions.js b/src/pages/AssignmentSolutions/AssignmentSolutions.js index c54963e17..8172884fd 100644 --- a/src/pages/AssignmentSolutions/AssignmentSolutions.js +++ b/src/pages/AssignmentSolutions/AssignmentSolutions.js @@ -131,7 +131,6 @@ const prepareTableColumnDescriptors = defaultMemoize((loggedUserId, assignmentId review={info.review} isReviewer={info.permissionHints && info.permissionHints.review} isBestSolution={info.isBestSolution} - status={info.lastSubmission ? info.lastSubmission.evaluationStatus : null} lastSubmission={info.lastSubmission} commentsStats={info.commentsStats} plagiarism={Boolean(info.plagiarism)} @@ -314,9 +313,7 @@ const prepareTableData = defaultMemoize( permissionHints, plagiarism = null, }) => { - const statusEvaluated = - lastSubmission && - (lastSubmission.evaluationStatus === 'done' || lastSubmission.evaluationStatus === 'failed'); + const statusEvaluated = lastSubmission && (lastSubmission.evaluation || lastSubmission.failure); return { icon: { id, commentsStats, lastSubmission, accepted, review, permissionHints, isBestSolution, plagiarism }, user: usersIndex[authorId], diff --git a/src/pages/ExerciseReferenceSolutions/ExerciseReferenceSolutions.js b/src/pages/ExerciseReferenceSolutions/ExerciseReferenceSolutions.js index 896b92aad..102eb0896 100644 --- a/src/pages/ExerciseReferenceSolutions/ExerciseReferenceSolutions.js +++ b/src/pages/ExerciseReferenceSolutions/ExerciseReferenceSolutions.js @@ -136,12 +136,11 @@ const prepareTableColumnDescriptors = defaultMemoize((loggedUserId, locale, link safeGet(c2, ['evaluation', 'score'], -1) - safeGet(c1, ['evaluation', 'score'], -1) || d2 - d1, cellRenderer: lastSubmission => { const score = safeGet(lastSubmission, ['evaluation', 'score'], null); - const isCorrect = safeGet(lastSubmission, ['isCorrect'], false); return score !== null ? ( = 1.0, })}> diff --git a/src/pages/GroupUserSolutions/GroupUserSolutions.js b/src/pages/GroupUserSolutions/GroupUserSolutions.js index c0f2f7df0..29bad2ec5 100644 --- a/src/pages/GroupUserSolutions/GroupUserSolutions.js +++ b/src/pages/GroupUserSolutions/GroupUserSolutions.js @@ -96,7 +96,6 @@ const prepareTableColumnDescriptors = defaultMemoize((assignments, groupId, loca review={info.review} isReviewer={info.permissionHints && info.permissionHints.review} isBestSolution={info.isBestSolution} - status={info.lastSubmission ? info.lastSubmission.evaluationStatus : null} lastSubmission={info.lastSubmission} commentsStats={info.commentsStats} plagiarism={Boolean(info.plagiarism)} @@ -255,9 +254,7 @@ const prepareTableData = defaultMemoize( permissionHints, plagiarism = null, }) => { - const statusEvaluated = - lastSubmission && - (lastSubmission.evaluationStatus === 'done' || lastSubmission.evaluationStatus === 'failed'); + const statusEvaluated = lastSubmission && (lastSubmission.evalutaion || lastSubmission.failure); const rte = getRuntime(runtimeEnvironmentId); res.push({ diff --git a/src/redux/modules/solutions.js b/src/redux/modules/solutions.js index 2390a0688..d02a48fe9 100644 --- a/src/redux/modules/solutions.js +++ b/src/redux/modules/solutions.js @@ -19,7 +19,7 @@ import { objectFilter } from '../../helpers/common'; const resourceName = 'solutions'; const needsRefetching = item => - defaultNeedsRefetching(item) || item.getIn(['data', 'evaluationStatus']) === 'work-in-progress'; + defaultNeedsRefetching(item) || (!item.getIn(['data', 'evaluation']) && !item.getIn(['data', 'failure'])); const apiEndpointFactory = id => `/assignment-solutions/${id}`; const { actions, actionTypes, reduceActions } = factory({