ouatterrir-app/src/stores/concernements.js

231 lines
8.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: null,
concernements: [],
concernementsByID: {},
allEntitesById: {},
allBesoinsById: {},
opened: false,
opened_entite_id: null,
ct_concernement: {},
ct_entite: {},
ct_cercle_politique: {},
p_groupes_interets: {},
p_reception_et_traitement: {},
p_mise_en_oeuvre_decision: {},
p_reception_application_decision: {},
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.visible = true;
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;
concernement.besoins.forEach(besoin => {
this.allBesoinsById[besoin.id] = besoin;
});
// doleance
concernement.has_doleance = concernement.doleances.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: {}
}
// concernement
body.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 concernement', this.ct_concernement);
})
// entite
body.variables = { type: 'node', bundle: 'entite' }
GQL.post('', body)
.then(({ data: { data: { entitydef }}}) => {
// console.log('loadContentTypeDefinition entitydef', entitydef);
entitydef.fields.forEach(field => {
this.ct_entite[field.field_name] = field;
});
console.log('loadContentTypeDefinition entitydef entite', this.ct_entite);
})
// cercle_politique
body.variables = { type: 'node', bundle: 'cercle_politique' }
GQL.post('', body)
.then(({ data: { data: { entitydef }}}) => {
// console.log('loadContentTypeDefinition entitydef', entitydef);
entitydef.fields.forEach(field => {
this.ct_cercle_politique[field.field_name] = field;
});
console.log('loadContentTypeDefinition entitydef cercle_politique', this.ct_cercle_politique);
})
// paragraphe groupes_interets
body.variables = { type: 'paragraph', bundle: 'groupes_interets' }
GQL.post('', body)
.then(({ data: { data: { entitydef }}}) => {
// console.log('loadContentTypeDefinition entitydef', entitydef);
entitydef.fields.forEach(field => {
this.p_groupes_interets[field.field_name] = field;
});
console.log('loadContentTypeDefinition entitydef p_groupes_interets', this.p_groupes_interets);
})
// paragraphe reception_et_traitement
body.variables = { type: 'paragraph', bundle: 'reception_et_traitement' }
GQL.post('', body)
.then(({ data: { data: { entitydef }}}) => {
// console.log('loadContentTypeDefinition entitydef', entitydef);
entitydef.fields.forEach(field => {
this.p_reception_et_traitement[field.field_name] = field;
});
console.log('loadContentTypeDefinition entitydef p_reception_et_traitement', this.p_reception_et_traitement);
})
// paragraphe mise_en_oeuvre_decision
body.variables = { type: 'paragraph', bundle: 'mise_en_oeuvre_decision' }
GQL.post('', body)
.then(({ data: { data: { entitydef }}}) => {
// console.log('loadContentTypeDefinition entitydef', entitydef);
entitydef.fields.forEach(field => {
this.p_mise_en_oeuvre_decision[field.field_name] = field;
});
console.log('loadContentTypeDefinition entitydef p_mise_en_oeuvre_decision', this.p_mise_en_oeuvre_decision);
})
// paragraphe reception_application_decision
body.variables = { type: 'paragraph', bundle: 'reception_application_decision' }
GQL.post('', body)
.then(({ data: { data: { entitydef }}}) => {
// console.log('loadContentTypeDefinition entitydef', entitydef);
entitydef.fields.forEach(field => {
this.p_reception_application_decision[field.field_name] = field;
});
console.log('loadContentTypeDefinition entitydef p_reception_application_decision', this.p_reception_application_decision);
})
},
hideShowConcernement (id, state) {
console.log(`disableConcernement id: ${id}`);
this.concernements.forEach((c, i) => {
if (c.id === id) {
this.concernements[i].visible = this.concernementsByID[id].visible = state;
}
})
},
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;
}
}
})