45 lines
1.4 KiB
JavaScript
45 lines
1.4 KiB
JavaScript
import Vue from 'vue';
|
|
import VueApollo from 'vue-apollo';
|
|
import { uniqueId } from 'lodash';
|
|
import { defaultDataIdFromObject } from 'apollo-cache-inmemory';
|
|
import createDefaultClient from '~/lib/graphql';
|
|
import activeDiscussionQuery from './graphql/queries/active_discussion.query.graphql';
|
|
import typeDefs from './graphql/typedefs.graphql';
|
|
|
|
Vue.use(VueApollo);
|
|
|
|
const resolvers = {
|
|
Mutation: {
|
|
updateActiveDiscussion: (_, { id = null, source }, { cache }) => {
|
|
const data = cache.readQuery({ query: activeDiscussionQuery });
|
|
data.activeDiscussion = {
|
|
__typename: 'ActiveDiscussion',
|
|
id,
|
|
source,
|
|
};
|
|
cache.writeQuery({ query: activeDiscussionQuery, data });
|
|
},
|
|
},
|
|
};
|
|
|
|
const defaultClient = createDefaultClient(
|
|
resolvers,
|
|
// This config is added temporarily to resolve an issue with duplicate design IDs.
|
|
// Should be removed as soon as https://gitlab.com/gitlab-org/gitlab/issues/13495 is resolved
|
|
{
|
|
cacheConfig: {
|
|
dataIdFromObject: object => {
|
|
// eslint-disable-next-line no-underscore-dangle, @gitlab/require-i18n-strings
|
|
if (object.__typename === 'Design') {
|
|
return object.id && object.image ? `${object.id}-${object.image}` : uniqueId();
|
|
}
|
|
return defaultDataIdFromObject(object);
|
|
},
|
|
},
|
|
typeDefs,
|
|
},
|
|
);
|
|
|
|
export default new VueApollo({
|
|
defaultClient,
|
|
});
|