diff --git a/src/assets/main.scss b/src/assets/main.scss index 5085d92..a320174 100644 --- a/src/assets/main.scss +++ b/src/assets/main.scss @@ -1280,7 +1280,7 @@ section.editable-proximites{ } } -div.add-entite-btn{ +@mixin add-btn{ border: #eee 2px solid; background-color: #eee; border-radius: 5px; @@ -1303,4 +1303,12 @@ div.add-entite-btn{ &:hover{ border: #01ffe2 2px solid; } +} + +div.add-entite-btn{ + @include add-btn(); +} + +div.add-besoin-btn{ + @include add-btn(); } \ No newline at end of file diff --git a/src/components/ConcernementMapItem.vue b/src/components/ConcernementMapItem.vue index 698a932..4e55b1c 100644 --- a/src/components/ConcernementMapItem.vue +++ b/src/components/ConcernementMapItem.vue @@ -289,6 +289,10 @@ export default { // // be aware that here o & n opened_doleance are already the same :( !? // console.log(`concernementMapItem watch concernement o.opened_doleance:${o.opened_doleance.id}, n.opened_doleance:${n.opened_doleance.id}`); // } + + if (this.is_open && this.map_mode === "puissancedagir") { + this.setPaperContents(); + } }, deep: true }, diff --git a/src/components/MapConcernements.vue b/src/components/MapConcernements.vue index 6e0beea..1e6f247 100644 --- a/src/components/MapConcernements.vue +++ b/src/components/MapConcernements.vue @@ -1526,7 +1526,9 @@ export default {
  • puissance d'agir diff --git a/src/components/contents/PuissanceAgir.vue b/src/components/contents/PuissanceAgir.vue index 2f0d6ab..7e24869 100644 --- a/src/components/contents/PuissanceAgir.vue +++ b/src/components/contents/PuissanceAgir.vue @@ -5,6 +5,8 @@ import { ConcernementsStore } from '@stores/concernements' import { UserStore } from '@/stores/user' import { CommonStore } from '@/stores/common' +import REST from '@api/rest-axios' + import CartoucheLayout from '@components/layout/CartoucheLayout.vue'; import SvgIcon from '@jamescoyle/vue-icon'; @@ -14,6 +16,7 @@ import { mdiPencilPlus } from '@mdi/js'; import { mdiPencilPlusOutline } from '@mdi/js'; import { mdiRhombus } from '@mdi/js'; import { mdiRhombusOutline } from '@mdi/js'; +import { mdiStickerPlusOutline } from '@mdi/js'; export default { @@ -26,11 +29,13 @@ export default { pencilplus_path: mdiPencilPlus, pencilplusoutline_path: mdiPencilPlusOutline, rhombus_path: mdiRhombus, - rhombusoutline_path: mdiRhombusOutline + rhombusoutline_path: mdiRhombusOutline, + mdiStickerPlusOutline_path: mdiStickerPlusOutline, + reloading_concernements: false, } }, computed: { - ...mapState(UserStore,['isloggedin']), + ...mapState(UserStore,['isloggedin', 'csrf_token']), ...mapState(ConcernementsStore,['opened_concernement', 'ct_concernement', 'ct_entite' @@ -45,6 +50,7 @@ export default { }, methods: { ...mapActions(CommonStore,['setHoverElmt']), + ...mapActions(ConcernementsStore, ['reloadConcernementBesoins']), onClickBesoin(id){ console.log("onClickBesoin", id); this.opened_besoin_id = id === this.opened_besoin_id ? null : id; @@ -61,7 +67,89 @@ export default { bid: rid ? bid : null, no_popup: true }); - } + }, + addBesoin(e){ + console.log('add besoin'); + this.reloading_concernements = true; + // 1 create besoin node + this.createBesoinNode() + .then((besoin) => { + console.log('createBesoinNode then node', besoin); + // 2 record new besoin in concernement's field_besoin + this.recordConcernementBesoinField(besoin) + .then((concernement) => { + console.log('concernement', concernement); + // reload the map item + this.reloadConcernementBesoins(concernement.nid[0].value) + .then(() => { + this.reloading_concernements = false; + }); + }) + }) + }, + createBesoinNode(){ + return new Promise((resolve, reject) => { + // 1 create entite node + const params_node_besoin = { + type: 'besoin', + body: [{value:'Description à personaliser'}], + field_confidentialite: [{value:'confidentialite_public'}] + }; + + const configs = { + headers: {'X-CSRF-Token': this.csrf_token} + }; + + REST.post(`/node?_format=json`, params_node_besoin, configs) + .then(({ data }) => { + console.log('REST post new node besoin', data); + resolve(data) + }) + .catch(error => { + console.warn(`Issue with post new node besoin`, error) + reject(error) + }) + }) + }, + recordConcernementBesoinField(new_besoin){ + return new Promise((resolve, reject) => { + // 3 record concernement field_entite + + // get all the field_entite values, we don't want to ersae everything + let besoins = []; + this.opened_concernement.besoins.forEach((besoin) =>{ + besoins.push({ + target_id: besoin.id + }) + }) + // add the new field value + besoins.push({ + target_id: new_besoin.nid[0].value + }) + console.log('besoins', besoins); + + const params_node = { + type: 'concernement', + nid: [{value: this.cid}], + 'field_besoin': besoins + }; + + const configs = { + headers: {'X-CSRF-Token': this.csrf_token} + }; + + REST.patch(`/node/${this.cid}?_format=json`, params_node, configs) + .then(({ data }) => { + console.log('REST patch entite new field_entite', data) + resolve(data) + }) + .catch(error => { + console.warn(`Issue with patch node entite field_entite`, error) + reject(error) + }) + // resolve('test') + }) + }, }, components: { CartoucheLayout, @@ -76,7 +164,9 @@ export default { + diff --git a/src/stores/concernements.js b/src/stores/concernements.js index 3135a34..88a2b29 100644 --- a/src/stores/concernements.js +++ b/src/stores/concernements.js @@ -187,8 +187,11 @@ export const ConcernementsStore = defineStore({ // puissance d'agir concernement.has_puissancedagir = concernement.besoins.length ? true : false; + // console.log('concernement.besoins', concernement.besoins); concernement.besoins.forEach(besoin => { - this.allBesoinsById[besoin.id] = besoin; + if (besoin) { + this.allBesoinsById[besoin.id] = besoin; + } }); // doleance @@ -369,7 +372,7 @@ export const ConcernementsStore = defineStore({ let tmp_conc = this.concernementsByID[concernement.id]; // merge old concernement entites with new once _assign(tmp_conc.entites, concernement.entites); - // records and/or merge into general object and on cpnernement entitites_byid + // records and/or merge into general object and on conernement entitites_byid tmp_conc.entites.forEach(entite => { entite.cid = tmp_conc.id; if (this.allEntitesById[entite.entite.id]) { @@ -410,6 +413,55 @@ export const ConcernementsStore = defineStore({ }) }) }, + reloadConcernementBesoins(nid){ + let tmp_conc = this.concernementsByID[nid]; + console.log(`reloadConcernementEntites len: ${tmp_conc.entites.length} revision: ${tmp_conc.revision_id} nid: ${nid}`); + return new Promise((resolve, reject) => { + const ast = gql`{ + concernement(id:${nid}) { + id + besoins { + author + description + id + index + reponses { + author + avec + id + ou + qui + quoi + } + } + } + } + ` + GQL.post('', { query: print(ast) }) + .then(({ data : { data : { concernement } } }) => { + console.log(`reloadConcernementBesoins loaded len: ${concernement.besoins.length}`, concernement) + let tmp_conc = this.concernementsByID[concernement.id]; + // merge old concernement besoins with new once + _assign(tmp_conc.besoins, concernement.besoins); + tmp_conc.has_puissancedagir = tmp_conc.besoins.length ? true : false; + // records and/or merge into general object + tmp_conc.besoins.forEach(besoin => { + besoin.cid = tmp_conc.id; + if (this.allBesoinsById[besoin.id]) { + _assign(this.allBesoinsById[besoin.id], besoin); + }else{ + this.allBesoinsById[besoin.id] = besoin; + } + }); + resolve(concernement); + }) + .catch(error => { + console.warn('Issue with reloadConcernementBesoins', error) + reject(error); + Promise.reject(error) + }) + }); + }, reloadProximites (entite_id) { console.log(`reloadProximites src_id:${entite_id}`); console.log('this.allEntitesById[entite_id]', this.allEntitesById[entite_id]);