From 18ced3bfaff8ca40edb1a96e631ba1553a3a7a6d Mon Sep 17 00:00:00 2001 From: Ruben Beltran del Rio Date: Sun, 14 Mar 2021 22:41:16 +0100 Subject: Add stores for GraphQL data: --- src/stores/apollo.js | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/stores/apollo.js (limited to 'src/stores/apollo.js') 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)); + }); +}; -- cgit