feat: 私信会话增加组合式头像显示

release/desktop
moonrailgun 3 years ago
parent 46899f2148
commit 1706af2423

@ -6,7 +6,7 @@ import './combined.css';
interface CombinedAvatarProps { interface CombinedAvatarProps {
shape?: 'circle' | 'square'; shape?: 'circle' | 'square';
size?: number; size?: number;
items: AvatarProps[]; items: Pick<AvatarProps, 'name' | 'src'>[];
} }
/** /**
@ -14,7 +14,7 @@ interface CombinedAvatarProps {
*/ */
export const CombinedAvatar: React.FC<CombinedAvatarProps> = React.memo( export const CombinedAvatar: React.FC<CombinedAvatarProps> = React.memo(
(props) => { (props) => {
const { size = 16, shape = 'circle' } = props; const { size = 32, shape = 'circle' } = props;
const items = _take(props.items, 4); const items = _take(props.items, 4);
const length = items.length; const length = items.length;

@ -1,4 +1,5 @@
export { Avatar } from './Avatar'; export { Avatar } from './Avatar';
export { CombinedAvatar } from './Avatar/combined';
export { DelayTip } from './DelayTip'; export { DelayTip } from './DelayTip';
export { Highlight } from './Highlight'; export { Highlight } from './Highlight';
export { Icon } from './Icon'; export { Icon } from './Icon';

@ -158,6 +158,7 @@ export {
useUserId, useUserId,
useUserInfoList, useUserInfoList,
} from './redux/hooks/useUserInfo'; } from './redux/hooks/useUserInfo';
export { useUnread } from './redux/hooks/useUnread';
export { export {
userActions, userActions,
groupActions, groupActions,

@ -1,7 +1,15 @@
import { ChatConverseState, useDMConverseName } from 'tailchat-shared'; import {
ChatConverseState,
getCachedUserInfo,
useAsync,
useDMConverseName,
useUnread,
useUserId,
} from 'tailchat-shared';
import React from 'react'; import React from 'react';
import { SidebarItem } from '../SidebarItem'; import { SidebarItem } from '../SidebarItem';
import { useUnread } from 'tailchat-shared/redux/hooks/useUnread'; import { CombinedAvatar } from 'tailchat-design';
import _without from 'lodash/without';
interface SidebarDMItemProps { interface SidebarDMItemProps {
converse: ChatConverseState; converse: ChatConverseState;
@ -10,14 +18,36 @@ export const SidebarDMItem: React.FC<SidebarDMItemProps> = React.memo(
(props) => { (props) => {
const converse = props.converse; const converse = props.converse;
const name = useDMConverseName(converse); const name = useDMConverseName(converse);
const userId = useUserId();
const [hasUnread] = useUnread([converse._id]); const [hasUnread] = useUnread([converse._id]);
const { value: icon } = useAsync(async () => {
if (!userId) {
return;
}
const userInfos = await Promise.all(
_without<string>(converse.members, userId).map((memberUserId) =>
getCachedUserInfo(memberUserId)
)
);
return (
<CombinedAvatar
items={userInfos.map((user) => ({
name: user.nickname,
src: user.avatar,
}))}
/>
);
}, [converse.members, userId]);
return ( return (
<SidebarItem <SidebarItem
key={converse._id} key={converse._id}
name={name} name={name}
// TODO // action={<Icon icon="mdi:close" />} // TODO
// action={<Icon icon="mdi:close" />} icon={icon}
to={`/main/personal/converse/${converse._id}`} to={`/main/personal/converse/${converse._id}`}
badge={hasUnread} badge={hasUnread}
/> />

Loading…
Cancel
Save