This commit is contained in:
Timothy Jaeryang Baek
2026-08-13 13:03:56 -06:00
parent 5c8d9e69c4
commit ba885d0026
2 changed files with 33 additions and 12 deletions
@@ -575,7 +575,8 @@
i18n,
triggerChar: '@',
modelSuggestions: true,
userSuggestions
userSuggestions,
channelId: channel?.id
})
},
...(channelSuggestions
@@ -2,12 +2,13 @@
import { getContext, onDestroy, onMount } from 'svelte';
const i18n = getContext('i18n');
import { channels, models, user } from '$lib/stores';
import { channels, models } from '$lib/stores';
import Tooltip from '$lib/components/common/Tooltip.svelte';
import Hashtag from '$lib/components/icons/Hashtag.svelte';
import Lock from '$lib/components/icons/Lock.svelte';
import { WEBUI_API_BASE_URL, WEBUI_BASE_URL } from '$lib/constants';
import { searchUsers } from '$lib/apis/users';
import { getChannelMembersById } from '$lib/apis/channels';
export let query = '';
@@ -20,28 +21,47 @@
export let modelSuggestions = false;
export let userSuggestions = false;
export let channelSuggestions = false;
export let channelId: string | null = null;
let _models = [];
let _users = [];
let _channels = [];
type UserSuggestion = { id: string; name: string };
$: filteredItems = [..._users, ..._models, ..._channels].filter(
(u) =>
u.label.toLowerCase().includes(query.toLowerCase()) ||
u.id.toLowerCase().includes(query.toLowerCase())
);
const getUserList = async () => {
const res = await searchUsers(localStorage.token, query).catch((error) => {
console.error('Error searching users:', error);
return null;
});
const toUserItems = (users: UserSuggestion[]) =>
[...users]
.map((u) => ({ type: 'user', id: u.id, label: u.name }))
.sort((a, b) => a.label.localeCompare(b.label));
if (res) {
_users = [...res.users.map((u) => ({ type: 'user', id: u.id, label: u.name }))].sort((a, b) =>
a.label.localeCompare(b.label)
);
}
const getUserList = async () => {
const [channelMembers, searchResults] = await Promise.all([
channelId
? getChannelMembersById(localStorage.token, channelId, query, 'name', 'asc').catch(
(error) => {
console.error('Error loading channel members:', error);
return null;
}
)
: Promise.resolve(null),
searchUsers(localStorage.token, query).catch((error) => {
console.error('Error searching users:', error);
return null;
})
]);
const memberUsers = (channelMembers?.users ?? []) as UserSuggestion[];
const searchedUsers = (searchResults?.users ?? []) as UserSuggestion[];
const memberIds = new Set(memberUsers.map((u) => u.id));
const globalUsers = searchedUsers.filter((u) => !memberIds.has(u.id));
_users = [...toUserItems(memberUsers), ...toUserItems(globalUsers)];
};
$: if (query !== null && userSuggestions) {