diff --git a/src/App.vue b/src/App.vue index 35c6058..6091307 100644 --- a/src/App.vue +++ b/src/App.vue @@ -33,6 +33,7 @@ export default { ...mapState(ConcernementsStore,['map_mode', 'concernements', 'concernements_loaded', + 'concernements_loading_nb', 'concernementsByID', 'allSuperpositions_bycids', 'allSuperpositions_clustered', @@ -47,6 +48,13 @@ export default { } }, deep: true + }, + concernements_loading_nb: { + handler (n, o) { + console.log('App watch concernements_loading_nb o, n', o, n); + this.parseMapitems(); + }, + deep: true } }, methods: { @@ -54,6 +62,8 @@ export default { ...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 @@ -65,6 +75,7 @@ export default { // superposition_ids: [], superposition_cluster_index: -1, clone: false, + concernements_loading_nb: this.concernements_loading_nb } // loop through all superposition_clusters diff --git a/src/assets/main.scss b/src/assets/main.scss index 950a6cf..fe1ce2f 100644 --- a/src/assets/main.scss +++ b/src/assets/main.scss @@ -67,6 +67,23 @@ body{ } +div.loading{ + text-align: center; + font-size: 1.134em; + &::after{ + background: url(../assets/Ellipsis-5s-100px.svg); + background-clip: content-box; + background-size: contain; + background-position: center; + background-repeat: no-repeat; + display: inline-block; + vertical-align: middle; + width: 40px; height: 30px; + // border: #01ffe2; + content: " "; + } +} + #main-content{ #map-backgrounds{ @@ -80,9 +97,7 @@ body{ // display:none; } } - } - #map-concernements{ div.loading{ position: absolute; @@ -92,20 +107,8 @@ body{ transform: translateX(-50%) translateY(-50%); width: 150px; display: block; - text-align: center; - // font-weight: 600; - font-size: 1.134em; &::after{ - background: url(../assets/Ellipsis-5s-100px.svg); - background-clip: content-box; - background-size: contain; - background-position: center; - background-repeat: no-repeat; - display: inline-block; - width: 150px; height: 30px; - - border: #01ffe2; - content: " "; + width: 150px; } } } diff --git a/src/components/ConcernementMapItem.vue b/src/components/ConcernementMapItem.vue index db7c9e7..934e895 100644 --- a/src/components/ConcernementMapItem.vue +++ b/src/components/ConcernementMapItem.vue @@ -74,7 +74,9 @@ export default { 'allMapItems_byid', 'opened_concernement', 'opened_entite_id', - 'detailsZoomValue']), + 'concernement_active_revision', + 'detailsZoomValue', + 'concernements_loading_nb']), ...mapState(CommonStore,['hover_elmt', 'map_item_ray', 'cartouch_width', @@ -82,18 +84,10 @@ export default { 'paper_symbol_definitions']) }, created () { - // console.log('ConcernementMapItem created', this.mapitem); + console.log('ConcernementMapItem created', this.mapitem); // this.id = this.superposition_id ? `${this.cid}___${this.superposition_id}` : this.cid; // console.log(`this.mapitem.id`, this.mapitem.id); - this.id = this.mapitem.id; - this.concernement = this.mapitem.concernement; - this.cid = this.concernement.id; - // console.log('mapitem this.cid', this.cid); - this.active_revision = this.concernement.active_revision; - - // console.log(`ConcernementsMapItem ${this.id} created`); - // this.entites = this.concernement.entites - this.entites = this.concernement.revisions_byid[this.concernement.revision_id].entites; + this.resetConcernement(); // disable concernement if less than 3 entite @@ -163,8 +157,13 @@ export default { }, opened_concernement: { handler (n, o) { + console.log(`concernementMapitem ${this.cid} watch opened_concernement o, n`, o, n); if (!n) { // if there is no opened concernement this.is_open = false; + if (this.active_revision !== this.concernement.active_revision) { + this.active_revision = this.concernement.active_revision; + this.resetPaperEntitesAndContours(); + } this.applyShuffleForces(); } else { if(this.cid === n.id && this.id === n.opened_mapitem_id){ @@ -255,13 +254,23 @@ export default { }, concernement: { handler (n, o){ + console.log(`ConcernementMapItem ${this.id} watch concernement o, n`, this.concernement.parsedEntites, o, n); // check for active_revision changes // do not trigger on first variable filling (if o is null) - if(this.is_open && o && o.active_revision && n.active_revision && this.map_mode === "terraindevie"){ - // be aware that here o & n active_revision are already the same :( !? - console.log(`concernementMapItem watch concernement o.active_revision:${o.active_revision}, n.active_revision:${n.active_revision}`); - this.resetPaperActiveRevision(); + // check for new concernement object + if(!this.concernement.parsedEntites){ + console.log(`watch mapItem ${this.cid} reseting paperentitiesandcontours`); + this.resetPaperEntitesAndContours(); } + + // // check for new active_revision + // // TODO fix that (it is loop triggering when new concernement object) + // if(this.is_open && o && o.active_revision && n.active_revision && this.map_mode === "terraindevie"){ + // // be aware that here o & n active_revision are already the same :( !? + // console.log(`concernementMapItem watch concernement o.active_revision:${o.active_revision}, n.active_revision:${n.active_revision}`); + // // this.resetPaperEntitesAndContours(); + // } + // // check for doleance change // if (this.is_open && o && o.opened_doleance && n.opened_doleance && this.map_mode === "doleancer") { // // be aware that here o & n opened_doleance are already the same :( !? @@ -280,6 +289,20 @@ export default { }, deep: true }, + concernement_active_revision: { + handler (n, o){ + // console.log(`ConcernementMapItem ${this.id} watch concernement_active_revision o, n`, o, n); + if (this.is_open && o) { + // console.log(`n.cid: ${n.cid}, n.rid: ${n.rid}, this.is_open: ${this.is_open}, this.cid: ${this.cid}`); + // console.log(this.cid, n.cid, n.rid); + if (parseInt(n.cid) === this.cid) { + this.active_revision = n.rid; + this.resetPaperEntitesAndContours(); + } + } + }, + deep: true + }, detailsZoomValue: { handler (n, o) { if (this.is_open && this.map_mode === "terraindevie") { @@ -288,6 +311,24 @@ export default { } }, deep: true + }, + // concernements_loading_nb: { + // handler (n, o) { + // console.log(`concernementMapItem ${this.id} watch concernements_loading_nb o, n`, o, n); + // // this.resetPaperEntitesAndContours(); + // }, + // deep: true + // }, + mapitem: { + handler (n, o) { + console.log(`ConcernementMapItem ${this.id} watch mapitem o, n`, o, n); + if (n.concernements_loading_nb !== o.concernements_loading_nb) { + // this.resetPaperEntitesAndContours(); + // this.concernement = this.mapitem.concernement; + this.resetConcernement(); + } + }, + deep: true } }, methods: { @@ -301,6 +342,17 @@ export default { 'setOpenedRecit', 'setDetailsZoomValue', ]), + resetConcernement(){ + this.id = this.mapitem.id; + this.concernement = this.mapitem.concernement; + this.cid = this.concernement.id; + // console.log('mapitem this.cid', this.cid); + this.active_revision = this.concernement.active_revision; + + // console.log(`ConcernementsMapItem ${this.id} created`); + // this.entites = this.concernement.entites + this.entites = this.concernement.revisions_byid[this.concernement.revision_id].entites; + }, parseEntityPointsValues (){ // converts data (menace/maintien, actuel/future, prise) into atcual position x,y for (let r = 0; r < this.concernement.revisions.length; r++) { // loop through all revisions @@ -347,6 +399,7 @@ export default { // } } } + this.concernement.parsedEntites = true; }, getSalientPoints_OLD() { // debugger @@ -776,24 +829,33 @@ export default { break; } }, - resetPaperActiveRevision(){ - console.log('resetPaperActiveRevision'); - - this.sailentEntites = this.getJarvisEnvelopeConvexeEntites(this.concernement.revisions_byid[this.concernement.active_revision].entites); - - // remove contours if already exists - if (this.paper_main_object.children.contours) { - this.paper_main_object.children.contours.remove(); + resetPaperEntitesAndContours(){ + console.log(`concernementMapitem ${this.id} resetPaperEntitesAndContours this.concernement`, this.concernement); + if (!this.isResetingPaperEntites) { + console.log(`ResetingPaperEntites ${this.id}`); + this.isResetingPaperEntites = true; + this.parseEntityPointsValues() + + this.sailentEntites = this.getJarvisEnvelopeConvexeEntites(this.concernement.revisions_byid[this.active_revision].entites); + + // remove contours if already exists + if (this.paper_main_object.children.contours) { + this.paper_main_object.children.contours.remove(); + } + // redraw contours + this.paper_main_object.addChild(this.setPaperContour()); + + // remove entites if already exists + if (this.paper_main_object.children.entites) { + this.paper_main_object.children.entites.remove(); + } + // redraw entites + this.paper_main_object.addChild(this.setPaperEntites()); + + this.isResetingPaperEntites = false; + console.log(`END ResetingPaperEntites ${this.id}`); } - // redraw contours - this.paper_main_object.addChild(this.setPaperContour()); - - // remove entites if already exists - if (this.paper_main_object.children.entites) { - this.paper_main_object.children.entites.remove(); - } - // redraw entites - this.paper_main_object.addChild(this.setPaperEntites()); + }, clearPaperContents(){ let clearable_children = ['boussole_bg', 'entites', @@ -932,8 +994,8 @@ export default { g.addChild(g_label); g_label.sendToBack(); // for (let i = 0; i < this.entites.length; i++) { - for (let i = 0; i < this.concernement.revisions_byid[this.concernement.active_revision].entites.length; i++) { - let entite = this.concernement.revisions_byid[this.concernement.active_revision].entites[i]; + for (let i = 0; i < this.concernement.revisions_byid[this.active_revision].entites.length; i++) { + let entite = this.concernement.revisions_byid[this.active_revision].entites[i]; // item type let item_type = entite.entite ? entite.entite.agissante ? 'entite_action' : 'entite' : 'entite_hidden'; @@ -1024,8 +1086,8 @@ export default { pivot: new paper.Point(this.pos), name: 'entites_superposes' }); - for (let i = 0; i < this.concernement.revisions_byid[this.concernement.active_revision].entites.length; i++) { - let entite = this.concernement.revisions_byid[this.concernement.active_revision].entites[i]; + for (let i = 0; i < this.concernement.revisions_byid[this.active_revision].entites.length; i++) { + let entite = this.concernement.revisions_byid[this.active_revision].entites[i]; if (entite.entite // check if we have an entite object with all the contents && this.superposedEntiteID === entite.entite.id) // check if entite id { @@ -1051,8 +1113,8 @@ export default { pivot: new paper.Point(this.pos), name: 'entites_proximites' }); - for (let i = 0; i < this.concernement.revisions_byid[this.concernement.active_revision].entites.length; i++) { - let entite = this.concernement.revisions_byid[this.concernement.active_revision].entites[i]; + for (let i = 0; i < this.concernement.revisions_byid[this.active_revision].entites.length; i++) { + let entite = this.concernement.revisions_byid[this.active_revision].entites[i]; if (entite.entite // check if we have an entite object with all the contents && entite.entite.proximite.length ) // check if entite id is in the list builded above { @@ -1080,8 +1142,8 @@ export default { }); // loop through all concernement's entites // keeping only those who have proximite - for (let i = 0; i < this.concernement.revisions_byid[this.concernement.active_revision].entites.length; i++) { - let entite = this.concernement.revisions_byid[this.concernement.active_revision].entites[i]; + for (let i = 0; i < this.concernement.revisions_byid[this.active_revision].entites.length; i++) { + let entite = this.concernement.revisions_byid[this.active_revision].entites[i]; if (entite.entite // check if we have an entite object with all the contents && entite.entite.proximite.length ) // check if entite id is in the list builded above { @@ -1302,7 +1364,7 @@ export default { // name: 'agissantes_icons' // }); // for (let i = 0; i < this.concernement.revisions_byid[this.concernement.revision_id].entites.length; i++) { - // let entite = this.concernement.revisions_byid[this.concernement.active_revision].entites[i]; + // let entite = this.concernement.revisions_byid[this.active_revision].entites[i]; // if (entite.entite && entite.entite.agissante) { // let instance = new paper.SymbolItem(this.paper_symbol_definitions['entite_action_icon']); // instance.name = 'entite_action'; @@ -2302,7 +2364,7 @@ export default { }, openClose(open) { // async // await nextTick(); // not working - console.log(`ConcernementsMapItem ${this.id} openClose: ${open}`); + console.log(`ConcernementsMapItem openClose ${this.id} openClose: ${open}`); if (this.tween) { this.tween.stop(); } @@ -2382,9 +2444,9 @@ export default { Matter.Composite.remove(this.matterEngine.world, this.constraint); } - // this.concernement.active_revision = this.concernement.revision_id; - this.setActiveRevision(this.cid, this.concernement.revision_id);//this.concernement.revisions[this.concernement.revisions.length -1].revision_id); - this.resetPaperActiveRevision(); + // this.active_revision = this.concernement.revision_id; + // this.setActiveRevision(this.cid, this.concernement.revision_id);//this.concernement.revisions[this.concernement.revisions.length -1].revision_id); + // this.resetPaperEntitesAndContours(); this.handlePaperVisibilityOnBeforeClose(); diff --git a/src/components/contents/Doleancer.vue b/src/components/contents/Doleancer.vue index 1617634..2d50a91 100644 --- a/src/components/contents/Doleancer.vue +++ b/src/components/contents/Doleancer.vue @@ -26,7 +26,6 @@ export default { ...mapState(ConcernementsStore,['map_mode', 'opened_concernement', 'concernementsByID', - 'concernements_loaded', 'ct_concernement', 'ct_cercle_politique', 'p_groupes_interets', diff --git a/src/components/contents/TerrainDeVie.vue b/src/components/contents/TerrainDeVie.vue index b1dc55f..3f3a81f 100644 --- a/src/components/contents/TerrainDeVie.vue +++ b/src/components/contents/TerrainDeVie.vue @@ -44,6 +44,7 @@ export default { chevrondown_path: mdiChevronDown, headerreduced: false, mdiStickerPlusOutline_path: mdiStickerPlusOutline, + reloading_concernements: false } }, computed: { @@ -52,7 +53,9 @@ export default { 'concernementsByID', 'ct_concernement', 'ct_entite', - 'detailsZoomValue']), + 'detailsZoomValue', + // 'concernements_are_loading' + ]), ...mapState(UserStore,['name','csrf_token']), created(){ let d = new Date(this.concernement.created); @@ -184,7 +187,12 @@ export default { } }, methods: { - ...mapActions(ConcernementsStore, ['setActiveRevision', 'setDetailsZoomValue']), // 'loadConcernementsRevisions' + ...mapActions(ConcernementsStore, ['setActiveRevision', + 'setDetailsZoomValue', + 'loadConcernements', + 'reloadConcernements', + 'reloadConcernementEntites']), + // 'loadConcernementsRevisions' onClickInfos(){ this.infos_opened = !this.infos_opened; }, @@ -224,6 +232,7 @@ export default { }, addEntite(e){ console.log('add entite'); + this.reloading_concernements = true; // 1 create entite node this.createEntiteNode() .then((entite) => { @@ -237,6 +246,11 @@ export default { .then((concernement) => { console.log('concernement', concernement); // TODO reload the map item + // this.reloadConcernementEntites(concernement.nid[0].value); + this.reloadConcernements() + .then(() => { + this.reloading_concernements = false; + }); }) }) }) @@ -436,10 +450,13 @@ export default { diff --git a/src/stores/concernements.js b/src/stores/concernements.js index 91317e7..1ccbea0 100644 --- a/src/stores/concernements.js +++ b/src/stores/concernements.js @@ -17,6 +17,7 @@ export const ConcernementsStore = defineStore({ id: 'concernements', state: () => ({ map_mode: null, + concernements_loading_nb: 0, concernements: [], concernementsByID: {}, allEntitesById: {}, @@ -38,6 +39,8 @@ export const ConcernementsStore = defineStore({ p_mise_en_oeuvre_decision: {}, p_reception_application_decision: {}, concernements_loaded: false, + concernements_are_loading: false, + concernement_active_revision: null, detailsZoomValue: 1, }), getters: { @@ -51,6 +54,7 @@ export const ConcernementsStore = defineStore({ }, loadConcernements () { console.log('concernements store loadConcernements'); + this.concernements_are_loading = true; return new Promise((resolve, reject) => { const ast = gql`{ allconcernements { @@ -62,199 +66,282 @@ export const ConcernementsStore = defineStore({ // console.log('ast', ast); GQL.post('', { query: print(ast) }) .then(({ data : { data : { allconcernements } } }) => { - console.log('loadconcernements all loaded', allconcernements) + console.log('loadconcernements loaded', allconcernements) this.concernements = []; - // parse concernements - let temp_allSuperpositions = []; - allconcernements.forEach(concernement => { - concernement.visible = true; - - concernement.entites_byid = {}; - concernement.entitesagissantes_byid = {}; - concernement.has_proximites = false; - concernement.has_superpositions = false; - concernement.has_agissantes = false; - // var entites_temp = concernement.entites; // record a temp entites liste - // concernement.entites = []; // erase the concernement.entite array as we want to keep only visible entites - concernement.entites.forEach(entite => { - if (entite.entite) { // entite.entite may be null because of workflow confidentiality - concernement.entites_byid[entite.entite.id] = entite; - // record entite agissante - if (entite.entite.agissante) { - concernement.entitesagissantes_byid[entite.entite.id] = entite; - concernement.has_agissantes = true; - } - // record a flat list of all entités of all concernement for map-popup - this.allEntitesById[entite.entite.id] = entite; - this.allEntitesById[entite.entite.id].cid = concernement.id; - // concernement.entites.push(entite); // fill the entites array with visible entite only - - // PROXIMITES - if (entite.entite.proximite.length) { - console.log("proximite", entite.entite.proximite); - concernement.has_proximites = true; - } - - // SUPERPOSITIONS - if (entite.entite.superposition.length) { - // create properties for later - concernement.superpositions = {}; - concernement.superposition_constraints_id = {}; - concernement.all_superposed_concernements_id = []; - concernement.superposed_mapitem_id_by_mapitem_id = {}; - - entite.entite.superposition.forEach(entite_superpose => { - // console.log(`superposition eid:${entite.entite.id}, teid:${entite_superpose.id}`); - let already_recorded = false; - // loop through all already recorded superposition to complete the array instead of create duplicates - // TODO check if target cid and eid are accessible before recording the superposition - // check if half of the superpositions is already recorded, if yes complete it (add the missing concernement id) - for(let superposition of temp_allSuperpositions) { - for(let superposition_item of superposition) { - if (superposition_item.eid === entite.entite.id && !superposition_item.cid) { - // console.log(`already_recorded, eid:${entite.entite.id}, teid:${entite_superpose.id}`, entite.entite.title); - already_recorded = true; - superposition_item.cid = concernement.id; - break; - } - } - if (already_recorded) { - break; - } - } - // if not already recorded, add it to the array. It is incomplete has it's missing one concernement id wich will be filled in next loops - if (!already_recorded) { - // console.log(`NOT already_recorded, eid:${entite.entite.id}, teid:${entite_superpose.id}`, entite.entite.title); - let s = [ - { - cid: concernement.id, - eid: entite.entite.id - }, - { - cid: null, - eid: entite_superpose.id - } - ]; - // concernement.superpositions.push(s); - temp_allSuperpositions.push(s); - - } - }) - } - - } - }); - - - // revisions - concernement.active_revision = concernement.revision_id; - concernement.revisions_byid = {}; - concernement.revisions.forEach(rev => { - concernement.revisions_byid[rev.revision_id] = rev; - }); - - // puissance d'agir - concernement.has_puissancedagir = concernement.besoins.length ? true : false; - concernement.besoins.forEach(besoin => { - this.allBesoinsById[besoin.id] = besoin; - }); - - // doleance - concernement.has_doleance = concernement.doleances.length ? true : false; - if (concernement.has_doleance) { - console.log('concernement has doleance', concernement.doleances); - concernement.opened_doleance = { - id: concernement.doleances[0].id - }; - } - - // recit - concernement.has_recit = concernement.recit !== null; - - // common - this.concernements.push(concernement); - this.concernementsByID[concernement.id] = concernement; - - }); // end of concernements loop - console.log('temp_allSuperpositions', temp_allSuperpositions); - - // cleaning superpositions, removing all incomplète onces - temp_allSuperpositions.forEach(s => { - if (s[0] && s[0].cid && s[0].eid && s[1] && s[1].cid && s[1].eid) { - this.allSuperpositions.push(s); - this.concernementsByID[s[0].cid].has_superpositions = true; - this.concernementsByID[s[1].cid].has_superpositions = true; - } - }); - console.log('this.allSuperpositions', this.allSuperpositions); - - - // get superpositions by cluster - for(let superpos_to_record of this.allSuperpositions){ - let recorded = false; - // console.log('-- -- --'); - // console.log(`superpos_to_record : ${superpos_to_record[0].cid}-${superpos_to_record[0].eid}, ${superpos_to_record[1].cid}-${superpos_to_record[1].eid}`); - // loop through alredy recorded clusters - for(let [cluster_index, superpo_cluster] of this.allSuperpositions_clustered.entries()){ - // console.log('cluster_index', cluster_index); - // for each cluster loop throug each superposition - in_cluster_loop:{ - for(let s of superpo_cluster){ - // console.log(`s : ${s.cid}-${s.eid}`); - // loop through each cid_eid couple of superpo to be recorded - for(let i = 0; i <= 1; i++){ - // if one couple already recorded in the cluster, add the other one to the same cluster - if (superpos_to_record[i].cid === s.cid && superpos_to_record[i].eid === s.eid){ - // console.log('-- recorded'); - let j = i === 0 ? 1 : 0; - // add the right item to the cluster - this.allSuperpositions_clustered[cluster_index].push(superpos_to_record[j]); - // record the superposition on the concernement BY cluster index - // console.log(`superpos_to_record[j].cid:${superpos_to_record[j].cid}`); - // console.log('concernement', this.concernementsByID[superpos_to_record[j].cid]); - // create array if not already exists - if(typeof this.concernementsByID[superpos_to_record[j].cid].superpositions[cluster_index] === 'undefined'){ - this.concernementsByID[superpos_to_record[j].cid].superpositions[cluster_index] = [superpos_to_record]; - }else{ - this.concernementsByID[superpos_to_record[j].cid].superpositions[cluster_index].push(superpos_to_record); - } - recorded = true; - break in_cluster_loop; - } - } - } - } - } - - if(!recorded){ - // console.log('-- not recorded'); - // create cluster and fill it it with first couple - this.allSuperpositions_clustered.push(superpos_to_record); - // record superposition on each concernement of each couple member BY cluster index - for( let i=0; i <= 1; i++){ - this.concernementsByID[superpos_to_record[i].cid].superpositions[this.allSuperpositions_clustered.length-1] = [superpos_to_record]; - // console.log(`concernement ${superpos_to_record[i].cid} superposition by cluster index`,this.concernementsByID[superpos_to_record[i].cid].superpositions); - } - } - } - console.log('this.allSuperpositions_clustered', this.allSuperpositions_clustered); - - + this.parseConcernements(allconcernements, true) this.concernements_loaded = true; + this.concernements_loading_nb ++; + this.concernements_are_loading = false; + resolve(); }) .catch(error => { console.warn('Issue with loadConcernements', error) + this.concernements_are_loading = false; Promise.reject(error) }) }) }, + parseConcernements(allconcernements, init) { + console.log('parse concernements'); + let temp_allSuperpositions = []; + allconcernements.forEach((concernement) => { + // console.log(`parsing concernement ${concernement.id}`); + concernement.visible = true; + + concernement.entites_byid = {}; + concernement.entitesagissantes_byid = {}; + concernement.has_proximites = false; + concernement.has_superpositions = false; + concernement.has_agissantes = false; + // var entites_temp = concernement.entites; // record a temp entites liste + // concernement.entites = []; // erase the concernement.entite array as we want to keep only visible entites + concernement.entites.forEach(entite => { + // console.log(`parsing entite ${entite.id}`); + if (entite.entite) { // entite.entite may be null because of workflow confidentiality + if (!concernement.entites_byid[entite.entite.id]) { + concernement.entites_byid[entite.entite.id] = entite; + } + // record entite agissante + if (entite.entite.agissante) { + if (!concernement.entitesagissantes_byid[entite.entite.id]) { + concernement.entitesagissantes_byid[entite.entite.id] = entite; + } + concernement.has_agissantes = true; + } + // record a flat list of all entités of all concernement for map-popup + if (!this.allEntitesById[entite.entite.id]) { + this.allEntitesById[entite.entite.id] = entite; + this.allEntitesById[entite.entite.id].cid = concernement.id; + } + // concernement.entites.push(entite); // fill the entites array with visible entite only + + // PROXIMITES + if (entite.entite.proximite.length) { + // console.log("proximite", entite.entite.proximite); + concernement.has_proximites = true; + } + + // SUPERPOSITIONS + if (entite.entite.superposition.length) { + // create properties for later + if (init) { + concernement.superpositions = {}; + concernement.superposition_constraints_id = {}; + concernement.all_superposed_concernements_id = []; + concernement.superposed_mapitem_id_by_mapitem_id = {}; + } + + entite.entite.superposition.forEach(entite_superpose => { + // console.log(`superposition eid:${entite.entite.id}, teid:${entite_superpose.id}`); + let already_recorded = false; + // loop through all already recorded superposition to complete the array instead of create duplicates + // TODO check if target cid and eid are accessible before recording the superposition + // check if half of the superpositions is already recorded, if yes complete it (add the missing concernement id) + for(let superposition of temp_allSuperpositions) { + for(let superposition_item of superposition) { + if (superposition_item.eid === entite.entite.id && !superposition_item.cid) { + // console.log(`already_recorded, eid:${entite.entite.id}, teid:${entite_superpose.id}`, entite.entite.title); + already_recorded = true; + superposition_item.cid = concernement.id; + break; + } + } + if (already_recorded) { + break; + } + } + // if not already recorded, add it to the array. It is incomplete has it's missing one concernement id wich will be filled in next loops + if (!already_recorded) { + // console.log(`NOT already_recorded, eid:${entite.entite.id}, teid:${entite_superpose.id}`, entite.entite.title); + let s = [ + { + cid: concernement.id, + eid: entite.entite.id + }, + { + cid: null, + eid: entite_superpose.id + } + ]; + // concernement.superpositions.push(s); + temp_allSuperpositions.push(s); + + } + }) + } + + } + }); // end of concernement.entites loop + + + // revisions + concernement.active_revision = concernement.revision_id; + concernement.revisions_byid = {}; + concernement.revisions.forEach(rev => { + concernement.revisions_byid[rev.revision_id] = rev; + }); + + // puissance d'agir + concernement.has_puissancedagir = concernement.besoins.length ? true : false; + concernement.besoins.forEach(besoin => { + this.allBesoinsById[besoin.id] = besoin; + }); + + // doleance + concernement.has_doleance = concernement.doleances.length ? true : false; + if (concernement.has_doleance) { + // console.log('concernement has doleance', concernement.doleances); + concernement.opened_doleance = { + id: concernement.doleances[0].id + }; + } + + // recit + concernement.has_recit = concernement.recit !== null; + + // common + // if (!concernement_is_reloaded) { + this.concernements.push(concernement); + this.concernementsByID[concernement.id] = concernement; + // }else{ + // // this.concernements[concernement_index] = concernement; + // this.concernementsByID[concernement.id] = concernement; + // // TODO check that this.concernements and this.concernementsByID contains the same item + // } + + }); // end of concernements loop + // console.log('this.concernements', this.concernements); + // console.log('this.concernementsByID', this.concernementsByID); + + // console.log('temp_allSuperpositions', temp_allSuperpositions); + + // cleaning superpositions, removing all incomplète onces + this.allSuperpositions = []; + temp_allSuperpositions.forEach(s => { + if (s[0] && s[0].cid && s[0].eid && s[1] && s[1].cid && s[1].eid) { + this.allSuperpositions.push(s); + this.concernementsByID[s[0].cid].has_superpositions = true; + this.concernementsByID[s[1].cid].has_superpositions = true; + } + }); + // console.log('this.allSuperpositions', this.allSuperpositions); + + // 1 check if cluster already exists and if yes complete with the next item of cluster + // 2 if cluster deos not exists, create the cluster and fill it with first item of cluster + + // 1 check if cluster already exists and if yes complete with the next item of cluster + // get superpositions by cluster + for(let superpos_to_record of this.allSuperpositions){ + let recorded = false; + // console.log('-- -- --'); + // console.log(`superpos_to_record : ${superpos_to_record[0].cid}-${superpos_to_record[0].eid}, ${superpos_to_record[1].cid}-${superpos_to_record[1].eid}`); + // loop through alredy recorded clusters + for(let [cluster_index, superpo_cluster] of this.allSuperpositions_clustered.entries()){ + // console.log('cluster_index', cluster_index); + // for each cluster loop throug each superposition + in_cluster_loop:{ + for(let s of superpo_cluster){ + // console.log(`s : ${s.cid}-${s.eid}`); + // loop through each cid_eid couple of superpo to be recorded + for(let i = 0; i <= 1; i++){ + // if one couple already recorded in the cluster, add the other one to the same cluster + if (superpos_to_record[i].cid === s.cid && superpos_to_record[i].eid === s.eid){ + // console.log('-- recorded'); + let j = i === 0 ? 1 : 0; + // check if item is not already recorded in the cluster (in case of reparsing concernements) + let already_clustered = false; + for (let s2 of superpo_cluster) { + if (superpos_to_record[j].cid === s2.cid && superpos_to_record[j].eid === s2.eid){ + already_clustered = true; + break; + } + } + // if not already recorded + if (!already_clustered) { + // add the right item to the cluster + this.allSuperpositions_clustered[cluster_index].push(superpos_to_record[j]); + } + + // record the superposition on the concernement BY cluster index + // create array if not already exists + if(typeof this.concernementsByID[superpos_to_record[j].cid].superpositions[cluster_index] === 'undefined'){ + this.concernementsByID[superpos_to_record[j].cid].superpositions[cluster_index] = [superpos_to_record]; + }else if(!already_clustered){ + this.concernementsByID[superpos_to_record[j].cid].superpositions[cluster_index].push(superpos_to_record); + } + recorded = true; + break in_cluster_loop; + } + } + } + } + } + + // 2 if cluster deos not exists, create the cluster and fill it with first item of cluster + if(!recorded){ + // console.log('-- not recorded'); + // create cluster and fill it with first item of couple + this.allSuperpositions_clustered.push(superpos_to_record); + // record superposition on each concernement of each couple member BY cluster index + for( let i=0; i <= 1; i++){ + this.concernementsByID[superpos_to_record[i].cid].superpositions[this.allSuperpositions_clustered.length-1] = [superpos_to_record]; + // console.log(`concernement ${superpos_to_record[i].cid} superposition by cluster index`,this.concernementsByID[superpos_to_record[i].cid].superpositions); + } + } + } + // console.log('this.allSuperpositions_clustered', this.allSuperpositions_clustered); + // console.log(`end of parsing concernements`); + + }, reloadConcernements () { console.log('reloadConcernements'); - // reset the arrays - // this.concernements = []; - // this.concernementsByID = {}; - // this.concernements_loaded = false; - this.loadConcernements(); + return new Promise((resolve, reject) => { + // reset the arrays + this.concernements = []; + this.concernementsByID = {}; + // this.concernements_loaded = false; + this.loadConcernements() + .then(()=>{ + resolve(); + }); + }) + }, + reloadConcernementEntites(nid){ + // console.log('reloadConcernementEntites nid', nid); + // const ast = gql`{ + // concernement(id:${nid}) { + // entites { + // id + // revision_id + // menacemaintien + // actuelfuture + // entite { + // title + // id + // agissante + // proximite { + // id + // title + // } + // superposition { + // id + // title + // } + // } + // } + // } + // } + // ` + // // console.log('ast', ast); + // GQL.post('', { query: print(ast) }) + // .then(({ data : { data : { concernement } } }) => { + // console.log('reloadConcernementEntites loaded', concernement) + // // this.concernementsByID[concernement.id].entites = concernement.entites; + // }) + // .catch(error => { + // console.warn('Issue with reloadConcernementEntites', error) + // Promise.reject(error) + // }) }, loadContentTypeDefinition () { const body = { @@ -372,15 +459,15 @@ export const ConcernementsStore = defineStore({ this.opened_concernement = null; this.opened_recit = null; this.concernements.forEach((c, i) => { - state = cid === c.id; // console.log(`openCloseConcernements foreach id: ${id}, c.id: ${c.id}, state: ${state}`, id, c.id); - c.opened = this.concernements[i].opened = this.concernementsByID[c.id].opened = state; - if (state) { + c.opened = this.concernements[i].opened = this.concernementsByID[c.id].opened = cid === c.id; + if (c.opened) { this.opened_concernement = c; this.opened_concernement.opened_mapitem_id = mapitem_id; if (c.has_recit && this.map_mode === "terraindevie") { this.opened_recit = c.recit; } + this.concernement_active_revision = {cid: cid, rid: c.active_revision} // console.log('openCloseConcernements', this.opened_concernement.opened); } }); @@ -440,8 +527,9 @@ export const ConcernementsStore = defineStore({ this.recit_plyr_player = player; }, setActiveRevision (cid, rid) { - // console.log(`setActiveRevision, cid:${cid}, rid:${rid}`); - this.concernementsByID[cid].active_revision = rid; + console.log(`setActiveRevision, cid:${cid}, rid:${rid}`); + // this.concernementsByID[cid].active_revision = rid; + this.concernement_active_revision = {cid: cid, rid: rid}; }, setDetailsZoomValue (z) { console.log(`concernement store setDetailsZoomValue ${z}`); diff --git a/src/stores/user.js b/src/stores/user.js index 0403d22..dacd93d 100644 --- a/src/stores/user.js +++ b/src/stores/user.js @@ -76,7 +76,7 @@ export const UserStore = defineStore({ console.log('User Loggedin') // todo reload concernements // concrnmtStore().reloadConcernements(); // INFO would be good but to much complicated for now, just reload the page - // window.location.reload(); + window.location.reload(); resolve() }) } else {