Commit f082bce2 authored by Justin Boyson's avatar Justin Boyson Committed by Phil Hughes

Jdb/refactor inline diff table row

parent 2df757d7
<script> <script>
/* eslint-disable vue/no-v-html */ /* eslint-disable vue/no-v-html */
import { mapActions, mapGetters, mapState } from 'vuex'; import { mapActions, mapGetters, mapState } from 'vuex';
import { GlTooltipDirective } from '@gitlab/ui'; import { GlTooltipDirective, GlIcon } from '@gitlab/ui';
import DiffTableCell from './diff_table_cell.vue';
import { import {
MATCH_LINE_TYPE, MATCH_LINE_TYPE,
NEW_LINE_TYPE, NEW_LINE_TYPE,
...@@ -11,11 +10,19 @@ import { ...@@ -11,11 +10,19 @@ import {
CONTEXT_LINE_CLASS_NAME, CONTEXT_LINE_CLASS_NAME,
LINE_POSITION_LEFT, LINE_POSITION_LEFT,
LINE_POSITION_RIGHT, LINE_POSITION_RIGHT,
LINE_HOVER_CLASS_NAME,
OLD_NO_NEW_LINE_TYPE,
NEW_NO_NEW_LINE_TYPE,
EMPTY_CELL_TYPE,
} from '../constants'; } from '../constants';
import { __ } from '~/locale';
import { getParameterByName, parseBoolean } from '~/lib/utils/common_utils';
import DiffGutterAvatars from './diff_gutter_avatars.vue';
export default { export default {
components: { components: {
DiffTableCell, DiffGutterAvatars,
GlIcon,
}, },
directives: { directives: {
GlTooltip: GlTooltipDirective, GlTooltip: GlTooltipDirective,
...@@ -50,6 +57,7 @@ export default { ...@@ -50,6 +57,7 @@ export default {
}; };
}, },
computed: { computed: {
...mapGetters(['isLoggedIn']),
...mapGetters('diffs', ['fileLineCoverage']), ...mapGetters('diffs', ['fileLineCoverage']),
...mapState({ ...mapState({
isHighlighted(state) { isHighlighted(state) {
...@@ -79,6 +87,70 @@ export default { ...@@ -79,6 +87,70 @@ export default {
coverageState() { coverageState() {
return this.fileLineCoverage(this.filePath, this.line.new_line); return this.fileLineCoverage(this.filePath, this.line.new_line);
}, },
isMetaLine() {
const { type } = this.line;
return (
type === OLD_NO_NEW_LINE_TYPE || type === NEW_NO_NEW_LINE_TYPE || type === EMPTY_CELL_TYPE
);
},
classNameMapCell() {
const { type } = this.line;
return [
type,
{
hll: this.isHighlighted,
[LINE_HOVER_CLASS_NAME]:
this.isLoggedIn && this.isHover && !this.isContextLine && !this.isMetaLine,
},
];
},
addCommentTooltip() {
const brokenSymlinks = this.line.commentsDisabled;
let tooltip = __('Add a comment to this line');
if (brokenSymlinks) {
if (brokenSymlinks.wasSymbolic || brokenSymlinks.isSymbolic) {
tooltip = __(
'Commenting on symbolic links that replace or are replaced by files is currently not supported.',
);
} else if (brokenSymlinks.wasReal || brokenSymlinks.isReal) {
tooltip = __(
'Commenting on files that replace or are replaced by symbolic links is currently not supported.',
);
}
}
return tooltip;
},
shouldRenderCommentButton() {
if (this.isLoggedIn) {
const isDiffHead = parseBoolean(getParameterByName('diff_head'));
return !isDiffHead || gon.features?.mergeRefHeadComments;
}
return false;
},
shouldShowCommentButton() {
return this.isHover && !this.isContextLine && !this.isMetaLine && !this.hasDiscussions;
},
hasDiscussions() {
return this.line.discussions && this.line.discussions.length > 0;
},
lineHref() {
return `#${this.line.line_code || ''}`;
},
lineCode() {
return (
this.line.line_code ||
(this.line.left && this.line.left.line_code) ||
(this.line.right && this.line.right.line_code)
);
},
shouldShowAvatarsOnGutter() {
return this.hasDiscussions;
},
}, },
created() { created() {
this.newLineType = NEW_LINE_TYPE; this.newLineType = NEW_LINE_TYPE;
...@@ -90,12 +162,20 @@ export default { ...@@ -90,12 +162,20 @@ export default {
this.scrollToLineIfNeededInline(this.line); this.scrollToLineIfNeededInline(this.line);
}, },
methods: { methods: {
...mapActions('diffs', ['scrollToLineIfNeededInline']), ...mapActions('diffs', [
'scrollToLineIfNeededInline',
'showCommentForm',
'setHighlightedRow',
'toggleLineDiscussions',
]),
handleMouseMove(e) { handleMouseMove(e) {
// To show the comment icon on the gutter we need to know if we hover the line. // To show the comment icon on the gutter we need to know if we hover the line.
// Current table structure doesn't allow us to do this with CSS in both of the diff view types // Current table structure doesn't allow us to do this with CSS in both of the diff view types
this.isHover = e.type === 'mouseover'; this.isHover = e.type === 'mouseover';
}, },
handleCommentButton() {
this.showCommentForm({ lineCode: this.line.line_code, fileHash: this.fileHash });
},
}, },
}; };
</script> </script>
...@@ -109,25 +189,52 @@ export default { ...@@ -109,25 +189,52 @@ export default {
@mouseover="handleMouseMove" @mouseover="handleMouseMove"
@mouseout="handleMouseMove" @mouseout="handleMouseMove"
> >
<diff-table-cell <td ref="oldTd" class="diff-line-num old_line" :class="classNameMapCell">
:file-hash="fileHash" <span
:line="line" v-if="shouldRenderCommentButton"
:line-type="oldLineType" ref="addNoteTooltip"
:is-bottom="isBottom" v-gl-tooltip
:is-hover="isHover" class="add-diff-note tooltip-wrapper"
:show-comment-button="true" :title="addCommentTooltip"
:is-highlighted="isHighlighted" >
class="diff-line-num old_line" <button
/> v-show="shouldShowCommentButton"
<diff-table-cell ref="addDiffNoteButton"
:file-hash="fileHash" type="button"
:line="line" class="add-diff-note note-button js-add-diff-note-button qa-diff-comment"
:line-type="newLineType" :disabled="line.commentsDisabled"
:is-bottom="isBottom" @click="handleCommentButton"
:is-hover="isHover" >
:is-highlighted="isHighlighted" <gl-icon :size="12" name="comment" />
class="diff-line-num new_line qa-new-diff-line" </button>
</span>
<a
v-if="line.old_line"
ref="lineNumberRefOld"
:data-linenumber="line.old_line"
:href="lineHref"
@click="setHighlightedRow(lineCode)"
>
</a>
<diff-gutter-avatars
v-if="shouldShowAvatarsOnGutter"
:discussions="line.discussions"
:discussions-expanded="line.discussionsExpanded"
@toggleLineDiscussions="
toggleLineDiscussions({ lineCode, fileHash, expanded: !line.discussionsExpanded })
"
/> />
</td>
<td ref="newTd" class="diff-line-num new_line qa-new-diff-line" :class="classNameMapCell">
<a
v-if="line.new_line"
ref="lineNumberRefNew"
:data-linenumber="line.new_line"
:href="lineHref"
@click="setHighlightedRow(lineCode)"
>
</a>
</td>
<td <td
v-gl-tooltip.hover v-gl-tooltip.hover
:title="coverageState.text" :title="coverageState.text"
......
---
title: Jdb/refactor inline diff table row
merge_request: 40906
author:
type: performance
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment