import * as React from 'react' import { Button, Dialog, TextField, dialog } from "mdui" import useEventListener from "../useEventListener.ts" import { checkApiSuccessOrSncakbar, snackbar } from "../snackbar.ts" import Client from "../../api/Client.ts" import * as CryptoJS from 'crypto-js' import data from "../../Data.ts" import Avatar from "../Avatar.tsx" import User from "../../api/client_data/User.ts" interface Refs { userProfileDialogRef: React.MutableRefObject user: User } export default function UserProfileDialog({ userProfileDialogRef, user }: Refs) { const isMySelf = Client.myUserProfile?.id == user?.id const editAvatarButtonRef = React.useRef(null) const chooseAvatarFileRef = React.useRef(null) useEventListener(editAvatarButtonRef, 'click', () => chooseAvatarFileRef.current!.click()) useEventListener(chooseAvatarFileRef, 'change', async (_e) => { const file = chooseAvatarFileRef.current!.files?.[0] as File if (file == null) return const re = await Client.invoke("User.setAvatar", { token: data.access_token, avatar: file }) if (checkApiSuccessOrSncakbar(re, "修改失敗")) return snackbar({ message: "修改成功 (刷新頁面以更新)", placement: "top", }) }) const userProfileEditDialogRef = React.useRef(null) const editNickNameRef = React.useRef(null) const editUserNameRef = React.useRef(null) return (<> { // 公用 - 資料卡 }
{user?.nickname}
{!isMySelf && 編輯聯絡人訊息} { isMySelf && <> userProfileEditDialogRef.current!.open = true}>編輯資料 {/* 賬號設定 隱私設定 */} dialog({ headline: "退出登錄", description: "確定要退出登錄嗎? (若您的賬號未設定 用戶名, 請無務必複製 用戶 ID, 以免丟失賬號!)", actions: [ { text: "取消", onClick: () => { return true }, }, { text: "確定", onClick: () => { data.access_token = '' data.apply() location.reload() return true }, } ], })}>退出登錄 }
{ // 個人資料編輯 }
{ const input = e.target as HTMLInputElement input.select() input.setSelectionRange(0, 1145141919810) }}> userProfileEditDialogRef.current!.open = false}>取消 { const re = await Client.invoke("User.updateProfile", { token: data.access_token, nickname: editNickNameRef.current?.value, username: editUserNameRef.current?.value, }) if (checkApiSuccessOrSncakbar(re, "修改失敗")) return snackbar({ message: "修改成功 (刷新頁面以更新)", placement: "top", }) userProfileEditDialogRef.current!.open = false }}>更新
) }