192 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			192 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <script>
 | |
| import { RouterLink, RouterView } from 'vue-router'
 | |
| 
 | |
| import { mapState, mapActions } from 'pinia'
 | |
| import { UserStore } from '@/stores/user'
 | |
| import { ConcernementsStore } from '@/stores/concernements'
 | |
| 
 | |
| import StaticMenu from '@components/block/StaticMenu.vue'
 | |
| import UserBlock from '@components/block/UserBlock.vue'
 | |
| import SearchBlock from '@components/block/SearchBlock.vue'
 | |
| 
 | |
| import MapConcernements from '@components/MapConcernements.vue'
 | |
| import ConcernementMapItem from '@components/ConcernementMapItem.vue'
 | |
| 
 | |
| export default {
 | |
|   data() {
 | |
|     return {
 | |
|       mapitems: [],
 | |
|       // not_cloned_mapitems: [],
 | |
|       // superposed_cloned_mapitems: []
 | |
|     }
 | |
|   },
 | |
|   created () {
 | |
|     this.loadContentTypeDefinition();
 | |
|     this.loadConcernements()
 | |
|   },
 | |
|   mounted () {
 | |
|     console.log('APP onMounted')
 | |
|     this.checkUser()      
 | |
|   },
 | |
|   computed: {
 | |
|     ...mapState(UserStore,['isloggedin']),
 | |
|     ...mapState(ConcernementsStore,['map_mode',
 | |
|                                     'concernements',
 | |
|                                     'concernements_loaded',
 | |
|                                     'concernements_loading_nb',
 | |
|                                     'concernementsByID',
 | |
|                                     'allSuperpositions_bycids',
 | |
|                                     'allSuperpositions_clustered',
 | |
|                                     'allMapItems_byid',
 | |
|                                     'opened_recit']),
 | |
|   },
 | |
|   watch: {
 | |
|     concernements_loaded:{
 | |
|       handler (n, o) {
 | |
|         if(n && !o){
 | |
|           this.parseMapitems()
 | |
|         }
 | |
|       },
 | |
|       deep: true
 | |
|     },
 | |
|     concernements_loading_nb: {
 | |
|       handler (n, o) {
 | |
|         console.log('App watch concernements_loading_nb o, n', o, n);
 | |
|         this.parseMapitems();
 | |
|       },
 | |
|       deep: true
 | |
|     },
 | |
|     // concernementsByID:{
 | |
|     //   handler (n, o) {
 | |
|     //     console.log('App watch concernementsByID o, n', o, n);
 | |
|     //     this.parseMapitems();
 | |
|     //   },
 | |
|     //   deep: true
 | |
|     // }
 | |
|   },
 | |
|   methods: {
 | |
|     ...mapActions(ConcernementsStore,['loadConcernements']),
 | |
|     ...mapActions(ConcernementsStore,['loadContentTypeDefinition']),
 | |
|     ...mapActions(UserStore,['checkUser']),
 | |
|     parseMapitems() {
 | |
|       console.log(`App parseMapitems`);
 | |
|       this.mapitems = [];
 | |
|       // let couple_ids = Object.keys(this.allSuperpositions_bycids);
 | |
|       // console.log('App couple_ids', couple_ids);
 | |
|       // loop through all concernement
 | |
|       for(let [concernement_id, concernement] of Object.entries(this.concernementsByID)){
 | |
|         concernement.mapitems_ids = [];
 | |
|         // TODO check if more than 3 entities or if connected user if author
 | |
|         if (concernement.entites.length > 3 || concernement.can_update) {
 | |
|           // create the main mapitem object
 | |
|           let mapitem = {
 | |
|             id: concernement.id,
 | |
|             cid: concernement.id,
 | |
|             visible: concernement.visible,
 | |
|             // concernement: concernement,
 | |
|             // superposition_ids: [],
 | |
|             superposition_cluster_index: -1,
 | |
|             clone: false,
 | |
|             concernements_loading_nb: this.concernements_loading_nb
 | |
|           }
 | |
|   
 | |
|           // loop through all superposition_clusters
 | |
|           for( let [cluster_index, cluster] of this.allSuperpositions_clustered.entries()){
 | |
|             let cids = [];
 | |
|             // console.log(`cluster ${cluster_index}`, cluster);
 | |
|             for( let s of cluster){
 | |
|               cids.push(s.cid)
 | |
|             }
 | |
|             // console.log(`cids:${cids}`);
 | |
|             if(cids.indexOf(concernement.id) !== -1){
 | |
|               // console.log('concernement in cluster');
 | |
|               if (mapitem.superposition_cluster_index === -1) {
 | |
|                 // if main map item does not yet have a superposition use it and alter his id (for matter constraints)
 | |
|                 mapitem.superposition_cluster_index = cluster_index
 | |
|                 mapitem.id = `${concernement.id}___${cluster_index}`
 | |
|               }else{
 | |
|                 let mapitem_superposition = {
 | |
|                   id: `${concernement.id}___${cluster_index}`,
 | |
|                   cid: concernement.id,
 | |
|                   // concernement: concernement,
 | |
|                   superposition_cluster_index: cluster_index,
 | |
|                   clone: true
 | |
|                 };
 | |
|                 this.mapitems.push(mapitem_superposition);
 | |
|                 this.allMapItems_byid[mapitem_superposition.id] = mapitem_superposition;
 | |
|                 concernement.mapitems_ids.push(mapitem_superposition.id)
 | |
|               }
 | |
|             }
 | |
|           }
 | |
|           this.mapitems.push(mapitem)
 | |
|           this.allMapItems_byid[mapitem.id] = mapitem;
 | |
|           concernement.mapitems_ids.push(mapitem.id)
 | |
|           
 | |
|         }
 | |
|       }
 | |
|       console.log('App mapitems', this.mapitems);
 | |
|       console.log('this.allMapItems_byid', this.allMapItems_byid);
 | |
|       
 | |
|     }
 | |
|   },
 | |
|   components: {
 | |
|     MapConcernements,
 | |
|     ConcernementMapItem,
 | |
|     StaticMenu,
 | |
|     UserBlock,
 | |
|     SearchBlock
 | |
|   }
 | |
| }
 | |
