mutations.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import Vue from 'vue'
  2. import defaultState from '@/store/state'
  3. import Experiments from '@/router/experiments'
  4. const checkProgression = (state, experimentName, sceneName) => {
  5. if (!state.progression[experimentName])
  6. state.progression[experimentName] = {}
  7. if (!state.progression[experimentName][sceneName])
  8. state.progression[experimentName][sceneName] = { done: false, data: {} }
  9. }
  10. export default {
  11. resetApp(state, { hostConfig, progression }) {
  12. if (hostConfig) {
  13. if (state.socket.isConnected)
  14. this._vm.$disconnect()
  15. state.hostConfig = defaultState().hostConfig
  16. }
  17. if (progression) state.progression = defaultState().progression
  18. },
  19. setHostConfig(state, newConfig) {
  20. state.hostConfig = newConfig
  21. },
  22. setListScenes(state, scenes) {
  23. state.scenesList = scenes
  24. const progressionObj = Experiments.reduce((accExpe, expe) => {
  25. const scenesProgressObj = scenes.reduce((accScene, scene) => {
  26. // Do not overwrite current progression
  27. if (state.progression[expe.name] && state.progression[expe.name][scene])
  28. accScene[scene] = state.progression[expe.name][scene]
  29. else accScene[scene] = { done: false, data: {} }
  30. return accScene
  31. }, {})
  32. accExpe[expe.name] = scenesProgressObj
  33. return accExpe
  34. }, {})
  35. state.progression = progressionObj
  36. },
  37. setExperimentProgress(state, { experimentName, sceneName, data }) {
  38. checkProgression(state, experimentName, sceneName)
  39. state.progression[experimentName][sceneName].data = data
  40. },
  41. setExperimentDone(state, { experimentName, sceneName, done }) {
  42. checkProgression(state, experimentName, sceneName)
  43. state.progression[experimentName][sceneName].done = done
  44. },
  45. SOCKET_ONOPEN(state, event) {
  46. console.info('Connected to WebSocket server')
  47. Vue.prototype.$socket = event.currentTarget
  48. state.socket.isConnected = true
  49. },
  50. SOCKET_ONCLOSE(state, _event) {
  51. console.info('Disconnected from WebSocket server')
  52. state.hostConfig = defaultState().hostConfig
  53. state.socket.isConnected = false
  54. },
  55. SOCKET_ONERROR(state, event) {
  56. console.error('WebSocket connection error', state, event)
  57. },
  58. // default handler called for all methods
  59. SOCKET_ONMESSAGE(state, { data: rawMessage }) {
  60. const message = JSON.parse(rawMessage)
  61. state.socket.message = message
  62. },
  63. // mutations for reconnect methods
  64. SOCKET_RECONNECT(state, count) {
  65. console.info('Reconnect to WebSocket server', state, count)
  66. },
  67. SOCKET_RECONNECT_ERROR(state) {
  68. console.error('Could not reconnect to WebSocket server')
  69. state.socket.reconnectError = true
  70. }
  71. }