diff --git a/client/ui/main/RecentsList.tsx b/client/ui/main/RecentsList.tsx index b857461..d204867 100644 --- a/client/ui/main/RecentsList.tsx +++ b/client/ui/main/RecentsList.tsx @@ -3,18 +3,19 @@ import RecentChat from "../../api/client_data/RecentChat.ts" import useEventListener from "../useEventListener.ts" import RecentsListItem from "./RecentsListItem.tsx" import React from "react" +import useAsyncEffect from "../useAsyncEffect.ts" +import Client from "../../api/Client.ts" +import { checkApiSuccessOrSncakbar } from "../snackbar.ts"; +import data from "../../Data.ts"; +import EventBus from "../../EventBus.ts"; interface Args extends React.HTMLAttributes { - recentsList: RecentChat[] - setRecentsList: React.Dispatch> display: boolean currentChatId: string openChatFragment: (id: string) => void } export default function RecentsList({ - recentsList, - setRecentsList, currentChatId, display, openChatFragment, @@ -22,11 +23,26 @@ export default function RecentsList({ }: Args) { const searchRef = React.useRef(null) const [searchText, setSearchText] = React.useState('') + const [recentsList, setRecentsList] = React.useState([]) useEventListener(searchRef, 'input', (e) => { setSearchText((e.target as unknown as TextField).value) }) + useAsyncEffect(async () => { + async function updateRecents() { + const re = await Client.invoke("User.getMyRecentChats", { + token: data.access_token, + }) + if (re.code != 200) + return checkApiSuccessOrSncakbar(re, "获取最近對話列表失败") + + setRecentsList(re.data!.recent_chats as RecentChat[]) + } + updateRecents() + EventBus.on('RecentsList.updateRecents', () => updateRecents()) + }) + return { - const chat = Chat.findById(chatId) - return { - content, - id: chatId, - title: chat?.getTitle(user) || "未知", - avatar: chat?.getAvatarFileHash(user) ? "uploaded_files/" + chat?.getAvatarFileHash(user) : undefined - } - }) + recent_chats: recentChatsList.reverse(), } } }) diff --git a/server/data/User.ts b/server/data/User.ts index a712dc3..2a4b7bd 100644 --- a/server/data/User.ts +++ b/server/data/User.ts @@ -132,9 +132,9 @@ export default class User { map.set(chatId, content) this.setAttr("recent_chats", JSON.stringify(map, MapJson.replacer)) } - getRecentChats() { + getRecentChats(): Map { try { - return JSON.parse(this.bean.recent_chats, MapJson.reviver) as Map + return JSON.parse(this.bean.recent_chats, MapJson.reviver) } catch (e) { console.log(chalk.yellow(`警告: 最近对话列表解析失敗: ${(e as Error).message}`)) return new Map()