sse.client.ts 1.0 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import SseSource from "~/services/sse/sseSource";
  2. import {defineNuxtPlugin} from "nuxt/app";
  3. import {useAccessProfileStore} from "~/stores/accessProfile";
  4. import {useSseStore} from "~/stores/sse";
  5. /**
  6. * Setup SSE EventSource, allowing the app to listen for Mercure updates
  7. * /!\ This has to be executed client side
  8. *
  9. * @param ctx
  10. */
  11. export default defineNuxtPlugin(nuxtApp => {
  12. const runtimeConfig = useRuntimeConfig()
  13. if (!runtimeConfig.baseUrlMercure) {
  14. console.error('Mercure : the hub url is not defined')
  15. return;
  16. }
  17. const accessProfile = useAccessProfileStore()
  18. const sseStore = useSseStore()
  19. const sseSource = new SseSource(
  20. runtimeConfig.baseUrlMercure,
  21. "access/" + accessProfile.id,
  22. () => { sseStore.connected = true },
  23. (eventData) => { sseStore.addEvent(eventData as any) },
  24. () => { sseStore.connected = false },
  25. )
  26. sseSource.subscribe()
  27. window.addEventListener('beforeunload', () => { sseSource.unsubscribe() })
  28. })