2019-12-26 22:10:19 +05:30
< script >
2021-01-03 14:25:43 +05:30
import { GlSafeHtmlDirective as SafeHtml } from '@gitlab/ui' ;
2021-03-11 19:13:27 +05:30
import { escape } from 'lodash' ;
import { mapActions } from 'vuex' ;
2019-12-26 22:10:19 +05:30
import { truncateSha } from '~/lib/utils/text_utility' ;
2021-03-11 19:13:27 +05:30
import { s _ _ , _ _ , sprintf } from '~/locale' ;
2019-12-26 22:10:19 +05:30
2022-06-21 17:19:12 +05:30
import userAvatarLink from '~/vue_shared/components/user_avatar/user_avatar_link.vue' ;
2019-12-26 22:10:19 +05:30
import noteEditedText from './note_edited_text.vue' ;
import noteHeader from './note_header.vue' ;
export default {
name : 'DiffDiscussionHeader' ,
components : {
userAvatarLink ,
noteEditedText ,
noteHeader ,
} ,
2021-01-03 14:25:43 +05:30
directives : {
SafeHtml ,
} ,
2019-12-26 22:10:19 +05:30
props : {
discussion : {
type : Object ,
required : true ,
} ,
} ,
computed : {
notes ( ) {
return this . discussion . notes ;
} ,
firstNote ( ) {
return this . notes [ 0 ] ;
} ,
lastNote ( ) {
return this . notes [ this . notes . length - 1 ] ;
} ,
author ( ) {
return this . firstNote . author ;
} ,
resolvedText ( ) {
return this . discussion . resolved _by _push ? _ _ ( 'Automatically resolved' ) : _ _ ( 'Resolved' ) ;
} ,
lastUpdatedBy ( ) {
return this . notes . length > 1 ? this . lastNote . author : null ;
} ,
lastUpdatedAt ( ) {
return this . notes . length > 1 ? this . lastNote . created _at : null ;
} ,
headerText ( ) {
2020-03-13 15:44:24 +05:30
const linkStart = ` <a href=" ${ escape ( this . discussion . discussion _path ) } "> ` ;
2019-12-26 22:10:19 +05:30
const linkEnd = '</a>' ;
const { commit _id : commitId } = this . discussion ;
let commitDisplay = commitId ;
if ( commitId ) {
commitDisplay = ` <span class="commit-sha"> ${ truncateSha ( commitId ) } </span> ` ;
}
const {
for _commit : isForCommit ,
diff _discussion : isDiffDiscussion ,
active : isActive ,
} = this . discussion ;
let text = s _ _ ( 'MergeRequests|started a thread' ) ;
if ( isForCommit ) {
text = s _ _ (
'MergeRequests|started a thread on commit %{linkStart}%{commitDisplay}%{linkEnd}' ,
) ;
} else if ( isDiffDiscussion && commitId ) {
text = isActive
? s _ _ ( 'MergeRequests|started a thread on commit %{linkStart}%{commitDisplay}%{linkEnd}' )
: s _ _ (
'MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitDisplay}%{linkEnd}' ,
) ;
} else if ( isDiffDiscussion ) {
text = isActive
? s _ _ ( 'MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}' )
: s _ _ (
'MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}' ,
) ;
}
return sprintf ( text , { commitDisplay , linkStart , linkEnd } , false ) ;
} ,
} ,
methods : {
... mapActions ( [ 'toggleDiscussion' ] ) ,
toggleDiscussionHandler ( ) {
this . toggleDiscussion ( { discussionId : this . discussion . id } ) ;
} ,
} ,
} ;
< / script >
< template >
< div class = "discussion-header note-wrapper" >
2022-07-16 23:28:13 +05:30
< div v -once class = "timeline-icon gl-align-self-start gl-flex-shrink-0 gl-flex-shrink gl-mr-4" >
2019-12-26 22:10:19 +05:30
< user-avatar-link
v - if = "author"
: link - href = "author.path"
: img - src = "author.avatar_url"
: img - alt = "author.name"
2022-07-16 23:28:13 +05:30
: img - size = "32"
: img - css - classes = "'gl-mr-0!' /* NOTE: this is needed only while we migrate user-avatar-image to GlAvatar (https://gitlab.com/groups/gitlab-org/-/epics/7731) */"
2019-12-26 22:10:19 +05:30
/ >
< / div >
< div class = "timeline-content w-100" >
< note-header
: author = "author"
: created - at = "firstNote.created_at"
: note - id = "firstNote.id"
: include - toggle = "true"
: expanded = "discussion.expanded"
@ toggleHandler = "toggleDiscussionHandler"
>
2021-01-03 14:25:43 +05:30
< span v -safe -html = " headerText " > < / span >
2019-12-26 22:10:19 +05:30
< / note-header >
< note-edited-text
v - if = "discussion.resolved"
: edited - at = "discussion.resolved_at"
: edited - by = "discussion.resolved_by"
: action - text = "resolvedText"
class - name = "discussion-headline-light js-discussion-headline"
/ >
< note-edited-text
v - else - if = "lastUpdatedAt"
: edited - at = "lastUpdatedAt"
: edited - by = "lastUpdatedBy"
: action - text = "__('Last updated')"
class - name = "discussion-headline-light js-discussion-headline"
/ >
< / div >
< / div >
< / template >