Handle form updates

This commit is contained in:
Christian Cueni 2019-11-18 13:46:27 +01:00
parent a2af5759bb
commit 662071d066
5 changed files with 40 additions and 28 deletions

View File

@ -7,7 +7,7 @@
:saved="saved"
:final="final"
:placeholder="placeholder"
:reopen="$emit('reopen')"
:reopen="reopenSubmission"
></submission-form>
</div>
@ -22,6 +22,7 @@
<final-submission
v-if="final"
:user-input="userInput"
:shared-msg="sharedMsg"
@reopen="$emit('reopen')"></final-submission>
</div>
</template>
@ -36,7 +37,7 @@
FinalSubmission
},
props: ['userInput', 'saved', 'placeholder', 'action', 'reopen', 'document'],
props: ['userInput', 'saved', 'placeholder', 'action', 'reopen', 'document', 'sharedMsg'],
computed: {
final() {
@ -45,6 +46,9 @@
},
methods: {
reopenSubmission() {
this.$emit('reopen');
},
saveInput(input) {
this.$emit('saveInput', input);
}

View File

@ -7,7 +7,7 @@
></document-block>
<div class="final-submission__explanation">
<info-icon class="final-submission__explanation-icon"></info-icon>
<span class="final-submission__explanation-text">Das Ergebnis wurde mit der Lehrperson geteilt</span>
<span class="final-submission__explanation-text">{{sharedMsg}}</span>
<a class="final-submission__reopen" @click="$emit('reopen')">Bearbeiten</a>
</div>
</div>
@ -19,7 +19,7 @@
import {newLineToParagraph} from '@/helpers/text';
export default {
props: ['userInput'],
props: ['userInput', 'sharedMsg'],
components: {
InfoIcon,

View File

@ -4,6 +4,7 @@ mutation UpdateSubmissionFeedback($input: UpdateSubmissionFeedbackInput!) {
updatedSubmissionFeedback {
id
text
final
}
}
}

View File

@ -16,12 +16,14 @@
</div>
<div class="feedback-submission">
<feedback-form
v-if="studentSubmission"
@turnIn="turnIn"
@saveInput="saveInput"
@reopen="reopen"
:user-input="studentSubmission.submissionfeedback"
:placholder="'Feedback erfassen'"
:action="'Feedback teilen'"
:shared-msg="'Dieses Feedback wurde geteilt.'"
:saved="!unsaved"
>
<div v-if="!final" class="feedback-submission__emojis emojis">
@ -30,7 +32,7 @@
<span @click="addEmoji('🤩')">🤩</span>
<span @click="addEmoji('😎')">😎</span>
<span @click="addEmoji('🤔')">🤔</span>
<span@click="addEmoji('👍🏻')">👍🏻</span>
<span @click="addEmoji('👍🏻')">👍🏻</span>
<span @click="addEmoji('👎🏻')">👎🏻</span>
</div>
</feedback-form>
@ -84,8 +86,6 @@
this.updateFeedbackText(feedbackText);
},
_save: debounce(function () {
const that = this;
this.saving++;
this.$apollo.mutate({
mutation: UPDATE_FEEDBACK_MUTATION,
@ -97,23 +97,7 @@
}
}
},
update(store, {data: {updateSubmissionFeedback: {successful, updatedSubmissionFeedback}}}) {
try {
if (successful) {
const query = STUDENT_SUBMISSIONS_QUERY;
const variables = {
id: that.studentSubmission.id
};
const data = store.readQuery({query, variables});
data.studentSubmission = Object.assign({}, that.studentSubmission);
store.writeQuery({query, variables, data});
}
} catch (e) {
console.error(e);
// Query did not exist in the cache, and apollo throws a generic Error. Do nothing
}
}
update: this.updateCache
}).then(() => {
this.saving--;
if (this.saving === 0) {
@ -141,7 +125,8 @@
final: true
}
}
}
},
update: this.updateCache
});
},
reopen() {
@ -159,9 +144,27 @@
final: false
}
}
}
},
update: this.updateCache
});
},
updateCache(store, {data: {updateSubmissionFeedback: {successful, updatedSubmissionFeedback}}}) {
try {
if (successful) {
const query = STUDENT_SUBMISSIONS_QUERY;
const variables = {
id: this.studentSubmission.id
};
const data = store.readQuery({query, variables});
data.studentSubmission.submissionfeedback = Object.assign({}, updatedSubmissionFeedback);
store.writeQuery({query, variables, data});
}
} catch (e) {
console.error(e);
// Query did not exist in the cache, and apollo throws a generic Error. Do nothing
}
},
updateFeedbackText(text) {
this.studentSubmission = Object.assign({}, this.studentSubmission, {
submissionfeedback: Object.assign({}, this.studentSubmission.submissionfeedback, {text: text})
@ -206,6 +209,6 @@
}
.emojis {
font-size: toRem(24px);
font-size: toRem(32px);
}
</style>

View File

@ -52,7 +52,11 @@ class UpdateSubmissionFeedback(relay.ClientIDMutation):
(submission_feedback, created) = SubmissionFeedback.objects.get_or_create(teacher=user,
student_submission_id=student_submission_id)
submission_feedback.final = submission_feedback_data.get('final') or submission_feedback.final
final = submission_feedback.final
if 'final' in submission_feedback_data:
final = submission_feedback_data.get('final')
submission_feedback.final = final
submission_feedback.text = submission_feedback_data.get('text')
submission_feedback.save()