diff --git a/client/ui/App.tsx b/client/ui/App.tsx index 4b7acd8..340b11a 100644 --- a/client/ui/App.tsx +++ b/client/ui/App.tsx @@ -152,10 +152,11 @@ export default function App() { // 最近聊天 { + setCurrentChatId(id) setIsShowChatFragment(true) - }} display={navigationItemSelected == "Recents"} + currentChatId={currentChatId} recentsList={recentsList} setRecentsList={setRecentsList} /> } diff --git a/client/ui/main/ContactsList.tsx b/client/ui/main/ContactsList.tsx index 41cc975..e29a7f3 100644 --- a/client/ui/main/ContactsList.tsx +++ b/client/ui/main/ContactsList.tsx @@ -1,6 +1,8 @@ import React from "react" import User from "../../api/client_data/User.ts" import ContactsListItem from "./ContactsListItem.tsx" +import useEventListener from "../useEventListener.ts" +import { TextField } from "mdui"; interface Args extends React.HTMLAttributes { contactsList: User[] @@ -16,6 +18,13 @@ export default function ContactsList({ openChatFragment, ...props }: Args) { + const searchRef = React.useRef(null) + const [searchText, setSearchText] = React.useState('') + + useEventListener(searchRef, 'input', (e) => { + setSearchText((e.target as unknown as TextField).value) + }) + return + + 添加聯絡人 { - contactsList.map((v2) => + contactsList.filter((user) => + searchText == '' || + user.nickname.includes(searchText) || + user.id.includes(searchText) || + user.username?.includes(searchText) + ).map((v) => + key={v.id} + contact={v} /> ) } diff --git a/client/ui/main/RecentsList.tsx b/client/ui/main/RecentsList.tsx index be942cb..32cce73 100644 --- a/client/ui/main/RecentsList.tsx +++ b/client/ui/main/RecentsList.tsx @@ -5,12 +5,14 @@ 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, ...props @@ -24,7 +26,8 @@ export default function RecentsList({ { recentsList.map((v) => openChatFragment(v.id)} key={v.id} recentChat={v} /> ) diff --git a/client/ui/main/RecentsListItem.tsx b/client/ui/main/RecentsListItem.tsx index 8aaaee4..f1dfd45 100644 --- a/client/ui/main/RecentsListItem.tsx +++ b/client/ui/main/RecentsListItem.tsx @@ -4,15 +4,16 @@ import Avatar from "../Avatar.tsx" interface Args extends React.HTMLAttributes { recentChat: RecentChat openChatFragment: (id: string) => void + active?: boolean } -export default function RecentsListItem({ recentChat, openChatFragment }: Args) { +export default function RecentsListItem({ recentChat, openChatFragment, active }: Args) { const { id, title, avatar, content } = recentChat return ( openChatFragment(id)}> + }} onClick={() => openChatFragment(id)} active={active}> {title}