2018-11-08 19:23:39 +05:30
|
|
|
<script>
|
2018-12-13 13:39:08 +05:30
|
|
|
import { mapActions, mapGetters, mapState } from 'vuex';
|
2018-11-08 19:23:39 +05:30
|
|
|
import DiffViewer from '~/vue_shared/components/diff_viewer/diff_viewer.vue';
|
2019-02-15 15:39:39 +05:30
|
|
|
import EmptyFileViewer from '~/vue_shared/components/diff_viewer/viewers/empty_file.vue';
|
2018-11-08 19:23:39 +05:30
|
|
|
import InlineDiffView from './inline_diff_view.vue';
|
|
|
|
import ParallelDiffView from './parallel_diff_view.vue';
|
2018-12-13 13:39:08 +05:30
|
|
|
import NoteForm from '../../notes/components/note_form.vue';
|
|
|
|
import ImageDiffOverlay from './image_diff_overlay.vue';
|
|
|
|
import DiffDiscussions from './diff_discussions.vue';
|
|
|
|
import { IMAGE_DIFF_POSITION_TYPE } from '../constants';
|
|
|
|
import { getDiffMode } from '../store/utils';
|
2018-11-08 19:23:39 +05:30
|
|
|
|
|
|
|
export default {
|
|
|
|
components: {
|
|
|
|
InlineDiffView,
|
|
|
|
ParallelDiffView,
|
|
|
|
DiffViewer,
|
2018-12-13 13:39:08 +05:30
|
|
|
NoteForm,
|
|
|
|
DiffDiscussions,
|
|
|
|
ImageDiffOverlay,
|
2019-02-15 15:39:39 +05:30
|
|
|
EmptyFileViewer,
|
2018-11-08 19:23:39 +05:30
|
|
|
},
|
|
|
|
props: {
|
|
|
|
diffFile: {
|
|
|
|
type: Object,
|
|
|
|
required: true,
|
|
|
|
},
|
2019-02-15 15:39:39 +05:30
|
|
|
helpPagePath: {
|
|
|
|
type: String,
|
|
|
|
required: false,
|
|
|
|
default: '',
|
|
|
|
},
|
2018-11-08 19:23:39 +05:30
|
|
|
},
|
|
|
|
computed: {
|
|
|
|
...mapState({
|
|
|
|
projectPath: state => state.diffs.projectPath,
|
|
|
|
endpoint: state => state.diffs.endpoint,
|
|
|
|
}),
|
|
|
|
...mapGetters('diffs', ['isInlineView', 'isParallelView']),
|
2018-12-13 13:39:08 +05:30
|
|
|
...mapGetters('diffs', ['getCommentFormForDiffFile']),
|
|
|
|
...mapGetters(['getNoteableData', 'noteableType']),
|
2018-11-08 19:23:39 +05:30
|
|
|
diffMode() {
|
2018-12-13 13:39:08 +05:30
|
|
|
return getDiffMode(this.diffFile);
|
2018-11-08 19:23:39 +05:30
|
|
|
},
|
|
|
|
isTextFile() {
|
2018-12-05 23:21:45 +05:30
|
|
|
return this.diffFile.viewer.name === 'text';
|
2018-11-08 19:23:39 +05:30
|
|
|
},
|
2019-02-15 15:39:39 +05:30
|
|
|
errorMessage() {
|
|
|
|
return this.diffFile.viewer.error;
|
|
|
|
},
|
2018-12-13 13:39:08 +05:30
|
|
|
diffFileCommentForm() {
|
2019-02-15 15:39:39 +05:30
|
|
|
return this.getCommentFormForDiffFile(this.diffFile.file_hash);
|
2018-12-13 13:39:08 +05:30
|
|
|
},
|
|
|
|
showNotesContainer() {
|
|
|
|
return this.diffFile.discussions.length || this.diffFileCommentForm;
|
|
|
|
},
|
|
|
|
},
|
|
|
|
methods: {
|
|
|
|
...mapActions('diffs', ['saveDiffDiscussion', 'closeDiffFileCommentForm']),
|
|
|
|
handleSaveNote(note) {
|
|
|
|
this.saveDiffDiscussion({
|
|
|
|
note,
|
|
|
|
formData: {
|
|
|
|
noteableData: this.getNoteableData,
|
|
|
|
noteableType: this.noteableType,
|
|
|
|
diffFile: this.diffFile,
|
|
|
|
positionType: IMAGE_DIFF_POSITION_TYPE,
|
|
|
|
x: this.diffFileCommentForm.x,
|
|
|
|
y: this.diffFileCommentForm.y,
|
|
|
|
width: this.diffFileCommentForm.width,
|
|
|
|
height: this.diffFileCommentForm.height,
|
|
|
|
},
|
|
|
|
});
|
|
|
|
},
|
2018-11-08 19:23:39 +05:30
|
|
|
},
|
|
|
|
};
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<template>
|
|
|
|
<div class="diff-content">
|
2019-02-15 15:39:39 +05:30
|
|
|
<div v-if="!errorMessage" class="diff-viewer">
|
2018-11-08 19:23:39 +05:30
|
|
|
<template v-if="isTextFile">
|
2019-02-15 15:39:39 +05:30
|
|
|
<empty-file-viewer v-if="diffFile.empty" />
|
2018-11-08 19:23:39 +05:30
|
|
|
<inline-diff-view
|
2019-02-15 15:39:39 +05:30
|
|
|
v-else-if="isInlineView"
|
2018-11-08 19:23:39 +05:30
|
|
|
:diff-file="diffFile"
|
2019-02-15 15:39:39 +05:30
|
|
|
:diff-lines="diffFile.highlighted_diff_lines || []"
|
|
|
|
:help-page-path="helpPagePath"
|
2018-11-08 19:23:39 +05:30
|
|
|
/>
|
|
|
|
<parallel-diff-view
|
2019-02-15 15:39:39 +05:30
|
|
|
v-else-if="isParallelView"
|
2018-11-08 19:23:39 +05:30
|
|
|
:diff-file="diffFile"
|
2019-02-15 15:39:39 +05:30
|
|
|
:diff-lines="diffFile.parallel_diff_lines || []"
|
|
|
|
:help-page-path="helpPagePath"
|
2018-11-08 19:23:39 +05:30
|
|
|
/>
|
|
|
|
</template>
|
|
|
|
<diff-viewer
|
|
|
|
v-else
|
|
|
|
:diff-mode="diffMode"
|
2019-02-15 15:39:39 +05:30
|
|
|
:new-path="diffFile.new_path"
|
|
|
|
:new-sha="diffFile.diff_refs.head_sha"
|
|
|
|
:old-path="diffFile.old_path"
|
|
|
|
:old-sha="diffFile.diff_refs.base_sha"
|
|
|
|
:file-hash="diffFile.file_hash"
|
2018-12-13 13:39:08 +05:30
|
|
|
:project-path="projectPath"
|
2019-02-15 15:39:39 +05:30
|
|
|
:a-mode="diffFile.a_mode"
|
|
|
|
:b-mode="diffFile.b_mode"
|
2018-12-13 13:39:08 +05:30
|
|
|
>
|
|
|
|
<image-diff-overlay
|
|
|
|
slot="image-overlay"
|
|
|
|
:discussions="diffFile.discussions"
|
2019-02-15 15:39:39 +05:30
|
|
|
:file-hash="diffFile.file_hash"
|
2018-12-13 13:39:08 +05:30
|
|
|
:can-comment="getNoteableData.current_user.can_create_note"
|
|
|
|
/>
|
2019-02-15 15:39:39 +05:30
|
|
|
<div v-if="showNotesContainer" class="note-container">
|
2018-12-13 13:39:08 +05:30
|
|
|
<diff-discussions
|
|
|
|
v-if="diffFile.discussions.length"
|
|
|
|
class="diff-file-discussions"
|
|
|
|
:discussions="diffFile.discussions"
|
|
|
|
:should-collapse-discussions="true"
|
|
|
|
:render-avatar-badge="true"
|
|
|
|
/>
|
|
|
|
<note-form
|
|
|
|
v-if="diffFileCommentForm"
|
|
|
|
ref="noteForm"
|
|
|
|
:is-editing="false"
|
|
|
|
:save-button-title="__('Comment')"
|
|
|
|
class="diff-comment-form new-note discussion-form discussion-form-container"
|
|
|
|
@handleFormUpdate="handleSaveNote"
|
2019-03-02 22:35:43 +05:30
|
|
|
@cancelForm="closeDiffFileCommentForm(diffFile.file_hash)"
|
2019-02-15 15:39:39 +05:30
|
|
|
/>
|
2018-12-13 13:39:08 +05:30
|
|
|
</div>
|
|
|
|
</diff-viewer>
|
2018-11-08 19:23:39 +05:30
|
|
|
</div>
|
2019-02-15 15:39:39 +05:30
|
|
|
<div v-else class="diff-viewer">
|
|
|
|
<div class="nothing-here-block" v-html="errorMessage"></div>
|
|
|
|
</div>
|
2018-11-08 19:23:39 +05:30
|
|
|
</div>
|
|
|
|
</template>
|