graffiti-demo/components/like-button.js

37 lines
936 B
JavaScript

export default {
props: ['messageID', 'parent'],
methods: {
likeObjects(objects, messageID=this.messageID) {
return objects.filter(o=>
'like' in o &&
'timestamp' in o &&
o.like == messageID &&
typeof o.timestamp == 'number')
},
toggleLike(objects) {
const myLikes = this.likeObjects(objects).mine
if (myLikes.length) {
myLikes.removeMine()
} else {
this.$graffitiUpdate({
like: this.messageID,
timestamp: Date.now(),
_tags: [this.messageID, this.parent]
})
}
}
},
template: `
<graffiti-objects :tags="[messageID]" v-slot="{objects}">
<button @click="toggleLike(objects)" :class="likeObjects(objects).mine.length?'button-primary':''">
👍 {{ likeObjects(objects).length }}
</button>
</graffiti-objects>`
}