front admin proximites almost done
This commit is contained in:
@@ -1231,6 +1231,19 @@ ul.editable-files{
|
||||
|
||||
}
|
||||
|
||||
section.editable-proximites{
|
||||
margin-top: 1em;
|
||||
label{
|
||||
padding: 0!important;
|
||||
}
|
||||
div.wrapper.editable{
|
||||
margin:0; padding:0.5em !important;
|
||||
&>div.vue-simple-suggest{
|
||||
display: block!important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.delete-btn{
|
||||
text-align: center;
|
||||
background-color: #eee;
|
||||
|
@@ -29,6 +29,9 @@ import ContentEditable from '@components/editable/ContentEditable.vue';
|
||||
import CheckboxEditable from '@components/editable/CheckboxEditable.vue';
|
||||
import SelectEditable from '@components/editable/SelectEditable.vue';
|
||||
|
||||
// import vueAutocomplete from "@venegrad/vue3-autocomplete"
|
||||
import VueSimpleSuggest from '@vojtechlanka/vue-simple-suggest';
|
||||
|
||||
export default {
|
||||
props: ['cid', 'eid'],
|
||||
data(){
|
||||
@@ -44,7 +47,10 @@ export default {
|
||||
chevrondown_path: mdiChevronDown,
|
||||
headerreduced: false,
|
||||
mdiStickerPlusOutline_path: mdiStickerPlusOutline,
|
||||
reloading_concernements: false
|
||||
reloading_concernements: false,
|
||||
prox_default_values: [],
|
||||
prox_new_value: {},
|
||||
prox_suggestions: []
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
@@ -54,9 +60,13 @@ export default {
|
||||
'ct_concernement',
|
||||
'ct_entite',
|
||||
'detailsZoomValue',
|
||||
'allEntitesById'
|
||||
// 'concernements_are_loading'
|
||||
]),
|
||||
...mapState(UserStore,['name','csrf_token']),
|
||||
...mapState(UserStore,['name',
|
||||
'csrf_token',
|
||||
'isloggedin',
|
||||
'user_entites']),
|
||||
created(){
|
||||
let d = new Date(this.concernement.created);
|
||||
console.log('d', d);
|
||||
@@ -184,6 +194,15 @@ export default {
|
||||
}
|
||||
},
|
||||
deep: true
|
||||
},
|
||||
user_entites: {
|
||||
handler (n, o) {
|
||||
console.log('TerrainDeVie watch user_entites');
|
||||
if (n) {
|
||||
this.checkForUserProxmite();
|
||||
}
|
||||
},
|
||||
deep: true
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
@@ -191,8 +210,9 @@ export default {
|
||||
'setDetailsZoomValue',
|
||||
'loadConcernements',
|
||||
'reloadConcernements',
|
||||
'reloadConcernementEntites']),
|
||||
// 'loadConcernementsRevisions'
|
||||
'reloadConcernementEntites',
|
||||
'reloadProximites'
|
||||
]),
|
||||
onClickInfos(){
|
||||
this.infos_opened = !this.infos_opened;
|
||||
},
|
||||
@@ -208,7 +228,9 @@ export default {
|
||||
GQL.post('', { query: print(ast) })
|
||||
.then(({data: { data: { entite }}}) => {
|
||||
console.log('load entite loaded', entite)
|
||||
this.entite = entite
|
||||
this.entite = entite;
|
||||
// this.setProxSuggestions()
|
||||
this.checkForUserProxmite();
|
||||
})
|
||||
.catch(error => {
|
||||
console.warn('Issue with load entite', error)
|
||||
@@ -341,16 +363,124 @@ export default {
|
||||
|
||||
REST.patch(`/node/${this.cid}?_format=json`, params_node, configs)
|
||||
.then(({ data }) => {
|
||||
console.log('REST patch entite new field_sources', data)
|
||||
console.log('REST patch entite new field_entite', data)
|
||||
resolve(data)
|
||||
})
|
||||
.catch(error => {
|
||||
console.warn(`Issue with patch node entite field_sources`, error)
|
||||
console.warn(`Issue with patch node entite field_entite`, error)
|
||||
reject(error)
|
||||
})
|
||||
// resolve('test')
|
||||
})
|
||||
}
|
||||
},
|
||||
// setProxSuggestions(){
|
||||
// this.prox_suggestions = [];
|
||||
// // check that entite is well referenced in a loaded concernement
|
||||
// this.user_entites.forEach((entite) => {
|
||||
// if (this.allEntitesById[entite.id]) {
|
||||
// // check if not already proximited
|
||||
// let tobesuggested = true;
|
||||
// this.prox_default_values.forEach((default_entite) => {
|
||||
// if (default_entite.id === entite.id) {
|
||||
// tobesuggested = false;
|
||||
// }
|
||||
// })
|
||||
// if (tobesuggested) {
|
||||
// this.prox_suggestions.push(entite)
|
||||
// }
|
||||
// }
|
||||
// })
|
||||
// console.log('this.prox_suggestions', this.prox_suggestions);
|
||||
// // this.checkForUserProxmite();
|
||||
// },
|
||||
checkForUserProxmite(){
|
||||
if (this.entite && this.isloggedin && !this.entite.can_update ) {
|
||||
console.log('checkForUserProxmite', this.entite);
|
||||
// this.prox_suggestions.forEach((user_entite) => {
|
||||
this.prox_default_values = [];
|
||||
this.prox_suggestions = [];
|
||||
this.user_entites.forEach((user_entite) => {
|
||||
console.log('user_entite', user_entite);
|
||||
console.log('entite', this.allEntitesById[user_entite.id]);
|
||||
if (this.allEntitesById[user_entite.id]) {
|
||||
let tobesuggested = true
|
||||
this.allEntitesById[user_entite.id].entite.proximite.forEach((prox_field_entite) => {
|
||||
if(prox_field_entite.id === this.entite.id) {
|
||||
this.prox_default_values.push(user_entite);
|
||||
tobesuggested = false
|
||||
}
|
||||
})
|
||||
if (tobesuggested) {
|
||||
this.prox_suggestions.push(user_entite)
|
||||
}
|
||||
}
|
||||
})
|
||||
console.log('this.prox_default_values', this.prox_default_values);
|
||||
}
|
||||
},
|
||||
onProximiteSelected(src_entite){
|
||||
console.log('onProximiteSelected', src_entite);
|
||||
if (src_entite) {
|
||||
this.proxvaluetitle = src_entite.title;
|
||||
// get all the field_proximite values, we don't want to ersae everything
|
||||
let proximites = [];
|
||||
this.allEntitesById[src_entite.id].entite.proximite.forEach((target_entite) =>{
|
||||
proximites.push({
|
||||
target_id: target_entite.id,
|
||||
})
|
||||
})
|
||||
// add the new field value
|
||||
proximites.push({
|
||||
target_id: this.entite.id,
|
||||
})
|
||||
console.log('proximites', proximites);
|
||||
|
||||
this.recordProximites(src_entite.id, proximites);
|
||||
}
|
||||
},
|
||||
deleteProximite(src_entite){
|
||||
console.log('deleteProximite', src_entite);
|
||||
if (src_entite) {
|
||||
// get all the field_proximite values, excpet the one we want to delete
|
||||
let proximites = [];
|
||||
this.allEntitesById[src_entite.id].entite.proximite.forEach((target_entite) =>{
|
||||
if(target_entite.id !== this.entite.id){
|
||||
proximites.push({
|
||||
target_id: target_entite.id,
|
||||
})
|
||||
}
|
||||
})
|
||||
this.recordProximites(src_entite.id, proximites);
|
||||
}
|
||||
},
|
||||
recordProximites(src_id, proximites){
|
||||
console.log(`recordProximites proximites`, proximites);
|
||||
|
||||
const params_node = {
|
||||
type: 'entite',
|
||||
nid: [{value: src_id}],
|
||||
'field_proximite': proximites
|
||||
};
|
||||
|
||||
const configs = {
|
||||
headers: {'X-CSRF-Token': this.csrf_token}
|
||||
};
|
||||
|
||||
REST.patch(`/node/${src_id}?_format=json`, params_node, configs)
|
||||
.then(({ data }) => {
|
||||
console.log('REST patch entite new field_proximite', data)
|
||||
this.reloadProximites(src_id)
|
||||
.then(() => {
|
||||
// TODO clear the autocomplete field
|
||||
this.prox_new_value = null;
|
||||
})
|
||||
})
|
||||
.catch(error => {
|
||||
console.warn(`Issue with patch node entite field_proximite`, error)
|
||||
// reject(error)
|
||||
})
|
||||
},
|
||||
|
||||
|
||||
},
|
||||
components: {
|
||||
@@ -360,7 +490,8 @@ export default {
|
||||
SvgIcon,
|
||||
ContentEditable,
|
||||
CheckboxEditable,
|
||||
SelectEditable
|
||||
SelectEditable,
|
||||
VueSimpleSuggest
|
||||
}
|
||||
}
|
||||
|
||||
@@ -386,6 +517,41 @@ export default {
|
||||
field: {field_name: 'title', value:'value'}
|
||||
}" />
|
||||
|
||||
<!-- proximité -->
|
||||
<section
|
||||
v-if="entite && isloggedin && !entite.can_update"
|
||||
id="new-proxomite"
|
||||
class="editable-proximites"
|
||||
>
|
||||
<label>Mes proximités</label>
|
||||
<div class="wrapper editable">
|
||||
<ul v-if="prox_default_values.length">
|
||||
<li v-for="(prox_entite, i) in prox_default_values" v-key="i">
|
||||
<em>{{ prox_entite.title }}</em>
|
||||
<span
|
||||
class="delete"
|
||||
@click="deleteProximite(prox_entite)"
|
||||
>x</span>
|
||||
</li>
|
||||
</ul>
|
||||
<template v-if="prox_suggestions.length" >
|
||||
<span>Lier <em>{{ entite.title }}</em> a une de mes entitées</span>
|
||||
<VueSimpleSuggest
|
||||
mode="select"
|
||||
:list="prox_suggestions"
|
||||
v-model="prox_new_value"
|
||||
display-attribute="title"
|
||||
value-attribute="id"
|
||||
filter-by-query="true"
|
||||
min-length="0"
|
||||
placeholder="Tappez le nom de votre entite..."
|
||||
@update:model-select="onProximiteSelected"
|
||||
/>
|
||||
</template>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- agissante -->
|
||||
<CheckboxEditable
|
||||
v-if="entite && entite.can_update"
|
||||
:checked="entite.agissante"
|
||||
@@ -413,6 +579,8 @@ export default {
|
||||
field: 'field_confidentialite'
|
||||
}" />
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
@@ -1,4 +1,7 @@
|
||||
import { defineStore } from 'pinia'
|
||||
|
||||
import { UserStore } from '@/stores/user';
|
||||
|
||||
// import REST from '@api/rest-axios'
|
||||
// import JSONAPI from '@api/json-axios'
|
||||
import { print } from 'graphql/language/printer'
|
||||
@@ -15,6 +18,7 @@ import ConcernementFields from '@api/gql/concernement.fragment.gql'
|
||||
|
||||
import _assign from 'lodash/assign';
|
||||
|
||||
|
||||
export const ConcernementsStore = defineStore({
|
||||
id: 'concernements',
|
||||
state: () => ({
|
||||
@@ -398,6 +402,47 @@ export const ConcernementsStore = defineStore({
|
||||
})
|
||||
})
|
||||
},
|
||||
reloadProximites (entite_id) {
|
||||
console.log(`reloadProximites src_id:${entite_id}`);
|
||||
console.log('this.allEntitesById[entite_id]', this.allEntitesById[entite_id]);
|
||||
return new Promise((resolve, reject) => {
|
||||
let old_entite = this.allEntitesById[entite_id];
|
||||
const ast = gql`{
|
||||
entite(id:${entite_id}) {
|
||||
title
|
||||
id
|
||||
proximite {
|
||||
id
|
||||
title
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
`
|
||||
GQL.post('', { query: print(ast) })
|
||||
.then(({ data : { data : { entite } } }) => {
|
||||
console.log(`reloadProximites loaded`, entite);
|
||||
let concernement = this.concernementsByID[old_entite.cid];
|
||||
console.log('concernement', concernement);
|
||||
concernement.entites_byid[entite.id].entite.proximite = entite.proximite;
|
||||
let user = UserStore();
|
||||
console.log('user', user);
|
||||
user.getUserEntitees()
|
||||
.then(() => { // { data : { data : { userentites } } }
|
||||
console.log('reloadProximites graphql userentites loaded')
|
||||
// this.user_entites = userentites;
|
||||
resolve();
|
||||
})
|
||||
.catch(error => {
|
||||
console.warn('Issue with graphql userentites loading', error)
|
||||
Promise.reject(error)
|
||||
})
|
||||
})
|
||||
.catch(error => {
|
||||
console.warn('Issue with reloadProximites', error);
|
||||
})
|
||||
});
|
||||
},
|
||||
loadContentTypeDefinition () {
|
||||
const body = {
|
||||
query: `
|
||||
|
@@ -21,7 +21,8 @@ export const UserStore = defineStore({
|
||||
name: null,
|
||||
roles: [],
|
||||
isAdmin: false,
|
||||
logginMessage: null
|
||||
logginMessage: null,
|
||||
user_entites: null,
|
||||
}),
|
||||
getters: {
|
||||
|
||||
@@ -41,16 +42,7 @@ export const UserStore = defineStore({
|
||||
|
||||
this.getUser(); // necessery to get the csrf-token
|
||||
|
||||
// this.userGetRoles()
|
||||
// .then(({ data : { data : { user } } }) => {
|
||||
// console.log('graphql user loaded', user)
|
||||
// this.roles = user.roles
|
||||
// this.checkIsAdmin()
|
||||
// })
|
||||
// .catch(error => {
|
||||
// console.warn('Issue with graphql user loading', error)
|
||||
// Promise.reject(error)
|
||||
// })
|
||||
|
||||
})
|
||||
}
|
||||
})
|
||||
@@ -134,7 +126,18 @@ export const UserStore = defineStore({
|
||||
console.log('graphql user loaded', user)
|
||||
this.roles = user.roles
|
||||
this.checkIsAdmin()
|
||||
resolve()
|
||||
|
||||
this.getUserEntitees()
|
||||
.then(() => { //{ data : { data : { userentites } } }
|
||||
console.log('then from get user, graphql userentites loaded')
|
||||
// this.user_entites = userentites;
|
||||
resolve()
|
||||
})
|
||||
.catch(error => {
|
||||
console.warn('Issue with graphql userentites loading', error)
|
||||
Promise.reject(error)
|
||||
})
|
||||
|
||||
})
|
||||
.catch(error => {
|
||||
console.warn('Issue with graphql user loading', error)
|
||||
@@ -174,6 +177,31 @@ export const UserStore = defineStore({
|
||||
}
|
||||
}
|
||||
},
|
||||
getUserEntitees () {
|
||||
console.log('getUserEntitees');
|
||||
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
const body = {
|
||||
query: `
|
||||
query UserEntites($uid: Int!){
|
||||
userentites(uid: $uid) {
|
||||
id
|
||||
title
|
||||
}
|
||||
}`,
|
||||
variables: { uid: parseInt(this.uid) }
|
||||
}
|
||||
|
||||
GQL.post('', body)
|
||||
.then(({ data : { data : { userentites } } }) => {
|
||||
console.log('then from getUserEntitees, graphql userentites loaded', userentites)
|
||||
this.user_entites = userentites;
|
||||
resolve();
|
||||
});
|
||||
|
||||
});
|
||||
},
|
||||
userLogout () {
|
||||
const credentials = qs.stringify({
|
||||
token: this.csrf_token
|
||||
|
Reference in New Issue
Block a user