diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-09-19 04:45:44 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-09-19 04:45:44 +0300 |
commit | 85dc423f7090da0a52c73eb66faf22ddb20efff9 (patch) | |
tree | 9160f299afd8c80c038f08e1545be119f5e3f1e1 /app/assets/javascripts/design_management/graphql.js | |
parent | 15c2c8c66dbe422588e5411eee7e68f1fa440bb8 (diff) |
Add latest changes from gitlab-org/gitlab@13-4-stable-ee
Diffstat (limited to 'app/assets/javascripts/design_management/graphql.js')
-rw-r--r-- | app/assets/javascripts/design_management/graphql.js | 59 |
1 files changed, 53 insertions, 6 deletions
diff --git a/app/assets/javascripts/design_management/graphql.js b/app/assets/javascripts/design_management/graphql.js index fae337aa75b..d1fe977b969 100644 --- a/app/assets/javascripts/design_management/graphql.js +++ b/app/assets/javascripts/design_management/graphql.js @@ -1,24 +1,70 @@ import Vue from 'vue'; import VueApollo from 'vue-apollo'; import { uniqueId } from 'lodash'; +import produce from 'immer'; import { defaultDataIdFromObject } from 'apollo-cache-inmemory'; +import axios from '~/lib/utils/axios_utils'; import createDefaultClient from '~/lib/graphql'; import activeDiscussionQuery from './graphql/queries/active_discussion.query.graphql'; +import getDesignQuery from './graphql/queries/get_design.query.graphql'; import typeDefs from './graphql/typedefs.graphql'; +import { extractTodoIdFromDeletePath, createPendingTodo } from './utils/design_management_utils'; +import { CREATE_DESIGN_TODO_EXISTS_ERROR } from './utils/error_messages'; +import { addPendingTodoToStore } from './utils/cache_update'; Vue.use(VueApollo); const resolvers = { Mutation: { updateActiveDiscussion: (_, { id = null, source }, { cache }) => { - const data = cache.readQuery({ query: activeDiscussionQuery }); - data.activeDiscussion = { - __typename: 'ActiveDiscussion', - id, - source, - }; + const sourceData = cache.readQuery({ query: activeDiscussionQuery }); + + const data = produce(sourceData, draftData => { + // eslint-disable-next-line no-param-reassign + draftData.activeDiscussion = { + __typename: 'ActiveDiscussion', + id, + source, + }; + }); + cache.writeQuery({ query: activeDiscussionQuery, data }); }, + createDesignTodo: ( + _, + { projectPath, issueId, designId, issueIid, filenames, atVersion }, + { cache }, + ) => { + return axios + .post(`/${projectPath}/todos`, { + issue_id: issueId, + issuable_id: designId, + issuable_type: 'design', + }) + .then(({ data }) => { + const { delete_path } = data; + const todoId = extractTodoIdFromDeletePath(delete_path); + if (!todoId) { + return { + errors: [ + { + message: CREATE_DESIGN_TODO_EXISTS_ERROR, + }, + ], + }; + } + + const pendingTodo = createPendingTodo(todoId); + addPendingTodoToStore(cache, pendingTodo, getDesignQuery, { + fullPath: projectPath, + iid: issueIid, + filenames, + atVersion, + }); + + return pendingTodo; + }); + }, }, }; @@ -37,6 +83,7 @@ const defaultClient = createDefaultClient( }, }, typeDefs, + assumeImmutableResults: true, }, ); |