mirror of https://github.com/msgbyte/tailchat
feat: 频道未读提示
parent
8a993203bb
commit
b31ffdf6e3
@ -0,0 +1,23 @@
|
||||
import { useAppSelector } from './useAppSelector';
|
||||
|
||||
/**
|
||||
* 返回某些会话是否有未读信息
|
||||
*/
|
||||
export function useUnread(converseIds: string[]) {
|
||||
const ack = useAppSelector((state) => state.chat.ack);
|
||||
const lastMessageMap = useAppSelector((state) => state.chat.lastMessageMap);
|
||||
|
||||
return converseIds.map((converseId) => {
|
||||
if (
|
||||
ack[converseId] === undefined &&
|
||||
lastMessageMap[converseId] !== undefined
|
||||
) {
|
||||
// 没有已读记录且远程有数据
|
||||
return true;
|
||||
}
|
||||
|
||||
// 当远端最后一条消息的id > 本地已读状态的最后一条消息id,
|
||||
// 则返回true(有未读消息)
|
||||
return lastMessageMap[converseId] > ack[converseId];
|
||||
});
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
import { GroupPanelItem } from '@/components/GroupPanelItem';
|
||||
import React from 'react';
|
||||
import { GroupPanel, useGroupTextPanelUnread } from 'tailchat-shared';
|
||||
|
||||
interface GroupTextPanelItemProps {
|
||||
groupId: string;
|
||||
panel: GroupPanel;
|
||||
}
|
||||
export const GroupTextPanelItem: React.FC<GroupTextPanelItemProps> = React.memo(
|
||||
(props) => {
|
||||
const { groupId, panel } = props;
|
||||
const panelId = panel.id;
|
||||
const hasUnread = useGroupTextPanelUnread(panelId);
|
||||
|
||||
return (
|
||||
<GroupPanelItem
|
||||
name={panel.name}
|
||||
icon={<div>#</div>}
|
||||
to={`/main/group/${groupId}/${panel.id}`}
|
||||
badge={hasUnread}
|
||||
/>
|
||||
);
|
||||
}
|
||||
);
|
||||
GroupTextPanelItem.displayName = 'GroupTextPanelItem';
|
Loading…
Reference in New Issue