mutations.js 2.7 KB

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