sse.client.ts 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  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. // TODO: re-valider le fonctionnement du SSE
  13. const runtimeConfig = useRuntimeConfig()
  14. if (!runtimeConfig.baseUrlMercure) {
  15. console.error('Mercure : the hub url is not defined')
  16. return;
  17. }
  18. const accessProfile = useAccessProfileStore()
  19. const sseStore = useSseStore()
  20. const sseSource = new SseSource(
  21. runtimeConfig.baseUrlMercure,
  22. "access/" + accessProfile.id,
  23. () => { sseStore.connected = true },
  24. (eventData) => { sseStore.addEvent(eventData as any) },
  25. () => { sseStore.connected = false },
  26. )
  27. sseSource.subscribe()
  28. window.addEventListener('beforeunload', () => { sseSource.unsubscribe() })
  29. })