import Client from "../api/Client.ts" import data from "../Data.ts" import ChatFragment from "./chat/ChatFragment.tsx" import useEventListener from './useEventListener.ts' import User from "../api/client_data/User.ts" import RecentChat from "../api/client_data/RecentChat.ts" import Avatar from "./Avatar.tsx" import * as React from 'react' import { Dialog, NavigationRail, TextField } from "mdui" import Split from 'split.js' import 'mdui/jsx.zh-cn.d.ts' import { checkApiSuccessOrSncakbar } from "./snackbar.ts" import RegisterDialog from "./dialog/RegisterDialog.tsx" import LoginDialog from "./dialog/LoginDialog.tsx" import UserProfileDialog from "./dialog/UserProfileDialog.tsx" import ContactsList from "./main/ContactsList.tsx"; import RecentsList from "./main/RecentsList.tsx"; declare global { namespace React { namespace JSX { interface IntrinsicAttributes { id?: string slot?: string } } } } export default function App() { const [recentsList, setRecentsList] = React.useState([ { id: '0', avatar: "https://www.court-records.net/mugshot/aa6-004-maya.png", title: "麻油衣酱", content: "成步堂君, 我又坐牢了(" }, { id: '0', avatar: "https://www.court-records.net/mugshot/aa6-004-maya.png", title: "Maya Fey", content: "我是绫里真宵, 是一名灵媒师~" }, ] as RecentChat[]) const [contactsMap, setContactsMap] = React.useState({ 所有: [ { id: '0', avatar: "https://www.court-records.net/mugshot/aa6-004-maya.png", nickname: "麻油衣酱", }, { id: '0', avatar: "https://www.court-records.net/mugshot/aa6-004-maya.png", nickname: "Maya Fey", }, ], } as unknown as { [key: string]: User[] }) const [navigationItemSelected, setNavigationItemSelected] = React.useState('Recents') const navigationRailRef: React.MutableRefObject = React.useRef(null) useEventListener(navigationRailRef, 'change', (event) => { setNavigationItemSelected((event.target as HTMLElement as NavigationRail).value as string) }) const loginDialogRef: React.MutableRefObject = React.useRef(null) const loginInputAccountRef: React.MutableRefObject = React.useRef(null) const loginInputPasswordRef: React.MutableRefObject = React.useRef(null) const registerDialogRef: React.MutableRefObject = React.useRef(null) const registerInputUserNameRef: React.MutableRefObject = React.useRef(null) const registerInputNickNameRef: React.MutableRefObject = React.useRef(null) const registerInputPasswordRef: React.MutableRefObject = React.useRef(null) const userProfileDialogRef: React.MutableRefObject = React.useRef(null) const openMyUserProfileDialogButtonRef: React.MutableRefObject = React.useRef(null) useEventListener(openMyUserProfileDialogButtonRef, 'click', (_event) => { userProfileDialogRef.current!.open = true }) const [myUserProfileCache, setMyUserProfileCache]: [User, React.Dispatch>] = React.useState(null as unknown as User) const [isShowChatFragment, setIsShowChatFragment] = React.useState(false) const [currentChatId, setCurrentChatId] = React.useState('') React.useEffect(() => { ; (async () => { const split = Split(['#SideBar', '#ChatFragment'], { sizes: data.split_sizes ? data.split_sizes : [25, 75], minSize: [200, 400], gutterSize: 2, onDragEnd: function () { data.split_sizes = split.getSizes() data.apply() } }) Client.connect() const re = await Client.auth(data.access_token || "") if (re.code == 401) loginDialogRef.current!.open = true else if (re.code != 200) { if (checkApiSuccessOrSncakbar(re, "驗證失敗")) return } else if (re.code == 200) { setMyUserProfileCache(Client.myUserProfile as User) } })() }, []) return (
{ // 侧边列表 } { // 聊天页面 }
{ !isShowChatFragment &&
選擇聯絡人以開始對話...
} { isShowChatFragment && }
) }