Skip to content

Commit

Permalink
Unaccept solution
Browse files Browse the repository at this point in the history
  • Loading branch information
SemaiCZE committed Oct 24, 2017
1 parent a0f891f commit 4298b96
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 17 deletions.
17 changes: 8 additions & 9 deletions src/components/buttons/AcceptSolution/AcceptSolution.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,28 +4,27 @@ import { FormattedMessage } from 'react-intl';
import Icon from 'react-fontawesome';
import Button from '../../widgets/FlatButton';

const AcceptSolution = ({ accepted, accept }) =>
const AcceptSolution = ({ accepted, accept, unaccept }) =>
accepted === true
? <Button bsStyle="success" disabled>
<Icon name="check-circle" />
{' '}
? <Button bsStyle="info" onClick={unaccept}>
<Icon name="check-circle" />{' '}
<FormattedMessage
id="app.acceptSolution.accepted"
defaultMessage="Accepted"
defaultMessage="Remove grading mark"
/>
</Button>
: <Button bsStyle="primary" onClick={accept}>
<Icon name="check-circle-o" />
{' '}
<Icon name="check-circle-o" />{' '}
<FormattedMessage
id="app.acceptSolution.notAccepted"
defaultMessage="Accept this solution"
defaultMessage="Mark for grading"
/>
</Button>;

AcceptSolution.propTypes = {
accepted: PropTypes.bool.isRequired,
accept: PropTypes.func.isRequired
accept: PropTypes.func.isRequired,
unaccept: PropTypes.func.isRequired
};

export default AcceptSolution;
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,32 @@ import PropTypes from 'prop-types';
import { connect } from 'react-redux';

import AcceptSolution from '../../components/buttons/AcceptSolution';
import { acceptSubmission } from '../../redux/modules/submissions';
import {
acceptSubmission,
unacceptSubmission
} from '../../redux/modules/submissions';
import { isAccepted } from '../../redux/selectors/submissions';

const AcceptSolutionContainer = ({ accepted, accept }) => {
return <AcceptSolution accepted={accepted} accept={accept} />;
const AcceptSolutionContainer = ({ accepted, accept, unaccept }) => {
return (
<AcceptSolution accepted={accepted} accept={accept} unaccept={unaccept} />
);
};

AcceptSolutionContainer.propTypes = {
id: PropTypes.string.isRequired,
accepted: PropTypes.bool.isRequired,
accept: PropTypes.func.isRequired
accept: PropTypes.func.isRequired,
unaccept: PropTypes.func.isRequired
};

const mapStateToProps = (state, { id }) => ({
accepted: isAccepted(id)(state)
});

const mapDispatchToProps = (dispatch, { id }) => ({
accept: () => dispatch(acceptSubmission(id))
accept: () => dispatch(acceptSubmission(id)),
unaccept: () => dispatch(unacceptSubmission(id))
});

export default connect(mapStateToProps, mapDispatchToProps)(
Expand Down
2 changes: 1 addition & 1 deletion src/locales/cs.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"app.EditEnvironmentLimitsForm.cloneAll.yesNoQuestion": "Do you really want to use these limits for all the tests of all runtime environments?",
"app.acceptSolution.accepted": "Označeno pro hodnocení",
"app.acceptSolution.accepted": "Odebrat označení pro hodnocení",
"app.acceptSolution.notAccepted": "Označit pro hodnocení",
"app.addLicence.addLicenceTitle": "Přidat novou licenci",
"app.addLicence.failed": "Přidávání licence selhalo.",
Expand Down
2 changes: 1 addition & 1 deletion src/locales/en.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"app.EditEnvironmentLimitsForm.cloneAll.yesNoQuestion": "Do you really want to use these limits for all the tests of all runtime environments?",
"app.acceptSolution.accepted": "Marked for grading",
"app.acceptSolution.accepted": "Remove grading mark",
"app.acceptSolution.notAccepted": "Mark for grading",
"app.addLicence.addLicenceTitle": "Add new licence",
"app.addLicence.failed": "Cannot add the licence.",
Expand Down
35 changes: 34 additions & 1 deletion src/redux/modules/submissions.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@ export const additionalActionTypes = {
ACCEPT_PENDING: 'recodex/submissions/ACCEPT_PENDING',
ACCEPT_FULFILLED: 'recodex/submissions/ACCEPT_FULFILLED',
ACCEPT_FAILED: 'recodex/submissions/ACCEPT_FAILED',
UNACCEPT: 'recodex/submissions/UNACCEPT',
UNACCEPT_PENDING: 'recodex/submissions/UNACCEPT_PENDING',
UNACCEPT_FULFILLED: 'recodex/submissions/UNACCEPT_FULFILLED',
UNACCEPT_FAILED: 'recodex/submissions/UNACCEPT_FAILED',
RESUBMIT_ALL: 'recodex/submissions/RESUBMIT_ALL',
DOWNLOAD_RESULT_ARCHIVE: 'recodex/files/DOWNLOAD_RESULT_ARCHIVE'
};
Expand All @@ -58,11 +62,19 @@ export const setPoints = (submissionId, bonusPoints) =>
export const acceptSubmission = id =>
createApiAction({
type: additionalActionTypes.ACCEPT,
method: 'GET',
method: 'POST',
endpoint: `/submissions/${id}/set-accepted`,
meta: { id }
});

export const unacceptSubmission = id =>
createApiAction({
type: additionalActionTypes.UNACCEPT,
method: 'DELETE',
endpoint: `/submissions/${id}/unset-accepted`,
meta: { id }
});

export const resubmitSubmission = (id, isPrivate, isDebug = true) =>
createApiAction({
type: submissionActionTypes.SUBMIT,
Expand Down Expand Up @@ -136,6 +148,27 @@ const reducer = handleActions(
)
: item
)
),
[additionalActionTypes.UNACCEPT_PENDING]: (state, { meta: { id } }) =>
state.setIn(['resources', id, 'data', 'accepted'], false),

[additionalActionTypes.UNACCEPT_FAILED]: (state, { meta: { id } }) =>
state.setIn(['resources', id, 'data', 'accepted'], true),

[additionalActionTypes.UNACCEPT_FULFILLED]: (state, { meta: { id } }) =>
state.update('resources', resources =>
resources.map(
(item, itemId) =>
item.get('data') !== null
? item.update(
'data',
data =>
itemId === id
? data.set('accepted', false)
: data.set('accepted', true)
)
: item
)
)
}),
initialState
Expand Down

0 comments on commit 4298b96

Please sign in to comment.