]> git.r.bdr.sh - rbdr/forum/blobdiff - src/stores/forums.js
Use routify and GraphQL server
[rbdr/forum] / src / stores / forums.js
index e7acb606cf536db7f227018da308eff532a3136f..ade01a7110e76ed0fa2c14d30e19ca7ba22d16e1 100644 (file)
@@ -1,36 +1,36 @@
+import { ApolloError } from '@apollo/client/core';
 import { readable } from 'svelte/store';
+import { client } from '$config/apollo';
+import { GET_FORUMS } from '$data/queries';
 
 const internals = {
 
-  // Constants
-
-  kChangeFeedEventName: 'changefeed:forums',
-
   // The exported data structure
 
-  forums: [],
-
-  // Handles messages from the event
-
-  handleChangeFeed(data) {
-
-    // No old value == add
-    if (!data.old_val) {
-      return internals.forums.push(data.new_val);
-    }
+  initialValue: {
+    loading: true,
+    data: [],
+    error: undefined
+  }
+};
 
-    // We have an old value, let's find it.
-    const index = internals.forums.findIndex((element) => element.id === data.old_val.id);
+export const forums = readable(internals.initialValue, (set) => {
 
-    if (index > -1) {
-      if (data.new_val) {
-        return internals.forums.splice(index, 1, data.new_val || undefined);
-      }
+  client.watchQuery({ query: GET_FORUMS }).subscribe((result) => {
 
-      return internals.forums.splice(index, 1);
+    if (result.errors) {
+      const error = new ApolloError({ graphQLErrors: result.errors });
+      return set({
+        loading: false,
+        data: [],
+        error
+      });
     }
-  }
-};
 
-export const forums = readable(internals.forums, (set) => {
+    set({
+      loading: false,
+      data: result.data.forums,
+      error: undefined
+    });
+  });
 });