2019-07-31 22:56:46 +05:30
|
|
|
<script>
|
|
|
|
import ReplyPlaceholder from './discussion_reply_placeholder.vue';
|
|
|
|
import ResolveDiscussionButton from './discussion_resolve_button.vue';
|
|
|
|
import ResolveWithIssueButton from './discussion_resolve_with_issue_button.vue';
|
|
|
|
import JumpToNextDiscussionButton from './discussion_jump_to_next_button.vue';
|
2020-10-24 23:57:45 +05:30
|
|
|
import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
|
2019-07-31 22:56:46 +05:30
|
|
|
|
|
|
|
export default {
|
|
|
|
name: 'DiscussionActions',
|
|
|
|
components: {
|
|
|
|
ReplyPlaceholder,
|
|
|
|
ResolveDiscussionButton,
|
|
|
|
ResolveWithIssueButton,
|
|
|
|
JumpToNextDiscussionButton,
|
|
|
|
},
|
2020-10-24 23:57:45 +05:30
|
|
|
mixins: [glFeatureFlagsMixin()],
|
2019-07-31 22:56:46 +05:30
|
|
|
props: {
|
|
|
|
discussion: {
|
|
|
|
type: Object,
|
|
|
|
required: true,
|
|
|
|
},
|
|
|
|
isResolving: {
|
|
|
|
type: Boolean,
|
|
|
|
required: true,
|
|
|
|
},
|
|
|
|
resolveButtonTitle: {
|
|
|
|
type: String,
|
|
|
|
required: true,
|
|
|
|
},
|
|
|
|
resolveWithIssuePath: {
|
|
|
|
type: String,
|
|
|
|
required: false,
|
|
|
|
default: '',
|
|
|
|
},
|
|
|
|
shouldShowJumpToNextDiscussion: {
|
|
|
|
type: Boolean,
|
|
|
|
required: true,
|
|
|
|
},
|
|
|
|
},
|
2019-12-04 20:38:33 +05:30
|
|
|
computed: {
|
2020-10-24 23:57:45 +05:30
|
|
|
hideJumpToNextUnresolvedInThreads() {
|
|
|
|
return this.glFeatures.hideJumpToNextUnresolvedInThreads;
|
|
|
|
},
|
2019-12-04 20:38:33 +05:30
|
|
|
resolvableNotes() {
|
|
|
|
return this.discussion.notes.filter(x => x.resolvable);
|
|
|
|
},
|
|
|
|
userCanResolveDiscussion() {
|
2021-01-29 00:20:46 +05:30
|
|
|
return this.resolvableNotes.every(note => note.current_user?.can_resolve_discussion);
|
2019-12-04 20:38:33 +05:30
|
|
|
},
|
|
|
|
},
|
2019-07-31 22:56:46 +05:30
|
|
|
};
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<template>
|
2019-10-12 21:52:04 +05:30
|
|
|
<div class="discussion-with-resolve-btn clearfix">
|
2019-09-30 21:07:59 +05:30
|
|
|
<reply-placeholder
|
2019-10-12 21:52:04 +05:30
|
|
|
data-qa-selector="discussion_reply_tab"
|
2019-09-30 21:07:59 +05:30
|
|
|
:button-text="s__('MergeRequests|Reply...')"
|
|
|
|
@onClick="$emit('showReplyForm')"
|
|
|
|
/>
|
2019-10-12 21:52:04 +05:30
|
|
|
|
2019-12-04 20:38:33 +05:30
|
|
|
<div v-if="userCanResolveDiscussion" class="btn-group discussion-actions" role="group">
|
2019-10-12 21:52:04 +05:30
|
|
|
<div class="btn-group">
|
|
|
|
<resolve-discussion-button
|
|
|
|
v-if="discussion.resolvable"
|
2019-12-21 20:55:43 +05:30
|
|
|
data-qa-selector="resolve_discussion_button"
|
2019-10-12 21:52:04 +05:30
|
|
|
:is-resolving="isResolving"
|
|
|
|
:button-title="resolveButtonTitle"
|
|
|
|
@onClick="$emit('resolve')"
|
|
|
|
/>
|
|
|
|
</div>
|
2019-09-30 21:07:59 +05:30
|
|
|
<resolve-with-issue-button
|
|
|
|
v-if="discussion.resolvable && resolveWithIssuePath"
|
|
|
|
:url="resolveWithIssuePath"
|
|
|
|
/>
|
|
|
|
</div>
|
|
|
|
<div
|
2020-10-24 23:57:45 +05:30
|
|
|
v-if="
|
|
|
|
!hideJumpToNextUnresolvedInThreads &&
|
|
|
|
discussion.resolvable &&
|
|
|
|
shouldShowJumpToNextDiscussion
|
|
|
|
"
|
2019-09-30 21:07:59 +05:30
|
|
|
class="btn-group discussion-actions ml-sm-2"
|
|
|
|
>
|
2020-04-08 14:13:33 +05:30
|
|
|
<jump-to-next-discussion-button :from-discussion-id="discussion.id" />
|
2019-07-31 22:56:46 +05:30
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</template>
|