sse.client.ts 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import SseSource from "~/services/sse/sseSource";
  2. import {useAccessProfileStore} from "~/stores/accessProfile";
  3. import {useSseStore} from "~/stores/sse";
  4. import {AnyJson} from "~/types/data";
  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 onOpen = () => sseStore.connected = true
  20. const onClose = () => sseStore.connected = false
  21. const onMessage = (eventData: AnyJson) => {
  22. sseStore.addEvent(eventData as any)
  23. }
  24. const sseSource = new SseSource(
  25. runtimeConfig.baseUrlMercure,
  26. "access/" + accessProfile.id,
  27. onOpen,
  28. onMessage,
  29. onClose,
  30. )
  31. sseSource.subscribe()
  32. window.addEventListener('beforeunload', () => { sseSource.unsubscribe() })
  33. })