diff options
Diffstat (limited to 'app/assets/javascripts/notes/components')
5 files changed, 64 insertions, 81 deletions
diff --git a/app/assets/javascripts/notes/components/diff_discussion_header.vue b/app/assets/javascripts/notes/components/diff_discussion_header.vue index 0e213028c7c..3cf47f42e0c 100644 --- a/app/assets/javascripts/notes/components/diff_discussion_header.vue +++ b/app/assets/javascripts/notes/components/diff_discussion_header.vue @@ -1,19 +1,17 @@ <script> -import { GlSafeHtmlDirective as SafeHtml } from '@gitlab/ui'; +import { GlSafeHtmlDirective as SafeHtml, GlAvatar, GlAvatarLink } from '@gitlab/ui'; import { escape } from 'lodash'; import { mapActions } from 'vuex'; - import { truncateSha } from '~/lib/utils/text_utility'; import { s__, __, sprintf } from '~/locale'; - -import userAvatarLink from '~/vue_shared/components/user_avatar/user_avatar_link.vue'; import noteEditedText from './note_edited_text.vue'; import noteHeader from './note_header.vue'; export default { name: 'DiffDiscussionHeader', components: { - userAvatarLink, + GlAvatar, + GlAvatarLink, noteEditedText, noteHeader, }, @@ -86,6 +84,9 @@ export default { return sprintf(text, { commitDisplay, linkStart, linkEnd }, false); }, + adaptiveAvatarSize() { + return { default: 24, md: 32 }; + }, }, methods: { ...mapActions(['toggleDiscussion']), @@ -100,16 +101,11 @@ export default { <div class="discussion-header gl-display-flex gl-align-items-center gl-p-5"> <div v-once - class="timeline-icon gl-align-self-start gl-flex-shrink-0 gl-flex-shrink gl-ml-3 gl-mr-4" + class="timeline-icon gl-align-self-start gl-flex-shrink-0 gl-flex-shrink gl-mx-3 gl-md-ml-2 gl-md-mr-5" > - <user-avatar-link - v-if="author" - :link-href="author.path" - :img-src="author.avatar_url" - :img-alt="author.name" - :img-size="24" - :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) */" - /> + <gl-avatar-link v-if="author" :href="author.path"> + <gl-avatar :src="author.avatar_url" :alt="author.name" :size="adaptiveAvatarSize" /> + </gl-avatar-link> </div> <div class="timeline-content w-100"> <note-header @@ -127,14 +123,14 @@ export default { :edited-at="discussion.resolved_at" :edited-by="discussion.resolved_by" :action-text="resolvedText" - class-name="discussion-headline-light js-discussion-headline" + class-name="discussion-headline-light js-discussion-headline gl-pl-2" /> <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" + class-name="discussion-headline-light js-discussion-headline gl-pl-2" /> </div> </div> diff --git a/app/assets/javascripts/notes/components/note_actions.vue b/app/assets/javascripts/notes/components/note_actions.vue index 10e3f57a56d..c7f293a219a 100644 --- a/app/assets/javascripts/notes/components/note_actions.vue +++ b/app/assets/javascripts/notes/components/note_actions.vue @@ -170,7 +170,7 @@ export default { return this.targetType === 'issue'; }, canAssign() { - return this.getNoteableData.current_user?.can_update && this.isIssue; + return this.getNoteableData.current_user?.can_set_issue_metadata && this.isIssue; }, displayAuthorBadgeText() { return sprintf(__('This user is the author of this %{noteable}.'), { diff --git a/app/assets/javascripts/notes/components/note_body.vue b/app/assets/javascripts/notes/components/note_body.vue index cc74c2ee605..f1c41eea428 100644 --- a/app/assets/javascripts/notes/components/note_body.vue +++ b/app/assets/javascripts/notes/components/note_body.vue @@ -8,7 +8,6 @@ import { __ } from '~/locale'; import '~/behaviors/markdown/render_gfm'; import Suggestions from '~/vue_shared/components/markdown/suggestions.vue'; import autosave from '../mixins/autosave'; -import { INTERNAL_NOTE_CLASSES } from '../constants'; import noteAttachment from './note_attachment.vue'; import noteAwardsList from './note_awards_list.vue'; import noteEditedText from './note_edited_text.vue'; @@ -55,11 +54,6 @@ export default { required: false, default: '', }, - isInternalNote: { - type: Boolean, - required: false, - default: false, - }, }, computed: { ...mapGetters(['getDiscussion', 'suggestionsCount', 'getSuggestionsFilePaths']), @@ -101,12 +95,6 @@ export default { return escape(suggestion); }, - internalNoteContainerClasses() { - if (this.isInternalNote && !this.isEditing) { - return INTERNAL_NOTE_CLASSES; - } - return ''; - }, }, mounted() { this.renderGFM(); @@ -179,54 +167,52 @@ export default { }" class="note-body" > - <div :class="internalNoteContainerClasses" data-testid="note-internal-container"> - <suggestions - v-if="hasSuggestion && !isEditing" - :suggestions="note.suggestions" - :suggestions-count="suggestionsCount" - :batch-suggestions-info="batchSuggestionsInfo" - :note-html="note.note_html" - :line-type="lineType" - :help-page-path="helpPagePath" - :default-commit-message="commitMessage" - :failed-to-load-metadata="failedToLoadMetadata" - @apply="applySuggestion" - @applyBatch="applySuggestionBatch" - @addToBatch="addSuggestionToBatch" - @removeFromBatch="removeSuggestionFromBatch" - /> - <div v-else v-safe-html:[$options.safeHtmlConfig]="note.note_html" class="note-text md"></div> - <note-form - v-if="isEditing" - ref="noteForm" - :note-body="noteBody" - :note-id="note.id" - :line="line" - :note="note" - :save-button-title="saveButtonTitle" - :help-page-path="helpPagePath" - :discussion="discussion" - :resolve-discussion="note.resolve_discussion" - @handleFormUpdate="handleFormUpdate" - @cancelForm="formCancelHandler" - /> - <!-- eslint-disable vue/no-mutating-props --> - <textarea - v-if="canEdit" - v-model="note.note" - :data-update-url="note.path" - class="hidden js-task-list-field" - dir="auto" - ></textarea> - <!-- eslint-enable vue/no-mutating-props --> - <note-edited-text - v-if="note.last_edited_at" - :edited-at="note.last_edited_at" - :edited-by="note.last_edited_by" - action-text="Edited" - class="note_edited_ago" - /> - </div> + <suggestions + v-if="hasSuggestion && !isEditing" + :suggestions="note.suggestions" + :suggestions-count="suggestionsCount" + :batch-suggestions-info="batchSuggestionsInfo" + :note-html="note.note_html" + :line-type="lineType" + :help-page-path="helpPagePath" + :default-commit-message="commitMessage" + :failed-to-load-metadata="failedToLoadMetadata" + @apply="applySuggestion" + @applyBatch="applySuggestionBatch" + @addToBatch="addSuggestionToBatch" + @removeFromBatch="removeSuggestionFromBatch" + /> + <div v-else v-safe-html:[$options.safeHtmlConfig]="note.note_html" class="note-text md"></div> + <note-form + v-if="isEditing" + ref="noteForm" + :note-body="noteBody" + :note-id="note.id" + :line="line" + :note="note" + :save-button-title="saveButtonTitle" + :help-page-path="helpPagePath" + :discussion="discussion" + :resolve-discussion="note.resolve_discussion" + @handleFormUpdate="handleFormUpdate" + @cancelForm="formCancelHandler" + /> + <!-- eslint-disable vue/no-mutating-props --> + <textarea + v-if="canEdit" + v-model="note.note" + :data-update-url="note.path" + class="hidden js-task-list-field" + dir="auto" + ></textarea> + <!-- eslint-enable vue/no-mutating-props --> + <note-edited-text + v-if="note.last_edited_at" + :edited-at="note.last_edited_at" + :edited-by="note.last_edited_by" + action-text="Edited" + class="note_edited_ago" + /> <note-awards-list v-if="note.award_emoji && note.award_emoji.length" :note-id="note.id" diff --git a/app/assets/javascripts/notes/components/note_form.vue b/app/assets/javascripts/notes/components/note_form.vue index a4cd20e6db8..30579a8eb0d 100644 --- a/app/assets/javascripts/notes/components/note_form.vue +++ b/app/assets/javascripts/notes/components/note_form.vue @@ -251,8 +251,10 @@ export default { } }, cancelHandler(shouldConfirm = false) { - // Sends information about confirm message and if the textarea has changed - this.$emit('cancelForm', shouldConfirm, this.noteBody !== this.updatedNoteBody); + // check if any dropdowns are active before sending the cancelation event + if (!this.$refs.textarea.classList.contains('at-who-active')) { + this.$emit('cancelForm', shouldConfirm, this.noteBody !== this.updatedNoteBody); + } }, onInput() { if (this.isSubmittingWithKeydown) { diff --git a/app/assets/javascripts/notes/components/noteable_note.vue b/app/assets/javascripts/notes/components/noteable_note.vue index 095ab5ddb0f..875cfff74fe 100644 --- a/app/assets/javascripts/notes/components/noteable_note.vue +++ b/app/assets/javascripts/notes/components/noteable_note.vue @@ -406,7 +406,7 @@ export default { <template> <timeline-entry-item :id="noteAnchorId" - :class="classNameBindings" + :class="{ ...classNameBindings, 'internal-note': note.confidential }" :data-award-url="note.toggle_award_path" :data-note-id="note.id" class="note note-wrapper" @@ -506,7 +506,6 @@ export default { ref="noteBody" :note="note" :can-edit="note.current_user.can_edit" - :is-internal-note="note.confidential" :line="line" :file="diffFile" :is-editing="isEditing" |