|
|
@@ -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() })
|
|
|
+})
|
|
|
+
|
|
|
+
|
|
|
+
|