App.vue 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  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. 'concernements_loading_nb',
  33. 'concernementsByID',
  34. 'allSuperpositions_bycids',
  35. 'allSuperpositions_clustered',
  36. 'allMapItems_byid',
  37. 'opened_recit']),
  38. },
  39. watch: {
  40. concernements_loaded:{
  41. handler (n, o) {
  42. if(n && !o){
  43. this.parseMapitems()
  44. }
  45. },
  46. deep: true
  47. },
  48. concernements_loading_nb: {
  49. handler (n, o) {
  50. console.log('App watch concernements_loading_nb o, n', o, n);
  51. this.parseMapitems();
  52. },
  53. deep: true
  54. }
  55. },
  56. methods: {
  57. ...mapActions(ConcernementsStore,['loadConcernements']),
  58. ...mapActions(ConcernementsStore,['loadContentTypeDefinition']),
  59. ...mapActions(UserStore,['checkUser']),
  60. parseMapitems() {
  61. console.log(`App parseMapitems`);
  62. this.mapitems = [];
  63. // let couple_ids = Object.keys(this.allSuperpositions_bycids);
  64. // console.log('App couple_ids', couple_ids);
  65. // loop through all concernement
  66. for(let [concernement_id, concernement] of Object.entries(this.concernementsByID)){
  67. // create the main mapitem object
  68. let mapitem = {
  69. id: concernement.id,
  70. concernement: concernement,
  71. // superposition_ids: [],
  72. superposition_cluster_index: -1,
  73. clone: false,
  74. concernements_loading_nb: this.concernements_loading_nb
  75. }
  76. // loop through all superposition_clusters
  77. for( let [cluster_index, cluster] of this.allSuperpositions_clustered.entries()){
  78. let cids = [];
  79. // console.log(`cluster ${cluster_index}`, cluster);
  80. for( let s of cluster){
  81. cids.push(s.cid)
  82. }
  83. // console.log(`cids:${cids}`);
  84. if(cids.indexOf(concernement.id) !== -1){
  85. // console.log('concernement in cluster');
  86. if (mapitem.superposition_cluster_index === -1) {
  87. // if main map item does not yet have a superposition use it and alter his id (for matter constraints)
  88. mapitem.superposition_cluster_index = cluster_index
  89. mapitem.id = `${concernement.id}___${cluster_index}`
  90. }else{
  91. let mapitem_superposition = {
  92. id: `${concernement.id}___${cluster_index}`,
  93. concernement: concernement,
  94. superposition_cluster_index: cluster_index,
  95. clone: true
  96. };
  97. this.mapitems.push(mapitem_superposition);
  98. this.allMapItems_byid[mapitem_superposition.id] = mapitem_superposition;
  99. }
  100. }
  101. }
  102. this.mapitems.push(mapitem)
  103. this.allMapItems_byid[mapitem.id] = mapitem;
  104. }
  105. console.log('App mapitems', this.mapitems);
  106. }
  107. },
  108. components: {
  109. MapConcernements,
  110. ConcernementMapItem,
  111. StaticMenu,
  112. UserBlock,
  113. SearchBlock
  114. }
  115. }
  116. </script>
  117. <template>
  118. <header id="header">
  119. <div class="row title">
  120. <h1>
  121. <router-link :to="{ name: 'home' }"><span class="title">Atlas</span> des cartes d'atterrissage</router-link>
  122. </h1>
  123. </div>
  124. <div class="row top">
  125. <StaticMenu/>
  126. <SearchBlock/>
  127. <UserBlock/>
  128. </div>
  129. </header>
  130. <div id="main-content">
  131. <MapConcernements>
  132. <transition name="fade">
  133. <div class="loading" v-if="mapitems.length === 0">Chargement</div>
  134. </transition>
  135. <template v-if="mapitems.length > 0">
  136. <template v-for="(mapitem,index) in mapitems">
  137. <!-- && ((map_mode === 'superposition' && mapitem.clone) || !mapitem.clone) -->
  138. <ConcernementMapItem
  139. v-if="mapitem.concernement.visible"
  140. :key="mapitem.id"
  141. :mapitem="mapitem"
  142. />
  143. </template>
  144. </template>
  145. </MapConcernements>
  146. <div id="content" :class="{'recit-opened':opened_recit}">
  147. <RouterView />
  148. </div>
  149. </div>
  150. </template>
  151. <style lang="scss" scoped>
  152. .fade-enter-active,
  153. .fade-leave-active {
  154. transition: opacity 1s ease;
  155. }
  156. .fade-enter-from,
  157. .fade-leave-to {
  158. opacity: 0;
  159. }
  160. </style>