admin front : create new entite refresh concernementMapitem; fixed historique (active_revision)

This commit is contained in:
Bachir Soussi Chiadmi 2024-04-05 22:59:13 +02:00
parent 340da92a46
commit 052a37d714
7 changed files with 432 additions and 252 deletions

View File

@ -33,6 +33,7 @@ export default {
...mapState(ConcernementsStore,['map_mode', ...mapState(ConcernementsStore,['map_mode',
'concernements', 'concernements',
'concernements_loaded', 'concernements_loaded',
'concernements_loading_nb',
'concernementsByID', 'concernementsByID',
'allSuperpositions_bycids', 'allSuperpositions_bycids',
'allSuperpositions_clustered', 'allSuperpositions_clustered',
@ -47,6 +48,13 @@ export default {
} }
}, },
deep: true deep: true
},
concernements_loading_nb: {
handler (n, o) {
console.log('App watch concernements_loading_nb o, n', o, n);
this.parseMapitems();
},
deep: true
} }
}, },
methods: { methods: {
@ -54,6 +62,8 @@ export default {
...mapActions(ConcernementsStore,['loadContentTypeDefinition']), ...mapActions(ConcernementsStore,['loadContentTypeDefinition']),
...mapActions(UserStore,['checkUser']), ...mapActions(UserStore,['checkUser']),
parseMapitems() { parseMapitems() {
console.log(`App parseMapitems`);
this.mapitems = [];
// let couple_ids = Object.keys(this.allSuperpositions_bycids); // let couple_ids = Object.keys(this.allSuperpositions_bycids);
// console.log('App couple_ids', couple_ids); // console.log('App couple_ids', couple_ids);
// loop through all concernement // loop through all concernement
@ -65,6 +75,7 @@ export default {
// superposition_ids: [], // superposition_ids: [],
superposition_cluster_index: -1, superposition_cluster_index: -1,
clone: false, clone: false,
concernements_loading_nb: this.concernements_loading_nb
} }
// loop through all superposition_clusters // loop through all superposition_clusters

View File

@ -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{ #main-content{
#map-backgrounds{ #map-backgrounds{
@ -80,9 +97,7 @@ body{
// display:none; // display:none;
} }
} }
} }
#map-concernements{ #map-concernements{
div.loading{ div.loading{
position: absolute; position: absolute;
@ -92,20 +107,8 @@ body{
transform: translateX(-50%) translateY(-50%); transform: translateX(-50%) translateY(-50%);
width: 150px; width: 150px;
display: block; display: block;
text-align: center;
// font-weight: 600;
font-size: 1.134em;
&::after{ &::after{
background: url(../assets/Ellipsis-5s-100px.svg); width: 150px;
background-clip: content-box;
background-size: contain;
background-position: center;
background-repeat: no-repeat;
display: inline-block;
width: 150px; height: 30px;
border: #01ffe2;
content: " ";
} }
} }
} }

View File

