diff --git a/client/ui/main/ContactsList.tsx b/client/ui/main/ContactsList.tsx index 52d8318..d400c72 100644 --- a/client/ui/main/ContactsList.tsx +++ b/client/ui/main/ContactsList.tsx @@ -7,6 +7,7 @@ import data from "../../Data.ts" import { checkApiSuccessOrSncakbar, snackbar } from "../snackbar.ts" import Chat from "../../api/client_data/Chat.ts" import EventBus from "../../EventBus.ts" +import isMobileUI from "../isMobileUI.ts"; interface Args extends React.HTMLAttributes { display: boolean @@ -14,6 +15,7 @@ interface Args extends React.HTMLAttributes { addContactDialogRef: React.MutableRefObject createGroupDialogRef: React.MutableRefObject setSharedFavouriteChats: React.Dispatch> + currentChatId: string } export default function ContactsList({ @@ -22,6 +24,7 @@ export default function ContactsList({ addContactDialogRef, createGroupDialogRef, setSharedFavouriteChats, + currentChatId, ...props }: Args) { const searchRef = React.useRef(null) @@ -63,80 +66,84 @@ export default function ContactsList({ height: '100%', width: '100%', }} {...props}> - - - addContactDialogRef.current!.open = true}>添加对话 - createGroupDialogRef.current!.open = true}>创建群组 - EventBus.emit('ContactsList.updateContacts')}>刷新 - { - if (isMultiSelecting) - setCheckedList({}) - setIsMultiSelecting(!isMultiSelecting) - }}>{isMultiSelecting ? "关闭多选" : "多选模式"} - { - isMultiSelecting && <> - dialog({ - headline: "删除所选", - description: "确定要删除所选的收藏对话吗? 这并不会删除您的聊天记录, 也不会丢失对话成员身份", - actions: [ - { - text: "取消", - onClick: () => { - return true - }, - }, - { - text: "确定", - onClick: async () => { - const ls = Object.keys(checkedList).filter((chatId) => checkedList[chatId] == true) - const re = await Client.invoke("User.removeContacts", { - token: data.access_token, - targets: ls, - }) - if (re.code != 200) - checkApiSuccessOrSncakbar(re, "删除所选收藏失败") - else { - setCheckedList({}) - setIsMultiSelecting(false) - EventBus.emit('ContactsList.updateContacts') - snackbar({ - message: "已删除所选", - placement: "top", - action: "撤销操作", - onActionClick: async () => { - const re = await Client.invoke("User.addContacts", { - token: data.access_token, - targets: ls, - }) - if (re.code != 200) - checkApiSuccessOrSncakbar(re, "恢复所选收藏失败") - EventBus.emit('ContactsList.updateContacts') - } - }) - } - }, - } - ], - })}>删除所选 - - }
+ position: 'sticky', + top: '0', + backgroundColor: 'rgb(var(--mdui-color-background))', + zIndex: '10', + }}> + + addContactDialogRef.current!.open = true}>添加收藏对话 + EventBus.emit('ContactsList.updateContacts')}>刷新 + { + if (isMultiSelecting) + setCheckedList({}) + setIsMultiSelecting(!isMultiSelecting) + }}>{isMultiSelecting ? "关闭多选" : "多选模式"} + { + isMultiSelecting && <> + dialog({ + headline: "删除所选", + description: "确定要删除所选的收藏对话吗? 这并不会删除您的聊天记录, 也不会丢失对话成员身份", + closeOnEsc: true, + closeOnOverlayClick: true, + actions: [ + { + text: "取消", + onClick: () => { + return true + }, + }, + { + text: "确定", + onClick: async () => { + const ls = Object.keys(checkedList).filter((chatId) => checkedList[chatId] == true) + const re = await Client.invoke("User.removeContacts", { + token: data.access_token, + targets: ls, + }) + if (re.code != 200) + checkApiSuccessOrSncakbar(re, "删除所选收藏失败") + else { + setCheckedList({}) + setIsMultiSelecting(false) + EventBus.emit('ContactsList.updateContacts') + snackbar({ + message: "已删除所选", + placement: "top", + action: "撤销操作", + onActionClick: async () => { + const re = await Client.invoke("User.addContacts", { + token: data.access_token, + targets: ls, + }) + if (re.code != 200) + checkApiSuccessOrSncakbar(re, "恢复所选收藏失败") + EventBus.emit('ContactsList.updateContacts') + } + }) + } + }, + } + ], + })}>删除所选 + + } +
+ { contactsList.filter((chat) => @@ -145,7 +152,7 @@ export default function ContactsList({ chat.id.includes(searchText) ).map((v) => { if (isMultiSelecting) setCheckedList({ diff --git a/client/ui/main/RecentsList.tsx b/client/ui/main/RecentsList.tsx index d798f5a..01b0f0b 100644 --- a/client/ui/main/RecentsList.tsx +++ b/client/ui/main/RecentsList.tsx @@ -44,7 +44,11 @@ export default function RecentsList({ } updateRecents() EventBus.on('RecentsList.updateRecents', () => updateRecents()) - setTimeout(() => updateRecents(), 15 * 1000) + const id = setInterval(() => updateRecents(), 15 * 1000) + return () => { + EventBus.off('RecentsList.updateRecents') + clearInterval(id) + } }) return { recentsList.filter((chat) =>