Skip to content

Commit

Permalink
Proper reloading of exercise when ref. solution is submitted/deleted.
Browse files Browse the repository at this point in the history
  • Loading branch information
krulis-martin committed Oct 3, 2021
1 parent dea034a commit 78ce1c9
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,7 @@ SubmitSolutionContainer.propTypes = {
presubmitSizeLimitOK: PropTypes.bool,
progressObserverId: PropTypes.string,
submitSolution: PropTypes.func.isRequired,
afterEvaluationStarts: PropTypes.func,
presubmitSolution: PropTypes.func.isRequired,
uploadedFiles: PropTypes.array,
removedFiles: PropTypes.array,
Expand Down Expand Up @@ -275,11 +276,13 @@ export default withLinks(
progressObserverId: getProgressObserverId(state),
};
},
(dispatch, { id, userId, onSubmit, onReset, presubmitValidation }) => ({
(dispatch, { id, userId, onSubmit, afterEvaluationStarts = null, onReset, presubmitValidation }) => ({
changeNote: note => dispatch(changeNote(note)),
cancel: () => dispatch(cancel()),
submitSolution: (note, files, runtimeEnvironmentId = null, entryPoint = null, progressObserverId = null) =>
dispatch(onSubmit(userId, id, note, files, runtimeEnvironmentId, entryPoint, progressObserverId)),
dispatch(onSubmit(userId, id, note, files, runtimeEnvironmentId, entryPoint, progressObserverId)).then(
afterEvaluationStarts
),
presubmitSolution: files => dispatch(presubmitValidation(id, files)),
reset: () => dispatch(resetUpload(id)) && dispatch(onReset(userId, id)),
afterEvaluationFinishes: () => Promise.all([dispatch(fetchUsersSolutions(userId, id)), dispatch(canSubmit(id))]),
Expand Down
16 changes: 11 additions & 5 deletions src/pages/Exercise/Exercise.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import ForkExerciseForm from '../../components/forms/ForkExerciseForm';
import { isSubmitting } from '../../redux/selectors/submission';
import {
fetchExerciseIfNeeded,
reloadExercise,
forkExercise,
attachExerciseToGroup,
detachExerciseFromGroup,
Expand Down Expand Up @@ -103,6 +104,7 @@ class Exercise extends Component {
deleteReferenceSolution,
groups,
groupsAccessor,
reload,
forkExercise,
attachingGroupId,
detachingGroupId,
Expand Down Expand Up @@ -254,6 +256,7 @@ class Exercise extends Component {
id={exercise.id}
onSubmit={submitReferenceSolution}
presubmitValidation={presubmitReferenceSolution}
afterEvaluationStarts={reload}
onReset={init}
isOpen={submitting}
solutionFilesLimit={exercise.solutionFilesLimit}
Expand Down Expand Up @@ -281,21 +284,22 @@ Exercise.propTypes = {
exerciseId: PropTypes.string.isRequired,
}).isRequired,
}).isRequired,
loadAsync: PropTypes.func.isRequired,
exercise: ImmutablePropTypes.map,
forkedFrom: ImmutablePropTypes.map,
runtimeEnvironments: ImmutablePropTypes.map,
referenceSolutions: ImmutablePropTypes.map,
intl: PropTypes.object.isRequired,
submitting: PropTypes.bool,
initCreateReferenceSolution: PropTypes.func.isRequired,
links: PropTypes.object,
deleteReferenceSolution: PropTypes.func.isRequired,
forkExercise: PropTypes.func.isRequired,
groups: ImmutablePropTypes.map,
groupsAccessor: PropTypes.func.isRequired,
attachingGroupId: PropTypes.string,
detachingGroupId: PropTypes.string,
loadAsync: PropTypes.func.isRequired,
reload: PropTypes.func.isRequired,
initCreateReferenceSolution: PropTypes.func.isRequired,
deleteReferenceSolution: PropTypes.func.isRequired,
forkExercise: PropTypes.func.isRequired,
attachExerciseToGroup: PropTypes.func.isRequired,
detachExerciseFromGroup: PropTypes.func.isRequired,
};
Expand Down Expand Up @@ -335,8 +339,10 @@ export default withLinks(
}
) => ({
loadAsync: userId => Exercise.loadAsync({ exerciseId }, dispatch, { userId }),
reload: () => dispatch(reloadExercise(exerciseId)),
initCreateReferenceSolution: userId => dispatch(init(userId, exerciseId)),
deleteReferenceSolution: solutionId => dispatch(deleteReferenceSolution(solutionId)),
deleteReferenceSolution: solutionId =>
dispatch(deleteReferenceSolution(solutionId)).then(() => dispatch(reloadExercise(exerciseId))),
forkExercise: (forkId, data) => dispatch(forkExercise(exerciseId, forkId, data)),
attachExerciseToGroup: groupId => dispatch(attachExerciseToGroup(exerciseId, groupId)),
detachExerciseFromGroup: groupId => dispatch(detachExerciseFromGroup(exerciseId, groupId)),
Expand Down
1 change: 1 addition & 0 deletions src/redux/modules/exercises.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ export const additionalActionTypes = {
export const loadExercise = actions.pushResource;
export const fetchExercisesIfNeeded = actions.fetchIfNeeded;
export const fetchExercise = actions.fetchResource;
export const reloadExercise = (id, meta = {}) => actions.fetchResource(id, { allowReload: true, ...meta });
export const fetchExerciseIfNeeded = actions.fetchOneIfNeeded;
export const invalidateExercise = actions.invalidate;

Expand Down

0 comments on commit 78ce1c9

Please sign in to comment.