diff --git a/app/assets/javascripts/snippets/components/snippet_blob_view.vue b/app/assets/javascripts/snippets/components/snippet_blob_view.vue index 27b3a30b40a9face3f5279c63f1a0da32dd23cfe..8481ac2b9c916e5715e1f0950399cdc12ba8d4c9 100644 --- a/app/assets/javascripts/snippets/components/snippet_blob_view.vue +++ b/app/assets/javascripts/snippets/components/snippet_blob_view.vue @@ -29,15 +29,6 @@ export default { update(data) { return this.onContentUpdate(data); }, - result() { - if (this.activeViewerType === RICH_BLOB_VIEWER) { - // eslint-disable-next-line vue/no-mutating-props - this.blob.richViewer.renderError = null; - } else { - // eslint-disable-next-line vue/no-mutating-props - this.blob.simpleViewer.renderError = null; - } - }, skip() { return this.viewer.renderError; }, diff --git a/app/assets/javascripts/snippets/index.js b/app/assets/javascripts/snippets/index.js index 789332ce5b772dd6b74130ee13c878b5a4fea8ac..576bfe8756112fefb6a1b26a4f92d0b949fb0335 100644 --- a/app/assets/javascripts/snippets/index.js +++ b/app/assets/javascripts/snippets/index.js @@ -14,7 +14,13 @@ export default function appFactory(el, Component) { } const apolloProvider = new VueApollo({ - defaultClient: createDefaultClient({}, { batchMax: 1 }), + defaultClient: createDefaultClient( + {}, + { + batchMax: 1, + assumeImmutableResults: true, + }, + ), }); const { diff --git a/app/assets/javascripts/snippets/mixins/snippets.js b/app/assets/javascripts/snippets/mixins/snippets.js index 7552eae97fcce92f5e961c3c71575391a58d6943..b72befef56b6524ac9e2986c83892ded9042a4be 100644 --- a/app/assets/javascripts/snippets/mixins/snippets.js +++ b/app/assets/javascripts/snippets/mixins/snippets.js @@ -1,3 +1,4 @@ +import { isEmpty } from 'lodash'; import GetSnippetQuery from 'shared_queries/snippet/snippet.query.graphql'; const blobsDefault = []; @@ -12,20 +13,18 @@ export const getSnippetMixin = { }; }, update(data) { - const res = data.snippets.nodes[0]; + const res = { ...data.snippets.nodes[0] }; // Set `snippet.blobs` since some child components are coupled to this. - if (res) { + if (!isEmpty(res)) { // It's possible for us to not get any blobs in a response. // In this case, we should default to current blobs. - res.blobs = res.blobs ? res.blobs.nodes : this.blobs; + res.blobs = res.blobs ? res.blobs.nodes : blobsDefault; + res.description = res.description || ''; } return res; }, - result(res) { - this.blobs = res.data.snippets.nodes[0]?.blobs || blobsDefault; - }, skip() { return this.newSnippet; }, @@ -41,12 +40,14 @@ export const getSnippetMixin = { return { snippet: {}, newSnippet: !this.snippetGid, - blobs: blobsDefault, }; }, computed: { isLoading() { return this.$apollo.queries.snippet.loading; }, + blobs() { + return this.snippet?.blobs || []; + }, }, }; diff --git a/spec/frontend/snippets/components/show_spec.js b/spec/frontend/snippets/components/show_spec.js index e6162c6aad2c8c30d6f2504604f99ccf31b59222..b7b638b5137f62f6bac9b6f88d4923b2aa50c893 100644 --- a/spec/frontend/snippets/components/show_spec.js +++ b/spec/frontend/snippets/components/show_spec.js @@ -71,7 +71,9 @@ describe('Snippet view app', () => { it('renders correct snippet-blob components', () => { createComponent({ data: { - blobs: [Blob, BinaryBlob], + snippet: { + blobs: [Blob, BinaryBlob], + }, }, }); const blobs = wrapper.findAll(SnippetBlob);