sse.ts 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import {MercureEntityUpdate, sseState} from "~/types/interfaces";
  2. import {repositoryHelper} from "~/services/store/repository";
  3. import {models} from "~/models/_import";
  4. import Serializer from "~/services/serializer/serializer";
  5. import {DENORMALIZER_TYPE} from "~/types/enums";
  6. import {queryHelper} from "~/services/store/query";
  7. import {Repository as VuexRepository} from "@vuex-orm/core/dist/src/repository/Repository";
  8. import {Model, Query} from "@vuex-orm/core";
  9. import {File} from "~/models/Core/File";
  10. export const state = () => ({
  11. connected: false,
  12. })
  13. export const mutations = {
  14. setConnected(state: sseState, connected: boolean) {
  15. state.connected = connected
  16. },
  17. addEvent(state: sseState, event: MercureEntityUpdate) {
  18. switch (event.operation) {
  19. case "update":
  20. const matches = event.iri.match(/^\/api\/(\w+)\/.*/)
  21. if (!matches) {
  22. throw new Error('SSE: cannot parse the IRI')
  23. }
  24. const entityName = matches[1]
  25. let model = models.find(candidate => { return candidate.entity === entityName })
  26. // let entry = Serializer.denormalize(event.data, DENORMALIZER_TYPE.HYDRA)
  27. console.log(JSON.parse(event.data))
  28. let entry = Serializer.denormalize(JSON.parse(event.data), DENORMALIZER_TYPE.HYDRA)
  29. console.log(entry)
  30. let item = repositoryHelper.persist(model, entry.data) as any
  31. const repository: VuexRepository<Model> = repositoryHelper.getRepository(model)
  32. const query: Query = repository.query()
  33. console.log(item)
  34. console.log(queryHelper.getItem(query, item.id))
  35. break
  36. case "create":
  37. break
  38. case "delete":
  39. break
  40. default:
  41. throw new Error('SSE: unknown operation type')
  42. }
  43. }
  44. }