|
|
@ -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}
|
|
|
|
/>
|
|
|
|
/>
|
|
|
|