@ -74,7 +74,9 @@ export default {
'allMapItems_byid', 'allMapItems_byid',
'opened_concernement', 'opened_concernement',
'opened_entite_id', 'opened_entite_id',
'detailsZoomValue']), 'concernement_active_revision',
'detailsZoomValue',
'concernements_loading_nb']),
...mapState(CommonStore,['hover_elmt', ...mapState(CommonStore,['hover_elmt',
'map_item_ray', 'map_item_ray',
'cartouch_width', 'cartouch_width',
@ -82,18 +84,10 @@ export default {
'paper_symbol_definitions']) 'paper_symbol_definitions'])
}, },
created () { 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; // this.id = this.superposition_id ? `${this.cid}___${this.superposition_id}` : this.cid;
// console.log(`this.mapitem.id`, this.mapitem.id); // console.log(`this.mapitem.id`, this.mapitem.id);
this.id = this.mapitem.id; this.resetConcernement();
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;
// disable concernement if less than 3 entite // disable concernement if less than 3 entite
@ -163,8 +157,13 @@ export default {
}, },
opened_concernement: { opened_concernement: {
handler (n, o) { handler (n, o) {
console.log(`concernementMapitem ${this.cid} watch opened_concernement o, n`, o, n);
if (!n) { // if there is no opened concernement if (!n) { // if there is no opened concernement
this.is_open = false; this.is_open = false;
if (this.active_revision !== this.concernement.active_revision) {
this.active_revision = this.concernement.active_revision;
this.resetPaperEntitesAndContours();
}
this.applyShuffleForces(); this.applyShuffleForces();
} else { } else {
if(this.cid === n.id && this.id === n.opened_mapitem_id){ if(this.cid === n.id && this.id === n.opened_mapitem_id){
@ -255,13 +254,23 @@ export default {
}, },
concernement: { concernement: {
handler (n, o){ handler (n, o){
console.log(`ConcernementMapItem ${this.id} watch concernement o, n`, this.concernement.parsedEntites, o, n);
// check for active_revision changes // check for active_revision changes
// do not trigger on first variable filling (if o is null) // 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"){ // check for new concernement object
// be aware that here o & n active_revision are already the same :( !? if(!this.concernement.parsedEntites){
console.log(`concernementMapItem watch concernement o.active_revision:${o.active_revision}, n.active_revision:${n.active_revision}`); console.log(`watch mapItem ${this.cid} reseting paperentitiesandcontours`);
this.resetPaperActiveRevision(); 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 // // check for doleance change
// if (this.is_open && o && o.opened_doleance && n.opened_doleance && this.map_mode === "doleancer") { // 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 :( !? // // be aware that here o & n opened_doleance are already the same :( !?
@ -280,6 +289,20 @@ export default {
}, },
deep: true 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: { detailsZoomValue: {
handler (n, o) { handler (n, o) {
if (this.is_open && this.map_mode === "terraindevie") { if (this.is_open && this.map_mode === "terraindevie") {
@ -288,6 +311,24 @@ export default {
} }
}, },
deep: true 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: { methods: {
@ -301,6 +342,17 @@ export default {
'setOpenedRecit', 'setOpenedRecit',
'setDetailsZoomValue', '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 (){ parseEntityPointsValues (){
// converts data (menace/maintien, actuel/future, prise) into atcual position x,y // 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 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() { getSalientPoints_OLD() {
// debugger // debugger
@ -776,24 +829,33 @@ export default {
break; break;
} }
}, },
resetPaperActiveRevision(){ resetPaperEntitesAndContours(){
console.log('resetPaperActiveRevision'); 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.concernement.active_revision].entites); this.sailentEntites = this.getJarvisEnvelopeConvexeEntites(this.concernement.revisions_byid[this.active_revision].entites);
// remove contours if already exists // remove contours if already exists
if (this.paper_main_object.children.contours) { if (this.paper_main_object.children.contours) {
this.paper_main_object.children.contours.remove(); 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(){ clearPaperContents(){
let clearable_children = ['boussole_bg', 'entites', let clearable_children = ['boussole_bg', 'entites',
@ -932,8 +994,8 @@ export default {
g.addChild(g_label); g.addChild(g_label);
g_label.sendToBack(); g_label.sendToBack();
// for (let i = 0; i < this.entites.length; i++) { // 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++) { for (let i = 0; i < this.concernement.revisions_byid[this.active_revision].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];
// item type // item type
let item_type = entite.entite ? entite.entite.agissante ? 'entite_action' : 'entite' : 'entite_hidden'; 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), pivot: new paper.Point(this.pos),
name: 'entites_superposes' name: 'entites_superposes'
}); });
for (let i = 0; i < this.concernement.revisions_byid[this.concernement.active_revision].entites.length; i++) { for (let i = 0; i < this.concernement.revisions_byid[this.active_revision].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 // check if we have an entite object with all the contents if (entite.entite // check if we have an entite object with all the contents
&& this.superposedEntiteID === entite.entite.id) // check if entite id && this.superposedEntiteID === entite.entite.id) // check if entite id
{ {
@ -1051,8 +1113,8 @@ export default {
pivot: new paper.Point(this.pos), pivot: new paper.Point(this.pos),
name: 'entites_proximites' name: 'entites_proximites'
}); });
for (let i = 0; i < this.concernement.revisions_byid[this.concernement.active_revision].entites.length; i++) { for (let i = 0; i < this.concernement.revisions_byid[this.active_revision].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 // check if we have an entite object with all the contents 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 && 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 // loop through all concernement's entites
// keeping only those who have proximite // keeping only those who have proximite
for (let i = 0; i < this.concernement.revisions_byid[this.concernement.active_revision].entites.length; i++) { for (let i = 0; i < this.concernement.revisions_byid[this.active_revision].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 // check if we have an entite object with all the contents 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 && entite.entite.proximite.length ) // check if entite id is in the list builded above
{ {
@ -1302,7 +1364,7 @@ export default {
// name: 'agissantes_icons' // name: 'agissantes_icons'
// }); // });
// for (let i = 0; i < this.concernement.revisions_byid[this.concernement.revision_id].entites.length; i++) { // 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) { // if (entite.entite && entite.entite.agissante) {
// let instance = new paper.SymbolItem(this.paper_symbol_definitions['entite_action_icon']); // let instance = new paper.SymbolItem(this.paper_symbol_definitions['entite_action_icon']);
// instance.name = 'entite_action'; // instance.name = 'entite_action';
@ -2302,7 +2364,7 @@ export default {
}, },
openClose(open) { // async openClose(open) { // async
// await nextTick(); // not working // await nextTick(); // not working
console.log(`ConcernementsMapItem ${this.id} openClose: ${open}`); console.log(`ConcernementsMapItem openClose ${this.id} openClose: ${open}`);
if (this.tween) { if (this.tween) {
this.tween.stop(); this.tween.stop();
} }
@ -2382,9 +2444,9 @@ export default {
Matter.Composite.remove(this.matterEngine.world, this.constraint); Matter.Composite.remove(this.matterEngine.world, this.constraint);
} }
// this.concernement.active_revision = this.concernement.revision_id; // 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.setActiveRevision(this.cid, this.concernement.revision_id);//this.concernement.revisions[this.concernement.revisions.length -1].revision_id);
this.resetPaperActiveRevision(); // this.resetPaperEntitesAndContours();
this.handlePaperVisibilityOnBeforeClose(); this.handlePaperVisibilityOnBeforeClose();

View File

@ -26,7 +26,6 @@ export default {
...mapState(ConcernementsStore,['map_mode', ...mapState(ConcernementsStore,['map_mode',
'opened_concernement', 'opened_concernement',
'concernementsByID', 'concernementsByID',
'concernements_loaded',
'ct_concernement', 'ct_concernement',
'ct_cercle_politique', 'ct_cercle_politique',
'p_groupes_interets', 'p_groupes_interets',

View File

@ -44,6 +44,7 @@ export default {
chevrondown_path: mdiChevronDown, chevrondown_path: mdiChevronDown,
headerreduced: false, headerreduced: false,
mdiStickerPlusOutline_path: mdiStickerPlusOutline, mdiStickerPlusOutline_path: mdiStickerPlusOutline,
reloading_concernements: false
} }
}, },
computed: { computed: {
@ -52,7 +53,9 @@ export default {
'concernementsByID', 'concernementsByID',
'ct_concernement', 'ct_concernement',
'ct_entite', 'ct_entite',
'detailsZoomValue']), 'detailsZoomValue',
// 'concernements_are_loading'
]),
...mapState(UserStore,['name','csrf_token']), ...mapState(UserStore,['name','csrf_token']),
created(){ created(){
let d = new Date(this.concernement.created); let d = new Date(this.concernement.created);
@ -184,7 +187,12 @@ export default {
} }
}, },
methods: { methods: {
...mapActions(ConcernementsStore, ['setActiveRevision', 'setDetailsZoomValue']), // 'loadConcernementsRevisions' ...mapActions(ConcernementsStore, ['setActiveRevision',
'setDetailsZoomValue',
'loadConcernements',
'reloadConcernements',
'reloadConcernementEntites']),
// 'loadConcernementsRevisions'
onClickInfos(){ onClickInfos(){
this.infos_opened = !this.infos_opened; this.infos_opened = !this.infos_opened;
}, },
@ -224,6 +232,7 @@ export default {
}, },
addEntite(e){ addEntite(e){
console.log('add entite'); console.log('add entite');
this.reloading_concernements = true;
// 1 create entite node // 1 create entite node
this.createEntiteNode() this.createEntiteNode()
.then((entite) => { .then((entite) => {
@ -237,6 +246,11 @@ export default {
.then((concernement) => { .then((concernement) => {
console.log('concernement', concernement); console.log('concernement', concernement);
// TODO reload the map item // TODO reload the map item
// this.reloadConcernementEntites(concernement.nid[0].value);
this.reloadConcernements()
.then(() => {
this.reloading_concernements = false;
});
}) })
}) })
}) })
@ -436,10 +450,13 @@ export default {
</section> </section>
<template v-if="concernement.can_update"> <template v-if="concernement.can_update">
<div @click="addEntite" class="add-entite-btn"> <div v-if="!reloading_concernements" @click="addEntite" class="add-entite-btn">
<span>Ajouter une entité</span> <span>Ajouter une entité</span>
<svg-icon type="mdi" :path="mdiStickerPlusOutline_path"/> <svg-icon type="mdi" :path="mdiStickerPlusOutline_path"/>
</div> </div>
<div v-else class="add-entite-btn">
<div class="loading">Chargement</div>
</div>
</template> </template>
</template> </template>

View File

@ -17,6 +17,7 @@ export const ConcernementsStore = defineStore({
id: 'concernements', id: 'concernements',
state: () => ({ state: () => ({
map_mode: null, map_mode: null,
concernements_loading_nb: 0,
concernements: [], concernements: [],
concernementsByID: {}, concernementsByID: {},
allEntitesById: {}, allEntitesById: {},
@ -38,6 +39,8 @@ export const ConcernementsStore = defineStore({
p_mise_en_oeuvre_decision: {}, p_mise_en_oeuvre_decision: {},
p_reception_application_decision: {}, p_reception_application_decision: {},
concernements_loaded: false, concernements_loaded: false,
concernements_are_loading: false,
concernement_active_revision: null,
detailsZoomValue: 1, detailsZoomValue: 1,
}), }),
getters: { getters: {
@ -51,6 +54,7 @@ export const ConcernementsStore = defineStore({
}, },
loadConcernements () { loadConcernements () {
console.log('concernements store loadConcernements'); console.log('concernements store loadConcernements');
this.concernements_are_loading = true;
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const ast = gql`{ const ast = gql`{
allconcernements { allconcernements {
@ -62,199 +66,282 @@ export const ConcernementsStore = defineStore({
// console.log('ast', ast); // console.log('ast', ast);
GQL.post('', { query: print(ast) }) GQL.post('', { query: print(ast) })
.then(({ data : { data : { allconcernements } } }) => { .then(({ data : { data : { allconcernements } } }) => {
console.log('loadconcernements all loaded', allconcernements) console.log('loadconcernements loaded', allconcernements)
this.concernements = []; this.concernements = [];
// parse concernements this.parseConcernements(allconcernements, true)
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.concernements_loaded = true; this.concernements_loaded = true;
this.concernements_loading_nb ++;
this.concernements_are_loading = false;
resolve();
}) })
.catch(error => { .catch(error => {
console.warn('Issue with loadConcernements', error) console.warn('Issue with loadConcernements', error)
this.concernements_are_loading = false;
Promise.reject(error) 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 () { reloadConcernements () {
console.log('reloadConcernements'); console.log('reloadConcernements');
// reset the arrays return new Promise((resolve, reject) => {
// this.concernements = []; // reset the arrays
// this.concernementsByID = {}; this.concernements = [];
// this.concernements_loaded = false; this.concernementsByID = {};
this.loadConcernements(); // 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 () { loadContentTypeDefinition () {
const body = { const body = {
@ -372,15 +459,15 @@ export const ConcernementsStore = defineStore({
this.opened_concernement = null; this.opened_concernement = null;
this.opened_recit = null; this.opened_recit = null;
this.concernements.forEach((c, i) => { this.concernements.forEach((c, i) => {
state = cid === c.id;
// console.log(`openCloseConcernements foreach id: ${id}, c.id: ${c.id}, state: ${state}`, id, 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; c.opened = this.concernements[i].opened = this.concernementsByID[c.id].opened = cid === c.id;
if (state) { if (c.opened) {
this.opened_concernement = c; this.opened_concernement = c;
this.opened_concernement.opened_mapitem_id = mapitem_id; this.opened_concernement.opened_mapitem_id = mapitem_id;
if (c.has_recit && this.map_mode === "terraindevie") { if (c.has_recit && this.map_mode === "terraindevie") {
this.opened_recit = c.recit; this.opened_recit = c.recit;
} }
this.concernement_active_revision = {cid: cid, rid: c.active_revision}
// console.log('openCloseConcernements', this.opened_concernement.opened); // console.log('openCloseConcernements', this.opened_concernement.opened);
} }
}); });
@ -440,8 +527,9 @@ export const ConcernementsStore = defineStore({
this.recit_plyr_player = player; this.recit_plyr_player = player;
}, },
setActiveRevision (cid, rid) { setActiveRevision (cid, rid) {
// console.log(`setActiveRevision, cid:${cid}, rid:${rid}`); console.log(`setActiveRevision, cid:${cid}, rid:${rid}`);
this.concernementsByID[cid].active_revision = rid; // this.concernementsByID[cid].active_revision = rid;
this.concernement_active_revision = {cid: cid, rid: rid};
}, },
setDetailsZoomValue (z) { setDetailsZoomValue (z) {
console.log(`concernement store setDetailsZoomValue ${z}`); console.log(`concernement store setDetailsZoomValue ${z}`);

View File

@ -76,7 +76,7 @@ export const UserStore = defineStore({
console.log('User Loggedin') console.log('User Loggedin')
// todo reload concernements // todo reload concernements
// concrnmtStore().reloadConcernements(); // INFO would be good but to much complicated for now, just reload the page // concrnmtStore().reloadConcernements(); // INFO would be good but to much complicated for now, just reload the page
// window.location.reload(); window.location.reload();
resolve() resolve()
}) })
} else { } else {