summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/sidebar/graphql.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/sidebar/graphql.js')
-rw-r--r--app/assets/javascripts/sidebar/graphql.js25
1 files changed, 18 insertions, 7 deletions
diff --git a/app/assets/javascripts/sidebar/graphql.js b/app/assets/javascripts/sidebar/graphql.js
index 8615b52f1b8..1a806a051b7 100644
--- a/app/assets/javascripts/sidebar/graphql.js
+++ b/app/assets/javascripts/sidebar/graphql.js
@@ -1,5 +1,7 @@
import { IntrospectionFragmentMatcher } from 'apollo-cache-inmemory';
+import produce from 'immer';
import VueApollo from 'vue-apollo';
+import getIssueStateQuery from '~/issue_show/queries/get_issue_state.query.graphql';
import createDefaultClient from '~/lib/graphql';
import introspectionQueryResultData from './fragmentTypes.json';
@@ -7,15 +9,24 @@ const fragmentMatcher = new IntrospectionFragmentMatcher({
introspectionQueryResultData,
});
-export const defaultClient = createDefaultClient(
- {},
- {
- cacheConfig: {
- fragmentMatcher,
+const resolvers = {
+ Mutation: {
+ updateIssueState: (_, { issueType = undefined, isDirty = false }, { cache }) => {
+ const sourceData = cache.readQuery({ query: getIssueStateQuery });
+ const data = produce(sourceData, (draftData) => {
+ draftData.issueState = { issueType, isDirty };
+ });
+ cache.writeQuery({ query: getIssueStateQuery, data });
},
- assumeImmutableResults: true,
},
-);
+};
+
+export const defaultClient = createDefaultClient(resolvers, {
+ cacheConfig: {
+ fragmentMatcher,
+ },
+ assumeImmutableResults: true,
+});
export const apolloProvider = new VueApollo({
defaultClient,