Olivier Massot преди 3 години
родител
ревизия
2fe235d5c2
променени са 2 файла, в които са добавени 38 реда и са изтрити 0 реда
  1. 37 0
      plugins/sse.client.ts
  2. 1 0
      stores/sse.ts

+ 37 - 0
plugins/sse.client.ts

@@ -0,0 +1,37 @@
+import SseSource from "~/services/sse/sseSource";
+import {defineNuxtPlugin} from "nuxt/app";
+import {useAccessProfileStore} from "~/stores/accessProfile";
+import {useSseStore} from "~/stores/sse";
+
+/**
+ * Setup SSE EventSource, allowing the app to listen for Mercure updates
+ * /!\ This has to be executed client side
+ *
+ * @param ctx
+ */
+export default defineNuxtPlugin(nuxtApp => {
+    // TODO: re-valider le fonctionnement du SSE
+    const runtimeConfig = useRuntimeConfig()
+
+    if (!runtimeConfig.baseUrlMercure) {
+        console.error('Mercure : the hub url is not defined')
+        return;
+    }
+
+    const accessProfile = useAccessProfileStore()
+    const sseStore = useSseStore()
+
+    const sseSource = new SseSource(
+        runtimeConfig.baseUrlMercure,
+        "access/" + accessProfile.id,
+        () => { sseStore.connected = true },
+        (eventData) => { sseStore.addEvent(eventData as any) },
+        () => { sseStore.connected = false },
+    )
+
+    sseSource.subscribe()
+    window.addEventListener('beforeunload', () => { sseSource.unsubscribe() })
+})
+
+
+

+ 1 - 0
stores/sse.ts

@@ -1,6 +1,7 @@
 import {defineStore} from "pinia";
 import {Ref, ref} from "@vue/reactivity";
 import {useEntityManager} from "~/composables/data/useEntityManager";
+import {MercureEntityUpdate} from "~/types/interfaces";
 
 export const useSseStore = defineStore('sse', () => {
   const connected: Ref<boolean> = ref(false)