sse.ts 829 B

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