| 
 | |
| </script>
 | |
| 
 | |
| <template>
 | |
|   <header id="header">
 | |
|     <div class="row title">
 | |
|       <h1>
 | |
|         <router-link :to="{ name: 'home' }"><span class="title">Atlas</span> des cartes d'atterrissage</router-link>  
 | |
|       </h1>
 | |
| 
 | |
|     </div>
 | |
|     <div class="row top">
 | |
|       <StaticMenu/>
 | |
|       <SearchBlock/> 
 | |
|       <UserBlock/>
 | |
|     </div>
 | |
|   </header>
 | |
| 
 | |
|   <div id="main-content">
 | |
|     <MapConcernements>
 | |
|       <transition name="fade">
 | |
|         <div class="loading" v-if="mapitems.length === 0">Chargement</div>
 | |
|       </transition>
 | |
|       <template v-if="mapitems.length > 0">
 | |
|         <template v-for="(mapitem,index) in mapitems">
 | |
|           <!--  && ((map_mode === 'superposition' && mapitem.clone) || !mapitem.clone) -->
 | |
|           <ConcernementMapItem
 | |
|             v-if="mapitem.visible"
 | |
|             :key="mapitem.id"
 | |
|             :mapitem="mapitem"
 | |
|           />
 | |
|         </template>
 | |
|       </template>
 | |
|     </MapConcernements>
 | |
|     <div id="content" :class="{'recit-opened':opened_recit}">
 | |
|       <RouterView />
 | |
|     </div>
 | |
|   </div>
 | |
| 
 | |
| </template>
 | |
| 
 | |
| <style lang="scss" scoped>
 | |
|   .fade-enter-active,
 | |
|   .fade-leave-active {
 | |
|     transition: opacity 1s ease;
 | |
|   }
 | |
| 
 | |
|   .fade-enter-from,
 | |
|   .fade-leave-to {
 | |
|     opacity: 0;
 | |
|   }
 | |
| </style>
 |