sse.ts 855 B

1234567891011121314151617181920212223242526272829303132333435
  1. import { defineStore } from 'pinia'
  2. import { ref } from 'vue'
  3. import type { Ref } from 'vue'
  4. import { useEntityManager } from '~/composables/data/useEntityManager'
  5. import type { MercureEntityUpdate } from '~/types/interfaces'
  6. export const useSseStore = defineStore('sse', () => {
  7. const connected: Ref<boolean> = ref(false)
  8. const events: Ref<Array<MercureEntityUpdate>> = ref([])
  9. const addEvent = async (event: MercureEntityUpdate) => {
  10. const { em } = useEntityManager()
  11. const model = em.getModelFromIri(event.iri)
  12. switch (event.operation) {
  13. case 'update':
  14. case 'create':
  15. await em.save(model, JSON.parse(event.data), true)
  16. break
  17. case 'delete':
  18. break
  19. default:
  20. throw new Error('SSE: unknown operation type')
  21. }
  22. }
  23. return {
  24. connected,
  25. events,
  26. addEvent,
  27. }
  28. })