ouatterrir-app/src/stores/concernements.js

132 lines
4.4 KiB
JavaScript

import { defineStore } from 'pinia'
// import REST from '@api/rest-axios'
// import JSONAPI from '@api/json-axios'
import { print } from 'graphql/language/printer'
import gql from 'graphql-tag'
// import REST from '@api/rest-axios'
import GQL from '@api/graphql-axios'
// import JSONAPI from '@api/json-axios'
import ConcernementFields from '@api/gql/concernement.fragment.gql'
// import EntityFields from '@api/gql/entitydef.fragment.gql'
export const ConcernementsStore = defineStore({
id: 'concernements',
state: () => ({
map_mode: "terraindevie",
concernements: [],
concernementsByID: {},
allEntitesById: {},
opened: false,
opened_entite_id: null,
ct_concernement: {},
concernements_loaded: false,
}),
getters: {
},
actions: {
setMapMode(mode) {
console.log(`set map_mode ${mode}`);
// mode can be : terraindevie, proximite, superposition, puissancedagir, action, doleancer
this.map_mode = mode;
},
loadConcernements () {
console.log('concernements store loadConcernements');
return new Promise((resolve, reject) => {
const ast = gql`{
allconcernements {
...ConcernementFields
}
}
${ConcernementFields}
`
console.log('ast', ast);
GQL.post('', { query: print(ast) })
.then(({ data : { data : { allconcernements } } }) => {
console.log('loadconcernements loaded', allconcernements)
this.concernements = [];
allconcernements.forEach(concernement => {
concernement.entites_byid = {};
concernement.entitesagissantes_byid = {};
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
entites_temp.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;
concernement.entites.push(entite); // fill the entites array with visible entite only
}
});
// puissance d'agir
concernement.has_puissancedagir = concernement.besoins.length ? true : false;
// common
this.concernements.push(concernement);
this.concernementsByID[concernement.id] = concernement;
});
this.concernements_loaded = true;
})
.catch(error => {
console.warn('Issue with loadConcernements', error)
Promise.reject(error)
})
})
},
loadContentTypeDefinition () {
const body = {
query: `
query EntityDef($type: String!, $bundle: String!){
entitydef(type: $type, bundle: $bundle) {
fields {
type
field_name
label
description
}
}
}`,
variables: { type: 'node', bundle: 'concernement' }
}
GQL.post('', body)
.then(({ data: { data: { entitydef }}}) => {
// console.log('loadContentTypeDefinition entitydef', entitydef);
entitydef.fields.forEach(field => {
this.ct_concernement[field.field_name] = field;
});
console.log('loadContentTypeDefinition entitydef', this.ct_concernement);
})
},
openCloseConcernements (id) {
console.log(`openCloseConcernements id: ${id}`);
var state;
this.concernements.forEach((c, i) => {
state = id == c.id;
this.concernements[i].opened = this.concernementsByID[c.id].opened = state;
if (state) {
this.opened = c;
}
});
},
resetConcernementOpened () {
this.opened = null;
this.openCloseConcernements();
},
setOpenedEntityId(id){
this.opened_entite_id = id;
}
}
})