From a47ed7b772597f71b5ad43d4f4c6700bcb71d7dc Mon Sep 17 00:00:00 2001 From: bach Date: Wed, 19 Apr 2023 11:04:57 +0200 Subject: [PATCH] click on entite opened the entite in concernement cartouche --- src/api/gql/entite.fragment.gql | 19 ++++++++ src/components/ConcernementMapItem.vue | 1 + src/components/ConcernementMapPopup.vue | 2 +- src/components/MapConcernements.vue | 63 +++++++++++++++++++------ src/router/index.js | 2 +- src/stores/concernements.js | 3 ++ src/views/Concernement.vue | 43 ++++++++++++++--- 7 files changed, 110 insertions(+), 23 deletions(-) create mode 100644 src/api/gql/entite.fragment.gql diff --git a/src/api/gql/entite.fragment.gql b/src/api/gql/entite.fragment.gql new file mode 100644 index 0000000..33a6ed3 --- /dev/null +++ b/src/api/gql/entite.fragment.gql @@ -0,0 +1,19 @@ +fragment EntiteFields on Entite { + id + texte + title + liens { + title + url + } + images { + url + alt + } + fichiers { + description + file { + url + } + } +} diff --git a/src/components/ConcernementMapItem.vue b/src/components/ConcernementMapItem.vue index 36f9807..fb95fe1 100644 --- a/src/components/ConcernementMapItem.vue +++ b/src/components/ConcernementMapItem.vue @@ -131,6 +131,7 @@ export default { parts.push(Matter.Bodies.circle(this.entites[i].display.pos.x, this.entites[i].display.pos.y, 0.8, { item_type: 'entite', id: this.entites[i].entite.id, + cid: this.concernement.id, isSensor: true })) } diff --git a/src/components/ConcernementMapPopup.vue b/src/components/ConcernementMapPopup.vue index 1b0db6f..b83c75b 100644 --- a/src/components/ConcernementMapPopup.vue +++ b/src/components/ConcernementMapPopup.vue @@ -65,7 +65,7 @@ export default {

{{ concernement.title }}

-

alors ? {{ entite.entite.title }}

+

{{ entite.entite.title }}

diff --git a/src/components/MapConcernements.vue b/src/components/MapConcernements.vue index 2e8b664..b1b7768 100644 --- a/src/components/MapConcernements.vue +++ b/src/components/MapConcernements.vue @@ -107,6 +107,7 @@ export default { methods: { ...mapActions(ConcernementsStore,['openCloseConcernements']), ...mapActions(ConcernementsStore,['resetConcernementOpened']), + ...mapActions(ConcernementsStore,['openEntite']), animate () { this.canvasMap.ctx.clearRect(0, 0, this.canvasMap.canvas.width, this.canvasMap.canvas.height) // this.canvasMap.canvas.dispatchEvent(this.animateEvent) @@ -114,7 +115,7 @@ export default { window.requestAnimationFrame(this.animate); }, onMouseMove (e) { - // check concernement item mouse over + // check item mouse over let query; if (this.opened) { // if a concernement is opened we query the opened concernement's parts (aka entitées bodies) @@ -158,22 +159,54 @@ export default { onClick (e) { console.log('onClick', this, e); // get the clicked element from matter - const query = Matter.Query.point(Matter.Composite.allBodies(this.world), this.mouse.position) + // const query = Matter.Query.point(Matter.Composite.allBodies(this.world), this.mouse.position) + let query; + if (this.opened) { + // if a concernement is opened we query the opened concernement's parts (aka entitées bodies) + const bodies = Matter.Composite.allBodies(this.world); + for (let body of bodies) { + if (body.item_type === "concernement" && body.id === this.opened.id) { + query = Matter.Query.point(body.parts, this.mouse.position); + break; + } + } + } else { + // if no concernement opened we query concernements + query = Matter.Query.point(this.world.bodies, this.mouse.position) + } // console.log(this.mouse.position); - // console.log(query); - let clickedIDs = []; - query.forEach(elmt => { - // console.log('body id:', elmt.id); - clickedIDs.push(elmt.id); - }); - // open/close all concernements - this.openCloseConcernements(clickedIDs) + console.log('click query', query); + + // no concernement is yet opened, we deal concernements + if (!this.opened) { + let clickedIDs = []; + query.forEach(body => { + // console.log('body id:', body.id); + clickedIDs.push(body.id); + }); + // open/close all concernements + this.openCloseConcernements(clickedIDs) + + // if no concernement opened retrun to home (closing concernement contents opened) + // and reset the opened state in concernement store + if (!clickedIDs.length) { + this.resetConcernementOpened(); + this.$router.push({name: 'home'}); + } + } - // if no concernement opened retrun to home (closing concernement contents opened) - // and reset the opened state in concernement store - if (!clickedIDs.length) { - this.resetConcernementOpened(); - this.$router.push({name: 'home'}); + // concernement is already opened, we deal with entités + if (this.opened) { + let clickedBodies = []; + query.forEach(body => { + // console.log('body id:', body.id); + if (body.item_type === "entite") { + clickedBodies.push(body); + } + }); + if (clickedBodies.length) { + this.openEntite(clickedBodies[0].cid, clickedBodies[0].id) + } } } }, diff --git a/src/router/index.js b/src/router/index.js index c1fa7bf..84d9916 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -21,7 +21,7 @@ const router = createRouter({ props: true }, { - path: '/concernement/:id', + path: '/concernement/:id/:eid?', name: 'concernement', // component: ConcernementView, // route level code-splitting diff --git a/src/stores/concernements.js b/src/stores/concernements.js index 099d767..3b0b9c6 100644 --- a/src/stores/concernements.js +++ b/src/stores/concernements.js @@ -96,6 +96,9 @@ export const ConcernementsStore = defineStore({ }, resetConcernementOpened () { this.opened = null; + }, + openEntite (cid, id) { + this.router.push({name: 'concernement', params: {id: cid, eid: id}}); } } }) \ No newline at end of file diff --git a/src/views/Concernement.vue b/src/views/Concernement.vue index 01e587a..7932cda 100644 --- a/src/views/Concernement.vue +++ b/src/views/Concernement.vue @@ -3,14 +3,18 @@ import { mapActions, mapState } from 'pinia' import { ConcernementsStore } from '@stores/concernements' +import { print } from 'graphql/language/printer' +import gql from 'graphql-tag' +import GQL from '@api/graphql-axios' +import EntiteFields from '@api/gql/entite.fragment.gql' export default { - props: ['id'], - // data(){ - // return { - // block: null - // } - // }, + props: ['id', 'eid'], + data(){ + return { + entite: null + } + }, computed: { ...mapState(ConcernementsStore,['opened']), ...mapState(ConcernementsStore,['ct_concernement']) @@ -19,8 +23,34 @@ export default { // console.log("Concernement view created, id", this.opened.id); // this.loadStatics() }, + watch: { + eid: { + handler (n, o){ + this.loadEntite() + }, + deep: true + }, + }, methods: { // ...mapActions(StaticsStore,['loadStatics']) + loadEntite(){ + const ast = gql`{ + entite (id: ${this.eid}) { + ...EntiteFields + } + } + ${EntiteFields} + ` + console.log('ast', ast); + GQL.post('', { query: print(ast) }) + .then(({data: { data: { entite }}}) => { + console.log('load entite loaded', entite) + this.entite = entite + }) + .catch(error => { + console.warn('Issue with load entite', error) + }) + } }, components: { } @@ -30,6 +60,7 @@ export default {