import {MercureEntityUpdate, sseState} from "~/types/interfaces"; import {repositoryHelper} from "~/services/store/repository"; import {models} from "~/models/_import"; import Serializer from "~/services/serializer/serializer"; import {DENORMALIZER_TYPE} from "~/types/enums"; import {queryHelper} from "~/services/store/query"; import {Repository as VuexRepository} from "@vuex-orm/core/dist/src/repository/Repository"; import {Model, Query} from "@vuex-orm/core"; import {File} from "~/models/Core/File"; export const state = () => ({ connected: false, }) export const mutations = { setConnected(state: sseState, connected: boolean) { state.connected = connected }, addEvent(state: sseState, event: MercureEntityUpdate) { switch (event.operation) { case "update": const matches = event.iri.match(/^\/api\/(\w+)\/.*/) if (!matches) { throw new Error('SSE: cannot parse the IRI') } const entityName = matches[1] let model = models.find(candidate => { return candidate.entity === entityName }) // let entry = Serializer.denormalize(event.data, DENORMALIZER_TYPE.HYDRA) console.log(JSON.parse(event.data)) let entry = Serializer.denormalize(JSON.parse(event.data), DENORMALIZER_TYPE.HYDRA) console.log(entry) let item = repositoryHelper.persist(model, entry.data) as any const repository: VuexRepository = repositoryHelper.getRepository(model) const query: Query = repository.query() console.log(item) console.log(queryHelper.getItem(query, item.id)) break case "create": break case "delete": break default: throw new Error('SSE: unknown operation type') } } }