mutations.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import defaultState from '@/store/state'
  2. import Experiments from '@/router/experiments'
  3. const checkProgression = (state, experimentName, sceneName) => {
  4. if (!state.progression[state.experimentId])
  5. state.progression[state.experimentId] = {}
  6. if (!state.progression[state.experimentId][state.userId])
  7. state.progression[state.experimentId][state.userId] = {}
  8. if (!state.progression[state.experimentId][state.userId][experimentName])
  9. state.progression[state.experimentId][state.userId][experimentName] = {}
  10. if (!state.progression[state.experimentId][state.userId][experimentName][sceneName])
  11. state.progression[state.experimentId][state.userId][experimentName][sceneName] = { done: false, data: {} }
  12. }
  13. const createProgressionObj = (state, scenes) => {
  14. const progressionObj = Experiments.reduce((accExpe, expe) => {
  15. const scenesProgressObj = scenes.reduce((accScene, scene) => {
  16. // check progression
  17. checkProgression(state, expe, scene)
  18. // Do not overwrite current progression
  19. if (state.progression[state.experimentId][state.userId][expe.name] && state.progression[state.experimentId][state.userId][expe.name][scene])
  20. accScene[scene] = state.progression[state.experimentId][state.userId][expe.name][scene]
  21. else accScene[scene] = { done: false, data: {} }
  22. return accScene
  23. }, {})
  24. accExpe[expe.name] = scenesProgressObj
  25. return accExpe
  26. }, {})
  27. state.progression[state.experimentId][state.userId] = progressionObj
  28. }
  29. export default {
  30. setCustomLinkData(state, data) {
  31. state.customLinkData = JSON.parse(atob(data))
  32. },
  33. clearCustomLinkData(state) {
  34. state.customLinkData = null
  35. },
  36. setGdprValidated(state) {
  37. state.gdprConsent = true
  38. },
  39. setAppUniqueId(state) {
  40. state.uuid = [...Array(30)].map(() => Math.random().toString(36)[2]).join('')
  41. },
  42. resetApp(state, { gdprConsent, hostConfig, progression }) {
  43. const defaultStateObj = defaultState()
  44. if (gdprConsent) {
  45. state.gdprConsent = false
  46. state.hostConfig = defaultStateObj.hostConfig
  47. state.userId = defaultStateObj.userId
  48. state.experimentId = defaultStateObj.experimentId
  49. state.progression = defaultStateObj.progression
  50. state.scenesList = defaultStateObj.scenesList
  51. return
  52. }
  53. if (hostConfig) state.hostConfig = defaultStateObj.hostConfig
  54. if (progression) {
  55. // Reset progression and recreate the progression object
  56. state.progression = defaultStateObj.progression
  57. if (state.scenesList) createProgressionObj(state, state.scenesList)
  58. }
  59. },
  60. setHostConfig(state, newConfig) {
  61. state.hostConfig = newConfig
  62. },
  63. setUserExperimentId(state, { userId, experimentId }) {
  64. state.userId = userId
  65. state.experimentId = experimentId
  66. },
  67. setListScenes(state, scenes) {
  68. state.scenesList = scenes
  69. createProgressionObj(state, scenes)
  70. },
  71. updateExperimentProgress(state) {
  72. if (!state.scenesList)
  73. return
  74. createProgressionObj(state, state.scenesList)
  75. },
  76. setExperimentProgress(state, { experimentName, sceneName, data }) {
  77. checkProgression(state, experimentName, sceneName)
  78. state.progression[state.experimentId][state.userId][experimentName][sceneName].data = data
  79. },
  80. setExperimentDone(state, { experimentName, sceneName, done }) {
  81. checkProgression(state, experimentName, sceneName)
  82. state.progression[state.experimentId][state.userId][experimentName][sceneName].done = done
  83. }
  84. }