Use the GQL cache for local state
This commit is contained in:
parent
54a6a2a702
commit
65a09fb9c7
|
|
@ -1,11 +1,13 @@
|
||||||
import {InMemoryCache} from 'apollo-cache-inmemory/lib/index'
|
import {InMemoryCache} from 'apollo-cache-inmemory/lib/index'
|
||||||
import {HttpLink} from 'apollo-link-http/lib/index'
|
import {createHttpLink} from 'apollo-link-http'
|
||||||
import {ApolloClient} from 'apollo-client/index'
|
import {ApolloClient} from 'apollo-client'
|
||||||
import {ApolloLink} from 'apollo-link'
|
import {ApolloLink} from 'apollo-link'
|
||||||
import fetch from 'unfetch'
|
import fetch from 'unfetch'
|
||||||
|
import {typeDefs} from '@/graphql/typedefs';
|
||||||
|
import {resolvers} from '@/graphql/resolvers';
|
||||||
|
|
||||||
export default function (uri) {
|
export default function (uri) {
|
||||||
const httpLink = new HttpLink({
|
const httpLink = createHttpLink({
|
||||||
// uri: process.env.NODE_ENV !== 'production' ? 'http://localhost:8000/api/graphql/' : '/api/graphql/',
|
// uri: process.env.NODE_ENV !== 'production' ? 'http://localhost:8000/api/graphql/' : '/api/graphql/',
|
||||||
uri,
|
uri,
|
||||||
credentials: 'include',
|
credentials: 'include',
|
||||||
|
|
@ -48,7 +50,8 @@ export default function (uri) {
|
||||||
assignment: (_, args, {getCacheKey}) => getCacheKey({__typename: 'AssignmentNode', id: args.id}),
|
assignment: (_, args, {getCacheKey}) => getCacheKey({__typename: 'AssignmentNode', id: args.id}),
|
||||||
objective: (_, args, {getCacheKey}) => getCacheKey({__typename: 'ObjectiveNode', id: args.id}),
|
objective: (_, args, {getCacheKey}) => getCacheKey({__typename: 'ObjectiveNode', id: args.id}),
|
||||||
objectiveGroup: (_, args, {getCacheKey}) => getCacheKey({__typename: 'ObjectiveGroupNode', id: args.id}),
|
objectiveGroup: (_, args, {getCacheKey}) => getCacheKey({__typename: 'ObjectiveGroupNode', id: args.id}),
|
||||||
module: (_, args, {getCacheKey}) => getCacheKey({__typename: 'ModuleNode', id: args.id}),
|
// todo: remove, the new client seems to cache this correctly by itself
|
||||||
|
// module: (_, args, {getCacheKey}) => getCacheKey({__typename: 'ModuleNode', id: args.id}),
|
||||||
projectEntry: (_, args, {getCacheKey}) => getCacheKey({__typename: 'ProjectEntryNode', id: args.id}),
|
projectEntry: (_, args, {getCacheKey}) => getCacheKey({__typename: 'ProjectEntryNode', id: args.id}),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -66,11 +69,23 @@ export default function (uri) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// we use the cache as our local state
|
||||||
|
cache.writeData({
|
||||||
|
data: {
|
||||||
|
scrollPosition: {
|
||||||
|
__typename: 'ScrollPosition',
|
||||||
|
scrollTo: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// Create the apollo client
|
// Create the apollo client
|
||||||
return new ApolloClient({
|
return new ApolloClient({
|
||||||
link: composedLink,
|
link: composedLink,
|
||||||
// link: httpLink,
|
// link: httpLink,
|
||||||
cache: cache,
|
cache,
|
||||||
connectToDevTools: true
|
connectToDevTools: true,
|
||||||
|
typeDefs,
|
||||||
|
resolvers
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
import SCROLL_POSITION from '@/graphql/gql/local/scrollPosition.gql';
|
||||||
|
|
||||||
|
export const resolvers = {
|
||||||
|
Mutation: {
|
||||||
|
scrollTo: (_, {scrollTo}, {cache}) => {
|
||||||
|
const data = cache.readQuery({query: SCROLL_POSITION});
|
||||||
|
data.scrollPosition.scrollTo = scrollTo;
|
||||||
|
cache.writeQuery({query: SCROLL_POSITION, data});
|
||||||
|
return data.scrollPosition;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
import gql from 'graphql-tag';
|
||||||
|
|
||||||
|
export const typeDefs = gql`
|
||||||
|
type ScrollPosition {
|
||||||
|
scrollTo: String!
|
||||||
|
}
|
||||||
|
|
||||||
|
type Mutation {
|
||||||
|
scrollTo(scrollTo: String!): ScrollPosition
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
@ -3,6 +3,7 @@ import Vuex from 'vuex'
|
||||||
|
|
||||||
Vue.use(Vuex)
|
Vue.use(Vuex)
|
||||||
|
|
||||||
|
// WARNING fixme todo: please do not use this anymore, use the local GraphQL cache
|
||||||
export default new Vuex.Store({
|
export default new Vuex.Store({
|
||||||
modules: {},
|
modules: {},
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue