66 lines
1.5 KiB
JavaScript
66 lines
1.5 KiB
JavaScript
/* global CommentsStore */
|
|
|
|
import $ from 'jquery';
|
|
import Vue from 'vue';
|
|
import { __ } from '~/locale';
|
|
|
|
const CommentAndResolveBtn = Vue.extend({
|
|
props: {
|
|
discussionId: {
|
|
type: String,
|
|
required: true,
|
|
},
|
|
},
|
|
data() {
|
|
return {
|
|
textareaIsEmpty: true,
|
|
discussion: {},
|
|
};
|
|
},
|
|
computed: {
|
|
showButton() {
|
|
if (this.discussion) {
|
|
return this.discussion.isResolvable();
|
|
}
|
|
return false;
|
|
},
|
|
isDiscussionResolved() {
|
|
return this.discussion.isResolved();
|
|
},
|
|
buttonText() {
|
|
if (this.textareaIsEmpty) {
|
|
return this.isDiscussionResolved ? __('Unresolve thread') : __('Resolve thread');
|
|
}
|
|
return this.isDiscussionResolved
|
|
? __('Comment & unresolve thread')
|
|
: __('Comment & resolve thread');
|
|
},
|
|
},
|
|
created() {
|
|
if (this.discussionId) {
|
|
this.discussion = CommentsStore.state[this.discussionId];
|
|
}
|
|
},
|
|
mounted() {
|
|
if (!this.discussionId) return;
|
|
|
|
const $textarea = $(
|
|
`.js-discussion-note-form[data-discussion-id=${this.discussionId}] .note-textarea`,
|
|
);
|
|
this.textareaIsEmpty = $textarea.val() === '';
|
|
|
|
$textarea.on('input.comment-and-resolve-btn', () => {
|
|
this.textareaIsEmpty = $textarea.val() === '';
|
|
});
|
|
},
|
|
destroyed() {
|
|
if (!this.discussionId) return;
|
|
|
|
$(`.js-discussion-note-form[data-discussion-id=${this.discussionId}] .note-textarea`).off(
|
|
'input.comment-and-resolve-btn',
|
|
);
|
|
},
|
|
});
|
|
|
|
Vue.component('comment-and-resolve-btn', CommentAndResolveBtn);
|