feat: 增加群组成员搜索功能

release/desktop
moonrailgun 4 years ago
parent 6ef6748659
commit 34674026ee

@ -1,6 +1,9 @@
import { Icon } from '@/components/Icon';
import { UserListItem } from '@/components/UserListItem'; import { UserListItem } from '@/components/UserListItem';
import React from 'react'; import { Input, Skeleton } from 'antd';
import { useGroupInfo } from 'tailchat-shared'; import React, { useMemo, useState } from 'react';
import { t, useGroupInfo } from 'tailchat-shared';
import { useUserInfoList } from 'tailchat-shared/hooks/model/useUserInfoList';
interface MembersPanelProps { interface MembersPanelProps {
groupId: string; groupId: string;
@ -12,11 +15,30 @@ interface MembersPanelProps {
export const MembersPanel: React.FC<MembersPanelProps> = React.memo((props) => { export const MembersPanel: React.FC<MembersPanelProps> = React.memo((props) => {
const groupInfo = useGroupInfo(props.groupId); const groupInfo = useGroupInfo(props.groupId);
const members = groupInfo?.members ?? []; const members = groupInfo?.members ?? [];
const userInfoList = useUserInfoList(members.map((m) => m.userId));
const [searchStr, setSearchStr] = useState('');
const filteredGroupMembers = useMemo(() => {
return userInfoList.filter((u) => u.nickname.includes(searchStr));
}, [userInfoList, searchStr]);
if (userInfoList.length === 0) {
return <Skeleton />;
}
return ( return (
<div> <div>
{members.map((member) => ( <div className="p-2">
<UserListItem key={member.userId} userId={member.userId} /> <Input
placeholder={t('搜索成员')}
size="large"
suffix={<Icon fontSize={20} color="grey" icon="mdi:magnify" />}
onChange={(e) => setSearchStr(e.target.value)}
/>
</div>
{filteredGroupMembers.map((member) => (
<UserListItem key={member._id} userId={member._id} />
))} ))}
</div> </div>
); );

@ -15,6 +15,7 @@ export const UserListItem: React.FC<UserListItemProps> = React.memo((props) => {
const userName = userInfo.nickname; const userName = userInfo.nickname;
const handleClick = useCallback(() => { const handleClick = useCallback(() => {
// TODO 点击展开用户信息卡片
console.log('clicked avatar'); console.log('clicked avatar');
}, []); }, []);

@ -102,6 +102,12 @@
border-width: 0 !important; border-width: 0 !important;
} }
} }
// 输入框(带前后缀)
.ant-input-affix-wrapper {
color: rgba(255, 255, 255, 0.65);
background-color: transparent;
border-color: rgba(255, 255, 255, 0.12);
}
// 复选框 // 复选框
.ant-checkbox-wrapper { .ant-checkbox-wrapper {

Loading…
Cancel
Save