admin front doleance DateEditable

This commit is contained in:
Bachir Soussi Chiadmi 2025-02-12 15:21:31 +01:00
parent a87d7ac5ff
commit 86bd454791
5 changed files with 154 additions and 40 deletions

26
package-lock.json generated
View File

@ -15,6 +15,7 @@
"@mdi/js": "^7.2.96",
"@tweenjs/tween.js": "^21.0.0",
"@vojtechlanka/vue-simple-suggest": "^2.0.6",
"@vuepic/vue-datepicker": "^11.0.1",
"fabric": "^6.0.0-beta7",
"granim": "^2.0.0",
"lodash": "^4.17.21",
@ -939,6 +940,21 @@
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz",
"integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ=="
},
"node_modules/@vuepic/vue-datepicker": {
"version": "11.0.1",
"resolved": "https://registry.npmjs.org/@vuepic/vue-datepicker/-/vue-datepicker-11.0.1.tgz",
"integrity": "sha512-xtGbgZAftBiU1H8pwM54vOCutLzEHsHiolRuDn+memTjqpfzT0x1Ml1tykJ53PLvdkCTyb6sB+1muv5Gsd4nQA==",
"license": "MIT",
"dependencies": {
"date-fns": "^4.1.0"
},
"engines": {
"node": ">=18.12.0"
},
"peerDependencies": {
"vue": ">=3.3.0"
}
},
"node_modules/abab": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
@ -1505,6 +1521,16 @@
"node": ">=12"
}
},
"node_modules/date-fns": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz",
"integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/kossnocorp"
}
},
"node_modules/debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",

View File

@ -15,6 +15,7 @@
"@mdi/js": "^7.2.96",
"@tweenjs/tween.js": "^21.0.0",
"@vojtechlanka/vue-simple-suggest": "^2.0.6",
"@vuepic/vue-datepicker": "^11.0.1",
"fabric": "^6.0.0-beta7",
"granim": "^2.0.0",
"lodash": "^4.17.21",

View File

@ -607,6 +607,9 @@ div.loading{
margin: 0 0 0.5em 0;
}
}
>section{
margin:1em 0 0;
}
label{
margin:0;
padding:0 0 0.5em 0;
@ -618,44 +621,9 @@ div.loading{
ul{
// padding:0 0 0 1em;
}
// .v-select{
// input.vs__search{
// display: none;
// }
// div.vs__dropdown-toggle{
// border-radius: 0;
// border: none;
// }
// div.vs__selected-options{
// padding: 0;
// span.vs__selected{
// padding: 0;
// margin: 0;
// font-weight: 400;
// font-size: 1.323em;
// color:inherit;
// line-height: 1.15;
// }
// }
// ul.vs__dropdown-menu{
// border-radius: 0;
// border: none;
// li.vs__dropdown-option{
// white-space:normal;
// padding:1em 1em 0 1em;
// &:last-of-type{
// padding:1em;
// }
// color: #aaa;
// transition: color 0.2s ease-in-out;
// &.vs__dropdown-option--highlight{
// color:#000;
// background-color: #fff;
// }
// }
// }
// }
.leprobleme-date{
margin: 0.5em 0;
}
}
}

View File

@ -23,6 +23,7 @@ import { mdiStickerPlusOutline } from '@mdi/js';
import ContentEditable from '@components/editable/ContentEditable.vue';
import DateEditable from '@components/editable/DateEditable.vue';
// import CheckboxEditable from '@components/editable/CheckboxEditable.vue';
// import SelectEditable from '@components/editable/SelectEditable.vue';
@ -230,7 +231,8 @@ export default {
components: {
CartoucheLayout,
SvgIcon,
ContentEditable
ContentEditable,
DateEditable,
// CheckboxEditable,
// SelectEditable
}
@ -265,7 +267,18 @@ export default {
v-on:updated="reloadConcernementCerclePol(cid)"/>
<section
v-if="opened_concernement.opened_doleance.field === 'leprobleme' || !opened_concernement.opened_doleance.field">
<span class="date">{{ doleance.date_leprobleme.start }}</span>
<!-- <span class="date">{{ doleance.date_leprobleme.start }}</span> -->
<DateEditable
:value="doleance.date_leprobleme.start"
class="leprobleme-date"
:contenteditable="opened_concernement.can_update"
:data="{
entitytype: 'node',
bundle: 'cercle_politique',
id: doleance.id,
field: {field_name: 'field_date_leprobleme', value:'value'}
}"
v-on:updated="reloadConcernementCerclePol(cid)"/>
<h5>{{ ct_cercle_politique.field_le_probleme.label }}</h5>
<ContentEditable
tag="h4"

View File

@ -0,0 +1,106 @@
<script>
import REST from '@api/rest-axios'
import { mapActions, mapState } from 'pinia'
import { ConcernementsStore } from '@stores/concernements'
import { UserStore } from '@stores/user'
import VueDatePicker from '@vuepic/vue-datepicker';
import '@vuepic/vue-datepicker/dist/main.css';
export default {
props: {
tag: String,
value: String,
contenteditable : {
type : [Boolean, String],
default : true,
},
data: Object,
placeholder : {
type : String,
default : 'Ajouter du texte'
}
},
emits: ['updated'],
data(){
return {
date: null,
// spellcheck: false
}
},
computed: {
...mapState(UserStore,['csrf_token']),
},
created () {
console.log('DateEditable created');
this.date = this.value;
},
mounted () {
// if (this.contenteditable) {
// }
},
beforeUnmount() {
},
watch: {
date (n, o) {
console.log(`datEditable watch date n, o`, n, o);
if(n !== o){
this.save();
}
},
},
methods: {
...mapActions(ConcernementsStore, ['reloadConcernements']),
save(){
console.log('save csrf_token', this.csrf_token);
const params = {
type: this.data.bundle,
[this.data.field.field_name]: [{[this.data.field.value]: this.date}]
};
if (this.data.entitytype === 'node') {
params.nid = [{"value":this.data.id}];
} else {
params.id = [{"value":this.data.id}];
}
// we need additional values for image alt for example
// console.log('additional_values', this.data.field.additional_values);
if (this.data.field.additional_values) {
for (const key in this.data.field.additional_values) {
if (Object.hasOwnProperty.call(this.data.field.additional_values, key)) {
params[this.data.field.field_name][0][key] = this.data.field.additional_values[key]
}
}
}
const configs = {
headers: {'X-CSRF-Token': this.csrf_token}
};
// url is not the same between nodes and others entities
let url_base = `/${this.data.entitytype === 'node' ? '' : 'entity/'}${this.data.entitytype}`;
// call the api
REST.patch(`${url_base}/${this.data.id}?_format=json`, params, configs)
.then(({ data }) => {
console.log('user REST post node data', data)
this.$emit('updated');
})
.catch(error => {
console.warn(`Issue with patch ${this.data.entitytype} ${this.data.bundle}`, error)
Promise.reject(error)
})
}
},
components: {
VueDatePicker
}
}
</script>
<template>
<VueDatePicker v-if="contenteditable" v-model="date" model-type="yyyy-MM-dd" format="dd-MM-yyyy" :enable-time-picker="false" :clearable="false"/>
<span v-else class="date">{{ value }}</span>
</template>