| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- import {MercureEntityUpdate, sseState} from "~/types/interfaces";
- import {defineStore} from "pinia";
- import {ref} from "@vue/reactivity";
- import {useEntityManager} from "~/composables/data/useEntityManager";
- export const useSseStore = defineStore('sse', () => {
- const connected = ref(false)
- const events = ref([])
- const addEvent = (state: sseState, event: MercureEntityUpdate) => {
- const { em } = useEntityManager()
- // TODO: voir à refactorer le "get model from iri"
- const matches = event.iri.match(/^\/api\/(\w+)\/.*/)
- if (!matches || !matches[1]) {
- throw new Error('cannot parse the IRI')
- }
- const entityName = matches[1]
- const model = em.getModelFor(entityName)
- switch (event.operation) {
- case "update":
- case "create":
- em.persist(model, JSON.parse(event.data))
- break
- case "delete":
- break
- default:
- throw new Error('SSE: unknown operation type')
- }
- }
- return {
- connected,
- events,
- addEvent
- }
- })
|