Concernement.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <script>
  2. import { mapActions, mapState } from 'pinia'
  3. import { ConcernementsStore } from '@stores/concernements'
  4. import { CommonStore } from '@/stores/common'
  5. import { print } from 'graphql/language/printer'
  6. import gql from 'graphql-tag'
  7. import GQL from '@api/graphql-axios'
  8. import EntiteFields from '@api/gql/entite.fragment.gql'
  9. // import SvgIcon from '@jamescoyle/vue-icon';
  10. // import { mdiHeadphones } from '@mdi/js';
  11. import TerrainDeVie from '@components/contents/TerrainDeVie.vue';
  12. import PuissanceAgir from '@components/contents/PuissanceAgir.vue';
  13. import Doleancer from '@components/contents/Doleancer.vue';
  14. export default {
  15. props: ['id', 'eid'],
  16. data(){
  17. return {
  18. entite: null,
  19. opened_besoin_id: null
  20. }
  21. },
  22. computed: {
  23. ...mapState(ConcernementsStore,['map_mode',
  24. 'opened_concernement',
  25. // 'opened_entity_id',
  26. 'concernements_loaded',
  27. 'ct_concernement',
  28. 'ct_entite',
  29. 'ct_cercle_politique',
  30. 'p_groupes_interets',
  31. 'p_reception_et_traitement',
  32. 'p_mise_en_oeuvre_decision',
  33. 'p_reception_application_decision']),
  34. ...mapState(CommonStore,['hover_elmt'])
  35. },
  36. created () {
  37. console.log(`Concernement view created, id: ${this.id}, eid: ${this.eid}, opened_concernement:${this.opened_concernement}`);
  38. // when we arrived directly to the url, load the entite
  39. // this.eid provided by route params
  40. if (!this.entity && this.eid) {
  41. this.openEntity();
  42. }
  43. },
  44. watch: {
  45. concernements_loaded: {
  46. handler (n, o){
  47. console.log(`watch concernements_loaded n: ${n}, opened_concernement:${this.opened_concernement}, id:${this.id}`);
  48. // when we arrived directly to the url then all concernement are loaded: do open the concernement
  49. if (!this.opened_concernement) {
  50. this.openCloseConcernements(this.id)
  51. }
  52. },
  53. deep: true
  54. },
  55. eid: {
  56. handler (n, o){
  57. if(n){
  58. this.openEntity()
  59. }else{
  60. this.entite = false;
  61. this.setOpenedEntityId(null);
  62. }
  63. },
  64. deep: true
  65. },
  66. },
  67. methods: {
  68. ...mapActions(ConcernementsStore,['openCloseConcernements']),
  69. ...mapActions(ConcernementsStore,['setOpenedEntityId']),
  70. ...mapActions(ConcernementsStore,['setMapMode']),
  71. openEntity(){
  72. this.setOpenedEntityId(parseInt(this.eid))
  73. this.loadEntite()
  74. },
  75. loadEntite(){
  76. const ast = gql`{
  77. entite (id: ${this.eid}) {
  78. ...EntiteFields
  79. }
  80. }
  81. ${EntiteFields}
  82. `
  83. console.log('ast', ast);
  84. GQL.post('', { query: print(ast) })
  85. .then(({data: { data: { entite }}}) => {
  86. console.log('load entite loaded', entite)
  87. this.entite = entite
  88. })
  89. .catch(error => {
  90. console.warn('Issue with load entite', error)
  91. })
  92. }
  93. },
  94. components: {
  95. TerrainDeVie,
  96. PuissanceAgir,
  97. Doleancer
  98. }
  99. }
  100. </script>
  101. <template>
  102. <section v-if="opened_concernement" class="concernement">
  103. <TerrainDeVie v-if="map_mode === 'terraindevie' || map_mode === 'action'" :id="id" :eid="eid" :entite="entite"/>
  104. <PuissanceAgir v-if="map_mode === 'puissancedagir'" :id="id"/>
  105. <Doleancer v-if="map_mode === 'doleancer'" :id="id"/>
  106. </section>
  107. </template>
  108. <style lang="scss" scoped>
  109. </style>