Merge remote-tracking branch 'origin/bugfix_web' into bugfix_web
This commit is contained in:
@@ -76,6 +76,7 @@ export default function GroupSettings({ chat, onClose, onGoToMessage }: GroupSet
|
|||||||
|
|
||||||
const fileInputRef = useRef<HTMLInputElement>(null);
|
const fileInputRef = useRef<HTMLInputElement>(null);
|
||||||
const searchInputRef = useRef<HTMLInputElement>(null);
|
const searchInputRef = useRef<HTMLInputElement>(null);
|
||||||
|
const getSearchedUserId = (u: UserPresence & { userId?: string }) => u.id || u.userId || '';
|
||||||
|
|
||||||
// Keep local state in sync with chat prop
|
// Keep local state in sync with chat prop
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -95,7 +96,10 @@ export default function GroupSettings({ chat, onClose, onGoToMessage }: GroupSet
|
|||||||
const results = await UserApi.searchUsers(searchQuery);
|
const results = await UserApi.searchUsers(searchQuery);
|
||||||
// Filter out users already in the group
|
// Filter out users already in the group
|
||||||
const memberIds = new Set(chat.members.map((m) => m.user.id));
|
const memberIds = new Set(chat.members.map((m) => m.user.id));
|
||||||
setSearchResults(results.filter((u) => !memberIds.has(u.id)));
|
setSearchResults(results.filter((u) => {
|
||||||
|
const candidateId = getSearchedUserId(u as UserPresence & { userId?: string });
|
||||||
|
return !!candidateId && !memberIds.has(candidateId);
|
||||||
|
}));
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
} finally {
|
} finally {
|
||||||
@@ -565,10 +569,13 @@ export default function GroupSettings({ chat, onClose, onGoToMessage }: GroupSet
|
|||||||
<Loader2 size={16} className="text-zinc-500 animate-spin" />
|
<Loader2 size={16} className="text-zinc-500 animate-spin" />
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
{searchResults.map((u) => (
|
{searchResults.map((u) => {
|
||||||
|
const candidateId = getSearchedUserId(u as UserPresence & { userId?: string });
|
||||||
|
if (!candidateId) return null;
|
||||||
|
return (
|
||||||
<button
|
<button
|
||||||
key={u.id}
|
key={candidateId}
|
||||||
onClick={() => handleAddMember(u.id)}
|
onClick={() => handleAddMember(candidateId)}
|
||||||
className="flex items-center gap-3 w-full px-3 py-2 rounded-xl hover:bg-surface-hover transition-colors"
|
className="flex items-center gap-3 w-full px-3 py-2 rounded-xl hover:bg-surface-hover transition-colors"
|
||||||
>
|
>
|
||||||
<Avatar
|
<Avatar
|
||||||
@@ -583,7 +590,8 @@ export default function GroupSettings({ chat, onClose, onGoToMessage }: GroupSet
|
|||||||
</div>
|
</div>
|
||||||
<UserPlus size={14} className="text-knot-400 flex-shrink-0" />
|
<UserPlus size={14} className="text-knot-400 flex-shrink-0" />
|
||||||
</button>
|
</button>
|
||||||
))}
|
);
|
||||||
|
})}
|
||||||
{searchQuery.trim() && !isSearching && searchResults.length === 0 && (
|
{searchQuery.trim() && !isSearching && searchResults.length === 0 && (
|
||||||
<p className="text-xs text-zinc-500 text-center py-2">{t('usersNotFound')}</p>
|
<p className="text-xs text-zinc-500 text-center py-2">{t('usersNotFound')}</p>
|
||||||
)}
|
)}
|
||||||
|
|||||||
Reference in New Issue
Block a user