summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/notes/mixins/diff_line_note_form.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/notes/mixins/diff_line_note_form.js')
-rw-r--r--app/assets/javascripts/notes/mixins/diff_line_note_form.js98
1 files changed, 94 insertions, 4 deletions
diff --git a/app/assets/javascripts/notes/mixins/diff_line_note_form.js b/app/assets/javascripts/notes/mixins/diff_line_note_form.js
index 188556e8921..5930b5f3321 100644
--- a/app/assets/javascripts/notes/mixins/diff_line_note_form.js
+++ b/app/assets/javascripts/notes/mixins/diff_line_note_form.js
@@ -1,10 +1,100 @@
+import { mapActions, mapGetters, mapState } from 'vuex';
+import { getDraftReplyFormData, getDraftFormData } from '~/batch_comments/utils';
+import { TEXT_DIFF_POSITION_TYPE, IMAGE_DIFF_POSITION_TYPE } from '~/diffs/constants';
+import createFlash from '~/flash';
+import { s__ } from '~/locale';
+import { clearDraft } from '~/lib/utils/autosave';
+
export default {
computed: {
- draftForDiscussion: () => () => ({}),
+ ...mapState({
+ noteableData: state => state.notes.noteableData,
+ notesData: state => state.notes.notesData,
+ withBatchComments: state => state.batchComments?.withBatchComments,
+ }),
+ ...mapGetters('diffs', ['getDiffFileByHash']),
+ ...mapGetters('batchComments', ['shouldRenderDraftRowInDiscussion', 'draftForDiscussion']),
+ ...mapState('diffs', ['commit']),
},
methods: {
- showDraft: () => false,
- addReplyToReview: () => {},
- addToReview: () => {},
+ ...mapActions('diffs', ['cancelCommentForm']),
+ ...mapActions('batchComments', ['addDraftToReview', 'saveDraft', 'insertDraftIntoDrafts']),
+ addReplyToReview(noteText, isResolving) {
+ const postData = getDraftReplyFormData({
+ in_reply_to_discussion_id: this.discussion.reply_id,
+ target_type: this.getNoteableData.targetType,
+ notesData: this.notesData,
+ draft_note: {
+ note: noteText,
+ resolve_discussion: isResolving,
+ },
+ });
+
+ if (this.discussion.for_commit) {
+ postData.note_project_id = this.discussion.project_id;
+ }
+
+ this.isReplying = false;
+
+ this.saveDraft(postData)
+ .then(() => {
+ this.handleClearForm(this.discussion.line_code);
+ })
+ .catch(() => {
+ createFlash(s__('MergeRequests|An error occurred while saving the draft comment.'));
+ });
+ },
+ addToReview(note) {
+ const positionType = this.diffFileCommentForm
+ ? IMAGE_DIFF_POSITION_TYPE
+ : TEXT_DIFF_POSITION_TYPE;
+ const selectedDiffFile = this.getDiffFileByHash(this.diffFileHash);
+ const postData = getDraftFormData({
+ note,
+ notesData: this.notesData,
+ noteableData: this.noteableData,
+ noteableType: this.noteableType,
+ noteTargetLine: this.noteTargetLine,
+ diffViewType: this.diffViewType,
+ diffFile: selectedDiffFile,
+ linePosition: this.position,
+ positionType,
+ ...this.diffFileCommentForm,
+ });
+
+ const diffFileHeadSha = this.commit && this?.diffFile?.diff_refs?.head_sha;
+
+ postData.data.note.commit_id = diffFileHeadSha || null;
+
+ return this.saveDraft(postData)
+ .then(() => {
+ if (positionType === IMAGE_DIFF_POSITION_TYPE) {
+ this.closeDiffFileCommentForm(this.diffFileHash);
+ } else {
+ this.handleClearForm(this.line.line_code);
+ }
+ })
+ .catch(() => {
+ createFlash(s__('MergeRequests|An error occurred while saving the draft comment.'));
+ });
+ },
+ handleClearForm(lineCode) {
+ this.cancelCommentForm({
+ lineCode,
+ fileHash: this.diffFileHash,
+ });
+ this.$nextTick(() => {
+ if (this.autosaveKey) {
+ clearDraft(this.autosaveKey);
+ } else {
+ // TODO: remove the following after replacing the autosave mixin
+ // https://gitlab.com/gitlab-org/gitlab-foss/issues/60587
+ this.resetAutoSave();
+ }
+ });
+ },
+ showDraft(replyId) {
+ return this.withBatchComments && this.shouldRenderDraftRowInDiscussion(replyId);
+ },
},
};