diff options
| author | Ruben Beltran del Rio <ruben@unlimited.pizza> | 2021-03-14 22:41:16 +0100 |
|---|---|---|
| committer | Ruben Beltran del Rio <ruben@unlimited.pizza> | 2021-03-14 22:41:16 +0100 |
| commit | 18ced3bfaff8ca40edb1a96e631ba1553a3a7a6d (patch) | |
| tree | 450ee3c84e7400e99ba30261e705b2db619d9bcf /src/stores/apollo.js | |
| parent | c1bc5993a694f6fd047a3881351827058042483b (diff) | |
Add stores for GraphQL data:
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)); + }); +}; |