sse.ts 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import {MercureEntityUpdate, sseState} from "~/types/interfaces";
  2. import {repositoryHelper} from "~/services/store/repository";
  3. import {models} from "~/models/_import";
  4. export const state = () => ({
  5. connected: false,
  6. })
  7. export const mutations = {
  8. setConnected(state: sseState, connected: boolean) {
  9. state.connected = connected
  10. },
  11. addEvent(state: sseState, event: MercureEntityUpdate) {
  12. switch (event.operation) {
  13. case "update":
  14. const matches = event.iri.match(/^\/api\/(\w+)\/.*/)
  15. if (!matches) {
  16. throw new Error('SSE: cannot parse the IRI')
  17. }
  18. const entityName = matches[1]
  19. let model = models.find(candidate => { return candidate.entity === entityName })
  20. if (!model) {
  21. throw new Error('SSE: no model found')
  22. }
  23. repositoryHelper.persist(model, JSON.parse(event.data))
  24. break
  25. case "create":
  26. break
  27. case "delete":
  28. break
  29. default:
  30. throw new Error('SSE: unknown operation type')
  31. }
  32. }
  33. }