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 }}
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 {
+ {{ entite.title }}
{{ opened.title }}