import { EventBus, Events } from './EventBus' import { UnitOfWorkTracker } from '../mixins/UnitOfWorkTracker' import { thenVoteComment } from '../../api/comments' const TEMPLATE = `
`; Vue.component('comment-rating', { template: TEMPLATE, mixins: [UnitOfWorkTracker], props: {comment: Object}, computed: { positiveRating() { return this.comment.properties.rating_positive || 0; }, negativeRating() { return this.comment.properties.rating_negative || 0; }, rating() { return this.positiveRating - this.negativeRating; }, currentUserRatedPositive() { return this.comment.current_user_rating === true; }, currentUserHasRated() { return typeof this.comment.current_user_rating === "boolean" ; }, canVote() { return this.comment.user.id !== pillar.utils.getCurrentUser().user_id; } }, methods: { upVote() { let vote = this.comment.current_user_rating === true ? 0 : 1; // revoke if set this.unitOfWork( thenVoteComment(this.comment.parent, this.comment.id, vote) .then((updatedComment) => { EventBus.$emit(Events.UPDATED_COMMENT, updatedComment); }) .fail((err) => {toastr.error(pillar.utils.messageFromError(err), 'Failed to vote on comment')}) ); } } });