diff options
Diffstat (limited to 'src/stores/apollo.js')
| -rw-r--r-- | src/stores/apollo.js | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/stores/apollo.js b/src/stores/apollo.js new file mode 100644 index 0000000..e2deecd --- /dev/null +++ b/src/stores/apollo.js @@ -0,0 +1,40 @@ +import { ApolloError } from '@apollo/client/core'; +import { readable } from 'svelte/store'; +import { client } from '$config/apollo'; + +/* + * This is a generic store for use with apollo + */ + +export const store = function store({ key, query, initialValue = null, variables = {} }) { + + return readable({ + loading: true, + data: initialValue, + error: undefined + }, (set) => { + + const handleError = function (error) { + + return set({ + loading: false, + data: initialValue, + error + }); + }; + + client.watchQuery({ query, variables }).subscribe((result) => { + + if (result.errors) { + const error = new ApolloError({ graphQLErrors: result.errors }); + return handleError(error); + } + + set({ + loading: false, + data: result.data[key], + error: undefined + }); + }, (error) => handleError(error)); + }); +}; |