App.vue 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. <script>
  2. import { RouterLink, RouterView } from 'vue-router'
  3. import { mapState, mapActions } from 'pinia'
  4. import { UserStore } from '@/stores/user'
  5. import { ConcernementsStore } from '@/stores/concernements'
  6. import StaticMenu from '@components/block/StaticMenu.vue'
  7. import UserBlock from '@components/block/UserBlock.vue'
  8. import SearchBlock from '@components/block/SearchBlock.vue'
  9. import MapConcernements from '@components/MapConcernements.vue'
  10. import ConcernementMapItem from '@components/ConcernementMapItem.vue'
  11. export default {
  12. data() {
  13. return {
  14. mapitems: [],
  15. // not_cloned_mapitems: [],
  16. // superposed_cloned_mapitems: []
  17. }
  18. },
  19. created () {
  20. this.loadContentTypeDefinition();
  21. this.loadConcernements()
  22. },
  23. mounted () {
  24. console.log('APP onMounted')
  25. this.checkUser()
  26. },
  27. computed: {
  28. ...mapState(UserStore,['isloggedin']),
  29. ...mapState(ConcernementsStore,['map_mode',
  30. 'concernements',
  31. 'concernements_loaded',
  32. 'concernementsByID',
  33. 'allSuperpositions_byid',
  34. 'allMapItems_byid',
  35. 'opened_recit']),
  36. },
  37. watch: {
  38. concernements_loaded:{
  39. handler (n, o) {
  40. if(n && !o){
  41. this.parseMapitems()
  42. }
  43. },
  44. deep: true
  45. }
  46. },
  47. methods: {
  48. ...mapActions(ConcernementsStore,['loadConcernements']),
  49. ...mapActions(ConcernementsStore,['loadContentTypeDefinition']),
  50. ...mapActions(UserStore,['checkUser']),
  51. // parseSuperposedMapitemsClones () {
  52. // let clones = [];
  53. // // loop through all superposition grouped by concernements couples
  54. // for(let [couple_id, superpositions] of Object.entries(this.allSuperpositions_byid)){
  55. // // loop through all superpositions for one concernement couple and mark the first as NOT cloned and clone the others and mark them as cloned
  56. // let i = 0;
  57. // for(let [superposition_id, superposition] of Object.entries(superpositions)){
  58. // i++
  59. // if (i === 1) {
  60. // // first superposition of the couple is not cloned
  61. // this.allSuperpositions_byid[couple_id][superposition_id].cloned = false;
  62. // continue;
  63. // }
  64. // // following superpositions of the couple generate concernement map_item clones
  65. // // first concernement of the couple
  66. // clones.push({
  67. // concernement: this.concernementsByID[superposition[0].cid],
  68. // superposition_id: superposition_id
  69. // })
  70. // // second concernement of the couple
  71. // clones.push({
  72. // concernement: this.concernementsByID[superposition[1].cid],
  73. // superposition_id: superposition_id
  74. // })
  75. // this.allSuperpositions_byid[couple_id][superposition_id].cloned = true;
  76. // }
  77. // }
  78. // this.superposed_cloned_mapitems = clones;
  79. // },
  80. parseMapitems() {
  81. let couple_ids = Object.keys(this.allSuperpositions_byid);
  82. console.log('App couple_ids', couple_ids);
  83. // loop through all concernement
  84. for(let [concernement_id, concernement] of Object.entries(this.concernementsByID)){
  85. // create the main mapitem object
  86. let mapitem = {
  87. id: concernement.id,
  88. concernement: concernement,
  89. superposition_ids: [],
  90. clone: false,
  91. }
  92. // loop through superposistions couples
  93. couple_ids.forEach(couple_id => {
  94. let cids = couple_id.match(/(\d+)-(\d+)/i);
  95. // console.log('cids', cids);
  96. if (concernement.id === parseInt(cids[1]) || concernement.id === parseInt(cids[2])) {
  97. let i = 0;
  98. for(let [superposition_id, superposition] of Object.entries(this.allSuperpositions_byid[couple_id])){
  99. i++;
  100. if (i === 1) {
  101. mapitem.superposition_ids.push(superposition_id)
  102. }else{
  103. let mapitem_superposition = {
  104. id: `${concernement.id}___${superposition_id}`,
  105. concernement: concernement,
  106. superposition_ids: [superposition_id],
  107. clone: true
  108. };
  109. this.mapitems.push(mapitem_superposition);
  110. this.allMapItems_byid[mapitem_superposition.id] = mapitem_superposition;
  111. }
  112. }
  113. }
  114. });
  115. this.mapitems.push(mapitem)
  116. this.allMapItems_byid[mapitem.id] = mapitem;
  117. }
  118. console.log('App mapitems', this.mapitems);
  119. }
  120. },
  121. components: {
  122. MapConcernements,
  123. ConcernementMapItem,
  124. StaticMenu,
  125. UserBlock,
  126. SearchBlock
  127. }
  128. }
  129. </script>
  130. <template>
  131. <header id="header">
  132. <div class="row title">
  133. <h1>
  134. <router-link :to="{ name: 'home' }"><span class="title">Atlas</span> des cartes d'atterrissage</router-link>
  135. </h1>
  136. </div>
  137. <div class="row top">
  138. <StaticMenu/>
  139. <SearchBlock/>
  140. <UserBlock/>
  141. </div>
  142. </header>
  143. <div id="main-content">
  144. <MapConcernements>
  145. <template v-for="(mapitem,index) in mapitems">
  146. <ConcernementMapItem
  147. v-if="mapitem.concernement.visible && ((map_mode === 'superposition' && mapitem.clone) || !mapitem.clone)"
  148. :key="mapitem.id"
  149. :mapitem="mapitem"
  150. />
  151. </template>
  152. <!-- <template v-if="map_mode === 'superposition'">
  153. <template v-for="(mapitem,index) in superposed_cloned_mapitems">
  154. <ConcernementMapItem
  155. v-if="mapitem.concernement.visible"
  156. :key="mapitem.id"
  157. :mapitem="mapitem"
  158. />
  159. </template>
  160. </template> -->
  161. </MapConcernements>
  162. <div id="content" :class="{'recit-opened':opened_recit}">
  163. <RouterView />
  164. </div>
  165. </div>
  166. </template>
  167. <style lang="scss" scoped>
  168. </style>