concernements.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. import { defineStore } from 'pinia'
  2. // import REST from '@api/rest-axios'
  3. // import JSONAPI from '@api/json-axios'
  4. import { print } from 'graphql/language/printer'
  5. import gql from 'graphql-tag'
  6. // import REST from '@api/rest-axios'
  7. import GQL from '@api/graphql-axios'
  8. // import JSONAPI from '@api/json-axios'
  9. import ConcernementFields from '@api/gql/concernement.fragment.gql'
  10. // import EntityFields from '@api/gql/entitydef.fragment.gql'
  11. export const ConcernementsStore = defineStore({
  12. id: 'concernements',
  13. state: () => ({
  14. map_mode: "terraindevie",
  15. concernements: [],
  16. concernementsByID: {},
  17. allEntitesById: {},
  18. opened: false,
  19. opened_entite_id: null,
  20. ct_concernement: {},
  21. concernements_loaded: false,
  22. }),
  23. getters: {
  24. },
  25. actions: {
  26. setMapMode(mode) {
  27. console.log(`set map_mode ${mode}`);
  28. // mode can be : terraindevie, proximite, superposition, puissancedagir, action, doleancer
  29. this.map_mode = mode;
  30. },
  31. loadConcernements () {
  32. console.log('concernements store loadConcernements');
  33. return new Promise((resolve, reject) => {
  34. const ast = gql`{
  35. allconcernements {
  36. ...ConcernementFields
  37. }
  38. }
  39. ${ConcernementFields}
  40. `
  41. console.log('ast', ast);
  42. GQL.post('', { query: print(ast) })
  43. .then(({ data : { data : { allconcernements } } }) => {
  44. console.log('loadconcernements loaded', allconcernements)
  45. this.concernements = [];
  46. allconcernements.forEach(concernement => {
  47. concernement.entites_byid = {};
  48. concernement.entitesagissantes_byid = {};
  49. concernement.has_agissantes = false;
  50. concernement.entites.forEach(entite => {
  51. concernement.entites_byid[entite.entite.id] = entite;
  52. // record entite agissante
  53. if (entite.entite.agissante) {
  54. concernement.entitesagissantes_byid[entite.entite.id] = entite;
  55. concernement.has_agissantes = true;
  56. }
  57. // record a flat list of all entités of all concernement for map-popup
  58. this.allEntitesById[entite.entite.id] = entite;
  59. });
  60. this.concernements.push(concernement);
  61. this.concernementsByID[concernement.id] = concernement;
  62. });
  63. this.concernements_loaded = true;
  64. })
  65. .catch(error => {
  66. console.warn('Issue with loadConcernements', error)
  67. Promise.reject(error)
  68. })
  69. })
  70. },
  71. loadContentTypeDefinition () {
  72. const body = {
  73. query: `
  74. query EntityDef($type: String!, $bundle: String!){
  75. entitydef(type: $type, bundle: $bundle) {
  76. fields {
  77. type
  78. field_name
  79. label
  80. description
  81. }
  82. }
  83. }`,
  84. variables: { type: 'node', bundle: 'concernement' }
  85. }
  86. GQL.post('', body)
  87. .then(({ data: { data: { entitydef }}}) => {
  88. // console.log('loadContentTypeDefinition entitydef', entitydef);
  89. entitydef.fields.forEach(field => {
  90. this.ct_concernement[field.field_name] = field;
  91. });
  92. console.log('loadContentTypeDefinition entitydef', this.ct_concernement);
  93. })
  94. },
  95. openCloseConcernements (id) {
  96. console.log(`openCloseConcernements id: ${id}`);
  97. var state;
  98. this.concernements.forEach((c, i) => {
  99. state = id == c.id;
  100. this.concernements[i].opened = this.concernementsByID[c.id].opened = state;
  101. if (state) {
  102. this.opened = c;
  103. }
  104. });
  105. },
  106. resetConcernementOpened () {
  107. this.opened = null;
  108. this.openCloseConcernements();
  109. },
  110. setOpenedEntityId(id){
  111. this.opened_entite_id = id;
  112. }
  113. }
  114. })