From b9194c90b7ffe135259619466db1d005f5a9fe6a Mon Sep 17 00:00:00 2001 From: Maksim Sukharev Date: Thu, 24 Apr 2025 11:24:16 +0200 Subject: [PATCH] fix(user_status): do not make requests to user_status if known that no status is set - autocomplete API return status as object, if set, and empty string, if not - NcAvatar expects preloadedUserStatus as object to block requests - in case of empty string, empty object should be provided Signed-off-by: Maksim Sukharev --- .../SearchConversationsResults.vue | 2 ++ src/store/conversationsStore.js | 1 + src/store/conversationsStore.spec.js | 2 ++ src/utils/userStatus.ts | 19 ++++++++++++++----- 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/components/LeftSidebar/SearchConversationsResults/SearchConversationsResults.vue b/src/components/LeftSidebar/SearchConversationsResults/SearchConversationsResults.vue index 5c4ae81af9..3f69073668 100644 --- a/src/components/LeftSidebar/SearchConversationsResults/SearchConversationsResults.vue +++ b/src/components/LeftSidebar/SearchConversationsResults/SearchConversationsResults.vue @@ -23,6 +23,7 @@ import Conversation from '../ConversationsList/Conversation.vue' import { ATTENDEE, CONVERSATION, AVATAR } from '../../../constants.ts' import { useSettingsStore } from '../../../stores/settings.js' import type { Conversation as TypeConversation, ParticipantSearchResult } from '../../../types/index.ts' +import { getPreloadedUserStatus } from '../../../utils/userStatus.ts' const props = defineProps<{ searchText: string, @@ -154,6 +155,7 @@ function iconData(item: ParticipantSearchResult) { id: item.id, name: item.label, source: item.source, + preloadedUserStatus: getPreloadedUserStatus(item), disableMenu: true, token: 'new', showUserStatus: true, diff --git a/src/store/conversationsStore.js b/src/store/conversationsStore.js index 9b382938cf..ab16280e95 100644 --- a/src/store/conversationsStore.js +++ b/src/store/conversationsStore.js @@ -311,6 +311,7 @@ const actions = { actorId: conversation.actorId, // FIXME check public share page handling userId: currentUser ? currentUser.uid : '', displayName: currentUser && currentUser.displayName ? currentUser.displayName : '', // TODO guest name from localstore? + status: '', }, }) }, diff --git a/src/store/conversationsStore.spec.js b/src/store/conversationsStore.spec.js index b20ce86481..0a848c31dc 100644 --- a/src/store/conversationsStore.spec.js +++ b/src/store/conversationsStore.spec.js @@ -165,6 +165,7 @@ describe('conversationsStore', () => { 'session-id-1', ], userId: 'current-user', + status: '', }, }) }) @@ -196,6 +197,7 @@ describe('conversationsStore', () => { 'session-id-1', ], userId: '', + status: '', }, }) }) diff --git a/src/utils/userStatus.ts b/src/utils/userStatus.ts index f7e6e8ae8a..38d5860ac9 100644 --- a/src/utils/userStatus.ts +++ b/src/utils/userStatus.ts @@ -30,12 +30,21 @@ export function getPreloadedUserStatus(userData?: Conversation | Participant | P icon: userData.statusIcon || null, } } - if ('status' in userData && typeof userData.status === 'object') { + if ('status' in userData) { // We preloaded the status when via search API - return { - status: userData.status.status || null, - message: userData.status.message || null, - icon: userData.status.icon || null, + if (typeof userData.status === 'object') { + return { + status: userData.status.status || null, + message: userData.status.message || null, + icon: userData.status.icon || null, + } + } else if (typeof userData.status === 'string' && userData.status === '') { + // No status is set, provide empty status object to not make a request + return { + status: null, + message: null, + icon: null, + } } } return undefined