admin front: puiisance dagir: updating besoin reponse is updating mapItem display
This commit is contained in:
parent
8351ee71e3
commit
aba6de580f
@ -75,6 +75,7 @@ fragment ConcernementFields on Concernement {
|
|||||||
index
|
index
|
||||||
confidentialite
|
confidentialite
|
||||||
reponses {
|
reponses {
|
||||||
|
can_update
|
||||||
author
|
author
|
||||||
avec
|
avec
|
||||||
id
|
id
|
||||||
|
@ -295,6 +295,16 @@ export default {
|
|||||||
},
|
},
|
||||||
deep: true
|
deep: true
|
||||||
},
|
},
|
||||||
|
'concernement.besoins': {
|
||||||
|
handler (n, o){
|
||||||
|
console.log(`ConcernementMapItem ${this.id} watch concernement.besoins o, n`, o, n);
|
||||||
|
if (this.is_open && this.map_mode === "puissancedagir") {
|
||||||
|
// this.resetPaperBesoinReponsePos();
|
||||||
|
this.setPaperPuissanceagirBesoins(true); // true for update=true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
deep: true
|
||||||
|
},
|
||||||
'concernement.besoins.length': {
|
'concernement.besoins.length': {
|
||||||
handler (n, o){
|
handler (n, o){
|
||||||
console.log(`ConcernementMapItem ${this.id} watch concernement.besoins.length o, n`, o, n);
|
console.log(`ConcernementMapItem ${this.id} watch concernement.besoins.length o, n`, o, n);
|
||||||
@ -1475,12 +1485,24 @@ export default {
|
|||||||
// }
|
// }
|
||||||
// return g;
|
// return g;
|
||||||
// },
|
// },
|
||||||
setPaperPuissanceagirBesoins(){
|
setPaperPuissanceagirBesoins(update){
|
||||||
console.log(`setPaperPuissanceagirBesoins cid:${this.concernement.id}`);
|
console.log(`setPaperPuissanceagirBesoins cid:${this.concernement.id}, update: ${update}`);
|
||||||
let g = new paper.Group({
|
let g;
|
||||||
pivot: new paper.Point(this.pos),
|
if (update) {
|
||||||
name: 'puissanceagir_besoins'
|
g = this.paper_main_object.children['puissanceagir_besoins'];
|
||||||
});
|
console.log('REUSING puissanceagir_besoins group', g);
|
||||||
|
} else{
|
||||||
|
console.log('CREATING puissanceagir_besoins group');
|
||||||
|
g = new paper.Group({
|
||||||
|
pivot: new paper.Point(this.pos),
|
||||||
|
name: 'puissanceagir_besoins'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!g) {
|
||||||
|
console.warn('no puissanceagir_besoins group created nor found')
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
let res_fields = ['qui','quoi','ou','avec'];
|
let res_fields = ['qui','quoi','ou','avec'];
|
||||||
let arc = (360 / 16); // unit arc
|
let arc = (360 / 16); // unit arc
|
||||||
@ -1494,17 +1516,31 @@ export default {
|
|||||||
let y = Math.sin(center_a*(Math.PI/180)) * br;
|
let y = Math.sin(center_a*(Math.PI/180)) * br;
|
||||||
|
|
||||||
// use paper symbol
|
// use paper symbol
|
||||||
let besoin = new paper.SymbolItem(this.paper_symbol_definitions['besoin']);
|
let paper_besoin;
|
||||||
besoin.position = new paper.Point([this.pos.x + x, this.pos.y + y]);
|
if (update) {
|
||||||
besoin.scale(this.scale);
|
paper_besoin = this.paper_main_object.getItem({id: this.concernement.besoins[i].paper_id});
|
||||||
besoin.item_id = this.concernement.besoins[i].id;
|
// console.log('REUSING besoin paper item', paper_besoin);
|
||||||
besoin.item_cid = this.concernement.id;
|
} else{
|
||||||
besoin.item_type = 'besoin';
|
// console.log('CREATING besoin paper item');
|
||||||
besoin.is_symbol_instance = true;
|
paper_besoin = new paper.SymbolItem(this.paper_symbol_definitions['besoin']);
|
||||||
|
paper_besoin.scale(this.scale);
|
||||||
|
paper_besoin.item_id = this.concernement.besoins[i].id;
|
||||||
|
paper_besoin.item_cid = this.concernement.id;
|
||||||
|
paper_besoin.item_type = 'besoin';
|
||||||
|
paper_besoin.is_symbol_instance = true;
|
||||||
|
g.addChild(paper_besoin)
|
||||||
|
// this is retriggering watch concernement and watch concernement.besoins
|
||||||
|
this.setBesoinPaperId(paper_besoin.id, this.cid, this.concernement.besoins[i].id);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`paper paper_besoin id:${paper_besoin.id}`);
|
||||||
|
|
||||||
|
if (!paper_besoin) {
|
||||||
|
console.warn('no paper_besoin item created nor found')
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
paper_besoin.position = new paper.Point([this.pos.x + x, this.pos.y + y]);
|
||||||
|
|
||||||
console.log(`paper besoin id:${besoin.id}`);
|
|
||||||
this.setBesoinPaperId(besoin.id, this.cid, this.concernement.besoins[i].id);
|
|
||||||
g.addChild(besoin)
|
|
||||||
|
|
||||||
let res_arc = arc / (1 + this.concernement.besoins[i].reponses.length); // unit arc for responses depending responses number
|
let res_arc = arc / (1 + this.concernement.besoins[i].reponses.length); // unit arc for responses depending responses number
|
||||||
for (let j = 0; j < this.concernement.besoins[i].reponses.length; j++) {
|
for (let j = 0; j < this.concernement.besoins[i].reponses.length; j++) {
|
||||||
@ -1518,16 +1554,31 @@ export default {
|
|||||||
let ry = Math.sin(res_a*(Math.PI/180)) * rr;
|
let ry = Math.sin(res_a*(Math.PI/180)) * rr;
|
||||||
|
|
||||||
// use paper symbol
|
// use paper symbol
|
||||||
let reponse = new paper.SymbolItem(this.paper_symbol_definitions['reponse']);
|
let paper_reponse;
|
||||||
reponse.position = new paper.Point([this.pos.x + rx, this.pos.y + ry]);
|
let paper_reponse_id = this.concernement.besoins[i].reponses[j].paper_id;
|
||||||
reponse.scale(this.scale);
|
if (update && paper_reponse_id) {
|
||||||
reponse.item_id = this.concernement.besoins[i].reponses[j].id;
|
// console.log('paper_reponse_id', paper_reponse_id);
|
||||||
reponse.item_bid = this.concernement.besoins[i].id;
|
paper_reponse = this.paper_main_object.getItem({id: paper_reponse_id});
|
||||||
reponse.item_cid = this.concernement.id;
|
// console.log('REUSING reponse paper item', paper_reponse);
|
||||||
reponse.item_type = 'reponse';
|
} else {
|
||||||
reponse.is_symbol_instance = true;
|
// console.log('CREATING reponse paper item', paper_reponse_id, this.concernement.besoins[i]);
|
||||||
this.setBesoinPaperId(reponse.id, this.cid, this.concernement.besoins[i].id, this.concernement.besoins[i].reponses[j].id);
|
// debugger;
|
||||||
g.addChild(reponse)
|
paper_reponse = new paper.SymbolItem(this.paper_symbol_definitions['reponse']);
|
||||||
|
paper_reponse.scale(this.scale);
|
||||||
|
paper_reponse.item_id = this.concernement.besoins[i].reponses[j].id;
|
||||||
|
paper_reponse.item_bid = this.concernement.besoins[i].id;
|
||||||
|
paper_reponse.item_cid = this.concernement.id;
|
||||||
|
paper_reponse.item_type = 'reponse';
|
||||||
|
paper_reponse.is_symbol_instance = true;
|
||||||
|
this.setBesoinPaperId(paper_reponse.id, this.cid, this.concernement.besoins[i].id, this.concernement.besoins[i].reponses[j].id);
|
||||||
|
g.addChild(paper_reponse);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!paper_reponse) {
|
||||||
|
console.warn('no paper_reponse item created nor found')
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
paper_reponse.position = new paper.Point([this.pos.x + rx, this.pos.y + ry]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1535,6 +1586,37 @@ export default {
|
|||||||
|
|
||||||
return g;
|
return g;
|
||||||
},
|
},
|
||||||
|
// resetPaperBesoinReponsePos(){
|
||||||
|
// console.log(`resetPaperBesoinReponsePos cid:${this.concernement.id}`);
|
||||||
|
// let res_fields = ['qui','quoi','ou','avec'];
|
||||||
|
// let arc = (360 / 16); // unit arc
|
||||||
|
// let r = (this.ray * this.scale)/5; // unit ray
|
||||||
|
|
||||||
|
// for (let i = 0; i < this.concernement.besoins.length; i++) {
|
||||||
|
// let start_a = arc * i;
|
||||||
|
// let res_arc = arc / (1 + this.concernement.besoins[i].reponses.length); // unit arc for responses depending responses number
|
||||||
|
|
||||||
|
// for (let j = 0; j < this.concernement.besoins[i].reponses.length; j++) {
|
||||||
|
// let res_a = start_a + res_arc * (j+1); // angle for response line
|
||||||
|
|
||||||
|
// for (let f = 0; f < res_fields.length; f++) { // loop through all 4 fields, keep only the last one filled
|
||||||
|
|
||||||
|
// if( this.concernement.besoins[i].reponses[j][res_fields[f]] // if field filled
|
||||||
|
// && (f === res_fields.length -1 || !this.concernement.besoins[i].reponses[j][res_fields[f+1]]) // and is last field or last field filled
|
||||||
|
// ){
|
||||||
|
// let rr = this.ray * this.scale - r*f - r/2; // reponse field ray
|
||||||
|
// let rx = Math.cos(res_a*(Math.PI/180)) * rr;
|
||||||
|
// let ry = Math.sin(res_a*(Math.PI/180)) * rr;
|
||||||
|
// let paper_id = this.concernement.besoins[i].reponses[j].paper_id;
|
||||||
|
// console.log('paper_id', paper_id);
|
||||||
|
// let paper_reponse = this.paper_main_object.getItem({id: paper_id});
|
||||||
|
// console.log('paper_reponse', paper_reponse);
|
||||||
|
// paper_reponse.position = new paper.Point([this.pos.x + rx, this.pos.y + ry]);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// },
|
||||||
setPaperDoleances(){
|
setPaperDoleances(){
|
||||||
let g = new paper.Group({
|
let g = new paper.Group({
|
||||||
pivot: new paper.Point({x:0,y:0}),
|
pivot: new paper.Point({x:0,y:0}),
|
||||||
|
@ -336,24 +336,86 @@ export default {
|
|||||||
:path="hover_elmt && hover_elmt.type === 'reponse' && hover_elmt.id === reponse.id ? rhombus_path : rhombusoutline_path"
|
:path="hover_elmt && hover_elmt.type === 'reponse' && hover_elmt.id === reponse.id ? rhombus_path : rhombusoutline_path"
|
||||||
/>
|
/>
|
||||||
Ressource</label>
|
Ressource</label>
|
||||||
<section v-if="reponse.qui">
|
<section v-if="reponse.qui || reponse.can_update">
|
||||||
<label for="reponse-qui">Qui</label>
|
<label for="reponse-qui">Qui</label>
|
||||||
<p name="reponse-qui" v-html="reponse.qui" />
|
<!-- <p name="reponse-qui" v-html="reponse.qui" /> -->
|
||||||
|
<ContentEditable
|
||||||
|
tag="p"
|
||||||
|
:value="reponse.qui"
|
||||||
|
:html="true"
|
||||||
|
:contenteditable="reponse.can_update"
|
||||||
|
placeholder="Ajouter un élement de réponse."
|
||||||
|
:data="{
|
||||||
|
entitytype: 'node',
|
||||||
|
bundle: 'reponse',
|
||||||
|
id: reponse.id,
|
||||||
|
field: {field_name: 'field_qui', value:'value'}
|
||||||
|
}"
|
||||||
|
v-on:updated="reloadBesoins" />
|
||||||
</section>
|
</section>
|
||||||
<section v-if="reponse.quoi">
|
<section v-if="reponse.quoi || reponse.can_update">
|
||||||
<label for="reponse-quoi">Quoi</label>
|
<label for="reponse-quoi">Quoi</label>
|
||||||
<p name="reponse-quoi" v-html="reponse.quoi" />
|
<!-- <p name="reponse-quoi" v-html="reponse.quoi" /> -->
|
||||||
|
<ContentEditable
|
||||||
|
tag="p"
|
||||||
|
:value="reponse.quoi"
|
||||||
|
:html="true"
|
||||||
|
:contenteditable="reponse.can_update"
|
||||||
|
placeholder="Ajouter un élement de réponse."
|
||||||
|
:data="{
|
||||||
|
entitytype: 'node',
|
||||||
|
bundle: 'reponse',
|
||||||
|
id: reponse.id,
|
||||||
|
field: {field_name: 'field_quoi', value:'value'}
|
||||||
|
}"
|
||||||
|
v-on:updated="reloadBesoins" />
|
||||||
</section>
|
</section>
|
||||||
<section v-if="reponse.ou">
|
<section v-if="reponse.ou || reponse.can_update">
|
||||||
<label for="reponse-ou">Où</label>
|
<label for="reponse-ou">Où</label>
|
||||||
<p name="reponse-ou" v-html="reponse.ou" />
|
<!-- <p name="reponse-ou" v-html="reponse.ou" /> -->
|
||||||
|
<ContentEditable
|
||||||
|
tag="p"
|
||||||
|
:value="reponse.ou"
|
||||||
|
:html="true"
|
||||||
|
:contenteditable="reponse.can_update"
|
||||||
|
placeholder="Ajouter un élement de réponse."
|
||||||
|
:data="{
|
||||||
|
entitytype: 'node',
|
||||||
|
bundle: 'reponse',
|
||||||
|
id: reponse.id,
|
||||||
|
field: {field_name: 'field_ou', value:'value'}
|
||||||
|
}"
|
||||||
|
v-on:updated="reloadBesoins" />
|
||||||
</section>
|
</section>
|
||||||
<section v-if="reponse.avec">
|
<section v-if="reponse.avec || reponse.can_update">
|
||||||
<label for="reponse-avec">Avec</label>
|
<label for="reponse-avec">Avec</label>
|
||||||
<p name="reponse-avec" v-html="reponse.avec" />
|
<!-- <p name="reponse-avec" v-html="reponse.avec" /> -->
|
||||||
|
<ContentEditable
|
||||||
|
tag="p"
|
||||||
|
:value="reponse.avec"
|
||||||
|
:html="true"
|
||||||
|
:contenteditable="reponse.can_update"
|
||||||
|
placeholder="Ajouter un élement de réponse."
|
||||||
|
:data="{
|
||||||
|
entitytype: 'node',
|
||||||
|
bundle: 'reponse',
|
||||||
|
id: reponse.id,
|
||||||
|
field: {field_name: 'field_avec', value:'value'}
|
||||||
|
}"
|
||||||
|
v-on:updated="reloadBesoins" />
|
||||||
</section>
|
</section>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<template v-if="isloggedin && !opened_concernement.can_update">
|
||||||
|
<div v-if="!reloading_concernements" @click="addRessource(besoin.id)" class="add-ressource-btn">
|
||||||
|
<span>Proposer une ressource</span>
|
||||||
|
<svg-icon type="mdi" :path="mdiStickerPlusOutline_path"/>
|
||||||
|
</div>
|
||||||
|
<div v-else class="add-ressource-btn">
|
||||||
|
<div class="loading">Chargement</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<!-- <a
|
<!-- <a
|
||||||
v-if="isloggedin && !opened_concernement.can_update"
|
v-if="isloggedin && !opened_concernement.can_update"
|
||||||
@ -363,15 +425,7 @@ export default {
|
|||||||
class="contribute-link mdi mdi-pencil-plus">
|
class="contribute-link mdi mdi-pencil-plus">
|
||||||
<svg-icon type="mdi" :path="pencilplusoutline_path" /> contribuer à ce besoin
|
<svg-icon type="mdi" :path="pencilplusoutline_path" /> contribuer à ce besoin
|
||||||
</a> -->
|
</a> -->
|
||||||
<template v-if="isloggedin && !opened_concernement.can_update">
|
|
||||||
<div v-if="!reloading_concernements" @click="addRessource(besoin.id)" class="add-ressource-btn">
|
|
||||||
<span>Proposer une ressource</span>
|
|
||||||
<svg-icon type="mdi" :path="mdiStickerPlusOutline_path"/>
|
|
||||||
</div>
|
|
||||||
<div v-else class="add-ressource-btn">
|
|
||||||
<div class="loading">Chargement</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -23,7 +23,11 @@ export default {
|
|||||||
type : [Boolean, String],
|
type : [Boolean, String],
|
||||||
default : false,
|
default : false,
|
||||||
},
|
},
|
||||||
data: Object
|
data: Object,
|
||||||
|
placeholder : {
|
||||||
|
type : String,
|
||||||
|
default : 'Ajouter du texte'
|
||||||
|
}
|
||||||
},
|
},
|
||||||
emits: ['updated'],
|
emits: ['updated'],
|
||||||
data(){
|
data(){
|
||||||
@ -46,11 +50,11 @@ export default {
|
|||||||
buttons: ['anchor'],
|
buttons: ['anchor'],
|
||||||
},
|
},
|
||||||
placeholder: {
|
placeholder: {
|
||||||
/* This example includes the default options for placeholder,
|
/* This example includes the default options for placeholder,
|
||||||
if nothing is passed this is what it used */
|
if nothing is passed this is what it used */
|
||||||
text: 'Ajouter du text',
|
text: this.placeholder,
|
||||||
hideOnClick: true
|
hideOnClick: true
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -62,6 +66,7 @@ export default {
|
|||||||
console.log('onContentEditableFocusOut', e);
|
console.log('onContentEditableFocusOut', e);
|
||||||
// console.log('onContentEditableFocusOut data', this.data);
|
// console.log('onContentEditableFocusOut data', this.data);
|
||||||
let new_field_content = this.html ? e.target.innerHTML : e.target.innerText;
|
let new_field_content = this.html ? e.target.innerHTML : e.target.innerText;
|
||||||
|
new_field_content = new_field_content.replace(/<br>$/g, '');
|
||||||
// console.log('onContentEditableFocusOut', new_field_content);
|
// console.log('onContentEditableFocusOut', new_field_content);
|
||||||
this.$emit('focusout');
|
this.$emit('focusout');
|
||||||
if (this.data) {
|
if (this.data) {
|
||||||
|
@ -17,6 +17,8 @@ import ConcernementFields from '@api/gql/concernement.fragment.gql'
|
|||||||
// import EntityFields from '@api/gql/entitydef.fragment.gql'
|
// import EntityFields from '@api/gql/entitydef.fragment.gql'
|
||||||
|
|
||||||
import _assign from 'lodash/assign';
|
import _assign from 'lodash/assign';
|
||||||
|
import _assignIn from 'lodash/assignIn';
|
||||||
|
import _merge from 'lodash/merge';
|
||||||
|
|
||||||
|
|
||||||
export const ConcernementsStore = defineStore({
|
export const ConcernementsStore = defineStore({
|
||||||
@ -433,6 +435,7 @@ export const ConcernementsStore = defineStore({
|
|||||||
ou
|
ou
|
||||||
qui
|
qui
|
||||||
quoi
|
quoi
|
||||||
|
can_update
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -442,14 +445,24 @@ export const ConcernementsStore = defineStore({
|
|||||||
.then(({ data : { data : { concernement } } }) => {
|
.then(({ data : { data : { concernement } } }) => {
|
||||||
console.log(`reloadConcernementBesoins loaded len: ${concernement.besoins.length}`, concernement)
|
console.log(`reloadConcernementBesoins loaded len: ${concernement.besoins.length}`, concernement)
|
||||||
let tmp_conc = this.concernementsByID[concernement.id];
|
let tmp_conc = this.concernementsByID[concernement.id];
|
||||||
|
// tmp_conc.besoins.forEach(besoin => {
|
||||||
|
// besoin.reponses.forEach(reponse => {
|
||||||
|
// console.log(`BEFORE _merge besoin id:${besoin.id} reponse id:${reponse.id}, paper_id:${reponse.paper_id}`);
|
||||||
|
// });
|
||||||
|
// });
|
||||||
// merge old concernement besoins with new once
|
// merge old concernement besoins with new once
|
||||||
_assign(tmp_conc.besoins, concernement.besoins);
|
_merge(tmp_conc.besoins, concernement.besoins);
|
||||||
|
// tmp_conc.besoins.forEach(besoin => {
|
||||||
|
// besoin.reponses.forEach(reponse => {
|
||||||
|
// console.log(`AFTER _merge besoin id:${besoin.id} reponse id:${reponse.id}, paper_id:${reponse.paper_id}`);
|
||||||
|
// });
|
||||||
|
// });
|
||||||
tmp_conc.has_puissancedagir = tmp_conc.besoins.length ? true : false;
|
tmp_conc.has_puissancedagir = tmp_conc.besoins.length ? true : false;
|
||||||
// records and/or merge into general object
|
// records and/or merge into general object
|
||||||
tmp_conc.besoins.forEach(besoin => {
|
tmp_conc.besoins.forEach(besoin => {
|
||||||
besoin.cid = tmp_conc.id;
|
besoin.cid = tmp_conc.id;
|
||||||
if (this.allBesoinsById[besoin.id]) {
|
if (this.allBesoinsById[besoin.id]) {
|
||||||
_assign(this.allBesoinsById[besoin.id], besoin);
|
_merge(this.allBesoinsById[besoin.id], besoin);
|
||||||
}else{
|
}else{
|
||||||
this.allBesoinsById[besoin.id] = besoin;
|
this.allBesoinsById[besoin.id] = besoin;
|
||||||
}
|
}
|
||||||
@ -659,6 +672,7 @@ export const ConcernementsStore = defineStore({
|
|||||||
this.opened_entite_id = id;
|
this.opened_entite_id = id;
|
||||||
},
|
},
|
||||||
setBesoinPaperId(paper_id, cid, bid, rid){
|
setBesoinPaperId(paper_id, cid, bid, rid){
|
||||||
|
console.log(`setBesoinPaperId paper_id: ${paper_id}, cid: ${cid}, bid: ${bid}, rid: ${rid}`);
|
||||||
this.concernementsByID[cid].besoins.forEach((b,j) => {
|
this.concernementsByID[cid].besoins.forEach((b,j) => {
|
||||||
if(b.id === bid) {
|
if(b.id === bid) {
|
||||||
if (!rid) {
|
if (!rid) {
|
||||||
@ -667,6 +681,7 @@ export const ConcernementsStore = defineStore({
|
|||||||
this.concernementsByID[cid].besoins[j].reponses.forEach((r,k) => {
|
this.concernementsByID[cid].besoins[j].reponses.forEach((r,k) => {
|
||||||
if (r.id === rid) {
|
if (r.id === rid) {
|
||||||
this.concernementsByID[cid].besoins[j].reponses[k].paper_id = paper_id;
|
this.concernementsByID[cid].besoins[j].reponses[k].paper_id = paper_id;
|
||||||
|
console.log(`this.concernementsByID[${cid}].besoins[${j}].reponses[${k}].paper_id`, this.concernementsByID[cid].besoins[j].reponses[k].paper_id);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user