|
@@ -50,6 +50,12 @@
|
|
|
</ul>
|
|
|
</div>
|
|
|
</section>
|
|
|
+ <section class="tool note">
|
|
|
+ <span class="btn mdi mdi-square-edit-outline"/>
|
|
|
+ <div class="tool-content">
|
|
|
+ <textarea spellcheck="false" v-model="note" name="note"/>
|
|
|
+ </div>
|
|
|
+ </section>
|
|
|
<section class="tool print">
|
|
|
<a :href="material.path+'/printable/print'" target="_blank">
|
|
|
<span class="btn mdi mdi-printer"/>
|
|
@@ -198,6 +204,7 @@ import LinkedMaterialCard from 'vuejs/components/Content/LinkedMaterialCard'
|
|
|
|
|
|
import cardMixins from 'vuejs/components/cardMixins'
|
|
|
|
|
|
+import { REST } from 'vuejs/api/rest-axios'
|
|
|
import { MGQ } from 'vuejs/api/graphql-axios'
|
|
|
import { print } from 'graphql/language/printer'
|
|
|
import gql from 'graphql-tag'
|
|
@@ -205,6 +212,8 @@ import materiauFields from 'vuejs/api/gql/materiaumodal.fragment.gql'
|
|
|
|
|
|
const prettyBytes = require('pretty-bytes')
|
|
|
|
|
|
+const _debounce = require('lodash/debounce')
|
|
|
+
|
|
|
export default {
|
|
|
name: "ModalCard",
|
|
|
props: ['item'],
|
|
@@ -218,11 +227,14 @@ export default {
|
|
|
loading: false,
|
|
|
blanksrc:`${drupalSettings.path.themePath}/assets/img/blank.gif`,
|
|
|
loadingFlag: false,
|
|
|
- lightbox_index: null
|
|
|
+ lightbox_index: null,
|
|
|
+ note: "",
|
|
|
+ note_nid: null
|
|
|
}
|
|
|
},
|
|
|
computed: {
|
|
|
...mapState({
|
|
|
+ csrf_token: state => state.User.csrf_token,
|
|
|
flagcolls: state => state.User.flagcolls,
|
|
|
showrooms: state => state.Showrooms.showrooms_by_tid
|
|
|
})
|
|
@@ -230,6 +242,14 @@ export default {
|
|
|
created () {
|
|
|
console.log('modale item', this.item)
|
|
|
this.loadMaterial()
|
|
|
+ this.debouncedSaveNote = _debounce(this.saveNote, 500)
|
|
|
+ },
|
|
|
+ watch: {
|
|
|
+ // whenever question changes, this function will run
|
|
|
+ note: function (n, o) {
|
|
|
+ console.log("note watcher: note", n)
|
|
|
+ this.debouncedSaveNote()
|
|
|
+ }
|
|
|
},
|
|
|
methods: {
|
|
|
...mapActions({
|
|
@@ -251,6 +271,10 @@ export default {
|
|
|
console.log('loadMaterial material loaded', materiau )
|
|
|
this.material = materiau
|
|
|
this.loading = false
|
|
|
+ if(materiau.note && materiau.note.id){
|
|
|
+ this.note_id = materiau.note.id
|
|
|
+ this.note = materiau.note.contenu
|
|
|
+ }
|
|
|
// delay the lazyload to let the card the time to update dom
|
|
|
// maybe not the best method
|
|
|
setTimeout(function () {
|
|
@@ -298,6 +322,53 @@ export default {
|
|
|
},
|
|
|
shortUrl(url){
|
|
|
return url.replace(/^http:\/\//, '').replace(/^www\./, '')
|
|
|
+ },
|
|
|
+ saveNote(){
|
|
|
+ console.log("saveNote", this.note);
|
|
|
+ if(this.note_nid){
|
|
|
+ this.updateNote()
|
|
|
+ }else{
|
|
|
+ this.createNote()
|
|
|
+ }
|
|
|
+ },
|
|
|
+ updateNote(){
|
|
|
+ let params = {
|
|
|
+ type: [{target_id:'note'}],
|
|
|
+ field_contenu: this.note
|
|
|
+ }
|
|
|
+ let config = {
|
|
|
+ headers:{
|
|
|
+ "X-CSRF-Token": this.csrf_token
|
|
|
+ }
|
|
|
+ }
|
|
|
+ REST.patch(`/node/${this.note_nid}?_format=json`, params, config)
|
|
|
+ .then(({ data }) => {
|
|
|
+ console.log('updateNote REST data', data)
|
|
|
+ })
|
|
|
+ .catch(error => {
|
|
|
+ console.warn('Issue with updateNote', error)
|
|
|
+ })
|
|
|
+ },
|
|
|
+ createNote(){
|
|
|
+ let params = {
|
|
|
+ type: [{target_id:'note'}],
|
|
|
+ title: [{value:`note`}],
|
|
|
+ field_contenu: this.note,
|
|
|
+ field_target: this.item.id
|
|
|
+ }
|
|
|
+ let config = {
|
|
|
+ headers:{
|
|
|
+ "X-CSRF-Token": this.csrf_token
|
|
|
+ }
|
|
|
+ }
|
|
|
+ REST.post('/node?_format=json', params, config)
|
|
|
+ .then(({ data }) => {
|
|
|
+ console.log('createNote REST data', data)
|
|
|
+ this.note_nid = data.nid[0].value
|
|
|
+ })
|
|
|
+ .catch(error => {
|
|
|
+ console.warn('Issue with createNote', error)
|
|
|
+ })
|
|
|
}
|
|
|
}
|
|
|
}
|