sse.ts 871 B

1234567891011121314151617181920212223242526272829303132333435
  1. import {defineStore} from "pinia";
  2. import {ref} from "@vue/reactivity";
  3. import type {Ref} from "@vue/reactivity";
  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. })