renderDiscussionNote()

in app/assets/javascripts/notes.js [463:532]


  renderDiscussionNote(noteEntity, $form) {
    let discussionContainer;
    let row;

    if (!Notes.isNewNote(noteEntity, this.note_ids)) {
      return;
    }
    this.note_ids.push(noteEntity.id);

    const form =
      $form || $(`.js-discussion-note-form[data-discussion-id="${noteEntity.discussion_id}"]`);
    row =
      form.length || !noteEntity.discussion_line_code
        ? form.closest('tr')
        : $(`#${noteEntity.discussion_line_code}`);

    if (noteEntity.on_image) {
      row = form;
    }

    const lineType = this.isParallelView() ? form.find('#line_type').val() : 'old';
    const diffAvatarContainer = row
      .prevAll('.line_holder')
      .first()
      .find(`.js-avatar-container.${lineType}_line`);
    // is this the first note of discussion?
    discussionContainer = $(`.notes[data-discussion-id="${noteEntity.discussion_id}"]`);
    if (!discussionContainer.length) {
      discussionContainer = form.closest('.discussion').find('.notes');
    }
    if (discussionContainer.length === 0) {
      if (noteEntity.diff_discussion_html) {
        const $discussion = $(noteEntity.diff_discussion_html).renderGFM();

        if (!this.isParallelView() || row.hasClass('js-temp-notes-holder') || noteEntity.on_image) {
          // insert the note and the reply button after the temp row
          row.after($discussion);
        } else {
          // Merge new discussion HTML in
          const $notes = $discussion.find(
            `.notes[data-discussion-id="${noteEntity.discussion_id}"]`,
          );
          const contentContainerClass = $notes
            .closest('.notes-content')
            .attr('class')
            .split(' ')
            .join('.');

          row
            .find(`.${contentContainerClass} .content`)
            .append($notes.closest('.content').children());
        }
      } else {
        Notes.animateAppendNote(noteEntity.discussion_html, $('.main-notes-list'));
      }
    } else {
      // append new note to all matching discussions
      Notes.animateAppendNote(noteEntity.html, discussionContainer);
    }

    if (typeof gl.diffNotesCompileComponents !== 'undefined' && noteEntity.discussion_resolvable) {
      gl.diffNotesCompileComponents();

      this.renderDiscussionAvatar(diffAvatarContainer, noteEntity);
    }

    localTimeAgo($('.js-timeago'), false);
    Notes.checkMergeRequestStatus();
    return this.updateNotesCount(1);
  }