diff options
Diffstat (limited to 'app/assets/javascripts/sidebar/components/assignees/assignee_avatar_link.vue')
-rw-r--r-- | app/assets/javascripts/sidebar/components/assignees/assignee_avatar_link.vue | 54 |
1 files changed, 45 insertions, 9 deletions
diff --git a/app/assets/javascripts/sidebar/components/assignees/assignee_avatar_link.vue b/app/assets/javascripts/sidebar/components/assignees/assignee_avatar_link.vue index fbbe2e341a7..d0a65b48522 100644 --- a/app/assets/javascripts/sidebar/components/assignees/assignee_avatar_link.vue +++ b/app/assets/javascripts/sidebar/components/assignees/assignee_avatar_link.vue @@ -1,8 +1,46 @@ <script> import { GlTooltipDirective, GlLink } from '@gitlab/ui'; import { __, sprintf } from '~/locale'; +import { isUserBusy } from '~/set_status_modal/utils'; import AssigneeAvatar from './assignee_avatar.vue'; +const I18N = { + BUSY: __('Busy'), + CANNOT_MERGE: __('Cannot merge'), + LC_CANNOT_MERGE: __('cannot merge'), +}; + +const paranthesize = (str) => `(${str})`; + +const generateAssigneeTooltip = ({ + name, + availability, + cannotMerge = true, + tooltipHasName = false, +}) => { + if (!tooltipHasName) { + return cannotMerge ? I18N.CANNOT_MERGE : ''; + } + + const statusInformation = []; + if (availability && isUserBusy(availability)) { + statusInformation.push(I18N.BUSY); + } + + if (cannotMerge) { + statusInformation.push(I18N.LC_CANNOT_MERGE); + } + + if (tooltipHasName && statusInformation.length) { + return sprintf(__('%{name} %{status}'), { + name, + status: statusInformation.map(paranthesize).join(' '), + }); + } + + return name; +}; + export default { components: { AssigneeAvatar, @@ -37,15 +75,13 @@ export default { return this.issuableType === 'merge_request' && !this.user.can_merge; }, tooltipTitle() { - if (this.cannotMerge && this.tooltipHasName) { - return sprintf(__('%{userName} (cannot merge)'), { userName: this.user.name }); - } else if (this.cannotMerge) { - return __('Cannot merge'); - } else if (this.tooltipHasName) { - return this.user.name; - } - - return ''; + const { name = '', availability = '' } = this.user; + return generateAssigneeTooltip({ + name, + availability, + cannotMerge: this.cannotMerge, + tooltipHasName: this.tooltipHasName, + }); }, tooltipOption() { return { |