ExperimentValidated.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <template>
  2. <div style="text-align:center">
  3. <!-- <h2>"{{ experimentFullName }}"</h2> -->
  4. <!-- <v-card>
  5. <v-card-title primary-title>
  6. <v-spacer />
  7. <div class="headline">Experiment validated for the scene "{{ sceneName }}"</div>
  8. <v-spacer />
  9. </v-card-title>
  10. <v-card-actions>
  11. <v-spacer />
  12. <v-btn flat exact to="/experiments/">
  13. <v-icon left>home</v-icon>
  14. Select another experiment
  15. </v-btn>
  16. <v-btn flat exact :to="`/experiments/${experimentName}`">
  17. <v-icon left>arrow_back</v-icon>
  18. Go back to scene selection
  19. </v-btn>
  20. <v-btn v-if="hasScenesLeft" flat exact :to="`/experiments/${experimentName}/${getRandomScene}`">
  21. <v-icon left>shuffle</v-icon>
  22. Continue with a random scene
  23. </v-btn>
  24. <div v-if="!hasScenesLeft" class="headline">You finished all the scenes, thanks for your contribution!</div>
  25. <v-spacer />
  26. </v-card-actions>
  27. </v-card> -->
  28. <loader v-if="!loaded" :message="loadingMessage" />
  29. <div v-if="loaded" style="margin-top:10%">
  30. <p style="font-size: 1.4em;">
  31. Nous vous remercions d'avoir participé à cette expérience.
  32. Elle va nous permettre d'améliorer les calculs d'images.
  33. </p>
  34. </div>
  35. <!-- Add of newsletter component -->
  36. <Newsletter v-if="loaded" />
  37. </div>
  38. </template>
  39. <script>
  40. import Loader from '@/components/Loader.vue'
  41. import { mapActions, mapGetters } from 'vuex'
  42. import Experiments from '@/router/experiments'
  43. import { getExperimentSceneList, getCalibrationScene, getCalibrationFrequency } from '@/config.utils'
  44. import { rand } from '@/functions'
  45. import Newsletter from '@/components/ExperimentsComponents/Newsletter.vue'
  46. export default {
  47. name: 'ExperimentValidated',
  48. components: {
  49. Newsletter,
  50. Loader
  51. },
  52. props: {
  53. experimentName: {
  54. type: String,
  55. required: true
  56. },
  57. sceneName: {
  58. type: String,
  59. required: true
  60. }
  61. },
  62. data() {
  63. return {
  64. experimentFullName: null,
  65. availableScenes: [],
  66. loaded: false,
  67. loadingMessage: 'Chargement...'
  68. }
  69. },
  70. computed: {
  71. ...mapGetters(['getAllExperimentProgress']),
  72. ...mapActions(['loadScenesList']),
  73. hasScenesLeft() {
  74. return this.availableScenes.length > 0
  75. },
  76. getRandomScene() {
  77. return this.availableScenes[rand(0, this.availableScenes.length - 1)]
  78. }
  79. },
  80. async mounted() {
  81. // get information about calibration scene
  82. let calibrationScene = getCalibrationScene(this.experimentName)
  83. let calibrationSceneFreq = getCalibrationFrequency(this.experimentName)
  84. // reload scene list to update
  85. await this.loadScenesList
  86. const scenesList = getExperimentSceneList(this.experimentName)
  87. // load current user progression
  88. this.progression = this.getAllExperimentProgress()
  89. // Find the selected experiment full name
  90. this.experimentFullName = Experiments.find(x => x.name === this.experimentName).meta.fullName
  91. // Get a list of available and not already validated scenes for this experiment
  92. this.availableScenes = Object.keys(this.progression[this.experimentName])
  93. .filter(aScene =>
  94. scenesList.includes(aScene) &&
  95. this.progression[this.experimentName] &&
  96. !this.progression[this.experimentName][aScene].done)
  97. // check if necessary to show calibration before new scenes
  98. if (window.sessionStorage.getItem('sin3d-nb-scenes') !== null) {
  99. let nScenes = Number(window.sessionStorage.getItem('sin3d-nb-scenes'))
  100. window.sessionStorage.setItem('sin3d-nb-scenes', nScenes + 1)
  101. if (nScenes % calibrationSceneFreq === 0) {
  102. this.$router.push(`/experiments/${this.experimentName}/${calibrationScene}`)
  103. }
  104. else if (this.hasScenesLeft) {
  105. this.$router.push(`/experiments/${this.experimentName}/${this.getRandomScene}`)
  106. }
  107. }
  108. this.loaded = true
  109. }
  110. }
  111. </script>