diff --git a/app/finders/conversation_finder.rb b/app/finders/conversation_finder.rb index 74bf903f5..9d53ec97e 100644 --- a/app/finders/conversation_finder.rb +++ b/app/finders/conversation_finder.rb @@ -142,7 +142,7 @@ class ConversationFinder conversation_ids = current_account.mentions.where(user: current_user).pluck(:conversation_id) @conversations = @conversations.where(id: conversation_ids) when 'participating' - @conversations = current_user.participating_conversations.where(account_id: current_account.id) + @conversations = @conversations.where(id: current_user.participating_conversations.where(account_id: current_account.id).select(:id)) when 'unattended' @conversations = @conversations.unattended end diff --git a/app/javascript/dashboard/components-next/sidebar/ChannelLeaf.vue b/app/javascript/dashboard/components-next/sidebar/ChannelLeaf.vue index a995cf510..234737008 100644 --- a/app/javascript/dashboard/components-next/sidebar/ChannelLeaf.vue +++ b/app/javascript/dashboard/components-next/sidebar/ChannelLeaf.vue @@ -22,6 +22,10 @@ const props = defineProps({ type: [Number, String], default: 0, }, + badgeTooltip: { + type: String, + default: '', + }, }); const reauthorizationRequired = computed(() => { @@ -34,7 +38,7 @@ const reauthorizationRequired = computed(() => {
{{ label }}
- +
}) ); +const unreadBadgeTooltips = computed(() => ({ + ALL: t('SIDEBAR.UNREAD_COUNT_TOOLTIP.ALL'), + INBOX: t('SIDEBAR.UNREAD_COUNT_TOOLTIP.INBOX'), + LABEL: t('SIDEBAR.UNREAD_COUNT_TOOLTIP.LABEL'), + TEAM: t('SIDEBAR.UNREAD_COUNT_TOOLTIP.TEAM'), + FOLDER: t('SIDEBAR.UNREAD_COUNT_TOOLTIP.FOLDER'), + MENTIONS: t('SIDEBAR.UNREAD_COUNT_TOOLTIP.MENTIONS'), + PARTICIPATING: t('SIDEBAR.UNREAD_COUNT_TOOLTIP.PARTICIPATING'), + UNATTENDED: t('SIDEBAR.UNREAD_COUNT_TOOLTIP.UNATTENDED'), +})); + +const unreadBadgeTooltip = type => unreadBadgeTooltips.value[type]; + const closeMobileSidebar = () => { if (!props.isMobileSidebarOpen) return; emit('closeMobileSidebar'); @@ -335,12 +360,15 @@ const menuItems = computed(() => { label: t('SIDEBAR.ALL_CONVERSATIONS'), icon: 'i-lucide-inbox', badgeCount: allUnreadCount.value, + badgeTooltip: unreadBadgeTooltip('ALL'), activeOn: ['inbox_conversation'], to: accountScopedRoute('home'), }, { name: 'Mentions', label: t('SIDEBAR.MENTIONED_CONVERSATIONS'), + badgeCount: mentionsUnreadCount.value, + badgeTooltip: unreadBadgeTooltip('MENTIONS'), icon: 'i-lucide-at-sign', activeOn: ['conversation_through_mentions'], to: accountScopedRoute('conversation_mentions'), @@ -348,6 +376,8 @@ const menuItems = computed(() => { { name: 'Participating', label: t('SIDEBAR.PARTICIPATING_CONVERSATIONS'), + badgeCount: participatingUnreadCount.value, + badgeTooltip: unreadBadgeTooltip('PARTICIPATING'), icon: 'i-lucide-user-round-check', activeOn: ['conversation_through_participating'], to: accountScopedRoute('conversation_participating'), @@ -355,6 +385,8 @@ const menuItems = computed(() => { { name: 'Unattended', activeOn: ['conversation_through_unattended'], + badgeCount: unattendedUnreadCount.value, + badgeTooltip: unreadBadgeTooltip('UNATTENDED'), label: t('SIDEBAR.UNATTENDED_CONVERSATIONS'), icon: 'i-lucide-clock-alert', to: accountScopedRoute('conversation_unattended'), @@ -370,6 +402,8 @@ const menuItems = computed(() => { children: sortedFolders.value.map(view => ({ name: `${view.name}-${view.id}`, label: view.name, + badgeCount: getFolderUnreadCount.value(view.id), + badgeTooltip: unreadBadgeTooltip('FOLDER'), to: accountScopedRoute('folder_conversations', { id: view.id }), })), }, @@ -385,6 +419,7 @@ const menuItems = computed(() => { name: `${team.name}-${team.id}`, label: team.name, badgeCount: getTeamUnreadCount.value(team.id), + badgeTooltip: unreadBadgeTooltip('TEAM'), to: accountScopedRoute('team_conversations', { teamId: team.id }), })), }, @@ -400,6 +435,7 @@ const menuItems = computed(() => { name: `${inbox.name}-${inbox.id}`, label: inbox.name, badgeCount: getInboxUnreadCount.value(inbox.id), + badgeTooltip: unreadBadgeTooltip('INBOX'), icon: h(ChannelIcon, { inbox, class: 'size-[16px]' }), to: accountScopedRoute('inbox_dashboard', { inbox_id: inbox.id }), component: leafProps => @@ -408,6 +444,7 @@ const menuItems = computed(() => { active: leafProps.active, inbox, badgeCount: leafProps.badgeCount, + badgeTooltip: leafProps.badgeTooltip, }), })), }, @@ -423,6 +460,7 @@ const menuItems = computed(() => { name: `${label.title}-${label.id}`, label: label.title, badgeCount: getLabelUnreadCount.value(label.id), + badgeTooltip: unreadBadgeTooltip('LABEL'), icon: h('span', { class: `size-[8px] rounded-sm`, style: { backgroundColor: label.color }, diff --git a/app/javascript/dashboard/components-next/sidebar/SidebarCollapsedPopover.vue b/app/javascript/dashboard/components-next/sidebar/SidebarCollapsedPopover.vue index 2e431eb7e..8f1de246e 100644 --- a/app/javascript/dashboard/components-next/sidebar/SidebarCollapsedPopover.vue +++ b/app/javascript/dashboard/components-next/sidebar/SidebarCollapsedPopover.vue @@ -197,7 +197,10 @@ onMounted(async () => { class="size-4 flex-shrink-0" /> {{ subChild.label }} - + @@ -220,7 +223,10 @@ onMounted(async () => { class="size-4 flex-shrink-0" /> {{ child.label }} - + diff --git a/app/javascript/dashboard/components-next/sidebar/SidebarGroupLeaf.vue b/app/javascript/dashboard/components-next/sidebar/SidebarGroupLeaf.vue index 1d23ad0ed..404bbe3f3 100644 --- a/app/javascript/dashboard/components-next/sidebar/SidebarGroupLeaf.vue +++ b/app/javascript/dashboard/components-next/sidebar/SidebarGroupLeaf.vue @@ -12,6 +12,7 @@ const props = defineProps({ active: { type: Boolean, default: false }, component: { type: Function, default: null }, badgeCount: { type: [Number, String], default: 0 }, + badgeTooltip: { type: String, default: '' }, hideTreeLine: { type: Boolean, default: false }, thinTreeLine: { type: Boolean, default: false }, }); @@ -52,14 +53,14 @@ const TREE_CONNECTOR = diff --git a/app/javascript/dashboard/components-next/sidebar/SidebarUnreadBadge.vue b/app/javascript/dashboard/components-next/sidebar/SidebarUnreadBadge.vue index 95d95236a..2a91bfcb4 100644 --- a/app/javascript/dashboard/components-next/sidebar/SidebarUnreadBadge.vue +++ b/app/javascript/dashboard/components-next/sidebar/SidebarUnreadBadge.vue @@ -3,6 +3,7 @@ import { computed } from 'vue'; const props = defineProps({ count: { type: [Number, String], default: 0 }, + tooltip: { type: String, default: '' }, }); const normalizedCount = computed(() => { @@ -18,6 +19,7 @@ const displayCount = computed(() =>