From 3e518e21c035c33aeba57cf0520c86b96cd0bb76 Mon Sep 17 00:00:00 2001 From: Ramon Wenger Date: Wed, 26 Jan 2022 16:12:42 +0100 Subject: [PATCH] Handle cache in student submission without mutating it --- client/cypress/fixtures/module.minimal.js | 2 +- .../integration/frontend/snapshots.spec.js | 1 + client/src/pages/studentSubmission.vue | 33 +++++++++++-------- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/client/cypress/fixtures/module.minimal.js b/client/cypress/fixtures/module.minimal.js index e2f91121..80900ba9 100644 --- a/client/cypress/fixtures/module.minimal.js +++ b/client/cypress/fixtures/module.minimal.js @@ -6,7 +6,7 @@ export default { intro: 'intro', assignments: {}, objectiveGroups: [], - id: '', + id: 'TW9kdWxlTm9kZToxMjM=', chapters: [], topic: { title: 'A Topic Mock Title', diff --git a/client/cypress/integration/frontend/snapshots.spec.js b/client/cypress/integration/frontend/snapshots.spec.js index 66c0d34f..07a69898 100644 --- a/client/cypress/integration/frontend/snapshots.spec.js +++ b/client/cypress/integration/frontend/snapshots.spec.js @@ -19,6 +19,7 @@ describe('Snapshot', () => { success: true, }, }, + UpdateLastModule: {}, ModuleSnapshotsQuery: { module: { ...module, diff --git a/client/src/pages/studentSubmission.vue b/client/src/pages/studentSubmission.vue index 3814be22..024581ad 100644 --- a/client/src/pages/studentSubmission.vue +++ b/client/src/pages/studentSubmission.vue @@ -218,27 +218,32 @@ const variables = { id: this.studentSubmission.id, }; - const data = store.readQuery({query, variables}); + const { studentSubmission } = store.readQuery({query, variables}); - if (data) { - if (!data.studentSubmission.submissionFeedback) { - data.studentSubmission.submissionFeedback = { - '__typename': 'SubmissionFeedbackNode', - }; - } - - data.studentSubmission.submissionFeedback = Object.assign({}, data.studentSubmission.submissionFeedback, { - id: updatedSubmissionFeedback.id, - final: updatedSubmissionFeedback.final, - }); + if (studentSubmission) { + let text; if (updatedSubmissionFeedback.text !== undefined) { // text is only being set on create and on turning in, then we'll update the cache with it. Otherwise, we'll trust the local state, as to not overwrite the input field - data.studentSubmission.submissionFeedback.text = updatedSubmissionFeedback.text; + text = updatedSubmissionFeedback.text; } else { - data.studentSubmission.submissionFeedback.text = this.studentSubmission.submissionFeedback ? this.studentSubmission.submissionFeedback.text : ''; + text = this.studentSubmission.submissionFeedback ? this.studentSubmission.submissionFeedback.text : ''; } + const submissionFeedback = Object.assign({}, studentSubmission.submissionFeedback, { + id: updatedSubmissionFeedback.id, + final: updatedSubmissionFeedback.final, + '__typename': 'SubmissionFeedbackNode', + text + }); + + const data = { + studentSubmission: { + ...studentSubmission, + submissionFeedback + } + }; + store.writeQuery({query, variables, data}); } }