瀏覽代碼

field confidentialite SelectEditable

bach 1 月之前
父節點
當前提交
67c2008d1f
共有 2 個文件被更改,包括 95 次插入1 次删除
  1. 19 1
      src/components/contents/TerrainDeVie.vue
  2. 76 0
      src/components/editable/SelectEditable.vue

+ 19 - 1
src/components/contents/TerrainDeVie.vue

@@ -23,6 +23,7 @@ import { mdiChevronDown } from '@mdi/js';
 
 import ContentEditable from '@components/editable/ContentEditable.vue';
 import CheckboxEditable from '@components/editable/CheckboxEditable.vue';
+import SelectEditable from '@components/editable/SelectEditable.vue';
 
 export default {
   props: ['cid', 'eid'],
@@ -223,7 +224,8 @@ export default {
     VueSlider,
     SvgIcon,
     ContentEditable,
-    CheckboxEditable
+    CheckboxEditable,
+    SelectEditable
   }
 }
 
@@ -260,6 +262,22 @@ export default {
             field: 'field_entite_agissante'
           }" />
 
+        <SelectEditable 
+          v-if="entite && entite.can_update"
+          label="Confidentialité"
+          :value="0"
+          :options="{
+            'confidentialite_prive': 'privé',
+            'confidentialite_interne': 'interne',
+            'confidentialite_public': 'public'
+          }"
+          :data="{
+            entitytype: 'node',
+            bundle: 'entite',
+            nid: this.entite.id,
+            field: 'field_confidentialite'
+          }" />
+
       </div>
     </template>
     

+ 76 - 0
src/components/editable/SelectEditable.vue

@@ -0,0 +1,76 @@
+<script>
+
+import REST from '@api/rest-axios'
+
+import { mapActions, mapState } from 'pinia'
+import { ConcernementsStore } from '@stores/concernements'
+import { UserStore } from '@stores/user'
+
+
+export default {
+  props: {
+    value: Number,
+    options: Object,
+    label: String, 
+    data: Object
+  },
+  emits: ['updated'],
+  data(){
+    return {
+      
+    }
+  },
+  computed: {
+    ...mapState(UserStore,['csrf_token']),
+  },
+  created () {
+    console.log('SelectEditable created');
+  },
+  mounted () {
+
+  },
+  methods: {
+    ...mapActions(ConcernementsStore, ['reloadConcernements']),
+    onInput(e){
+      console.log('onInput select e', e);
+      // let checked  = e.target.checked;
+      let value = e.target.value;
+      // console.log('onInput checkbox checked', checked);
+      this.save(value)
+    },
+    save(value){
+      // console.log('save csrf_token', this.csrf_token);
+      const params = {
+        type: this.data.bundle,
+        nid: [{"value":this.data.nid}],
+        [this.data.field]: {value: value}
+      };
+      const configs = {
+        headers: {'X-CSRF-Token': this.csrf_token}
+      };
+      REST.patch(`/node/${this.data.nid}?_format=json`, params, configs)
+        .then(({ data }) => {
+          console.log('user REST post node data', data)
+          // TODO if success update the data in pinia 
+          // this.reloadConcernements();
+          this.$emit('updated');
+        })
+        .catch(error => {
+          console.warn(`Issue with patch node ${this.data.bundle}`, error)
+          Promise.reject(error)
+        })
+    }
+  },
+}
+</script>
+
+<template>
+  <section class="editable">
+    <label>{{ label }}</label>
+    <select :value="value" @input="onInput">
+      <template v-for="(name,value,index) in options" :key="index">
+        <option :value="value">{{name}}</option>
+      </template>
+    </select>
+  </section>
+</template>