1
1
import "./style.less" ;
2
2
3
3
import React , { useContext , useEffect , useState } from "react" ;
4
- import { Checkbox , Input , message , Radio , RadioChangeEvent } from "antd" ;
4
+ import { Button , Checkbox , Input , message , Modal , Radio , RadioChangeEvent } from "antd" ;
5
5
import { observer } from "mobx-react-lite" ;
6
6
import { useTranslation } from "react-i18next" ;
7
7
import { AppearancePicker , FlatPrefersColorScheme } from "flat-components" ;
@@ -10,12 +10,19 @@ import { UserSettingLayoutContainer } from "../UserSettingLayoutContainer";
10
10
import { ipcSyncByApp , ipcAsyncByApp } from "../../../utils/ipc" ;
11
11
import { ConfigStoreContext , GlobalStoreContext } from "../../../components/StoreProvider" ;
12
12
import { useSafePromise } from "../../../utils/hooks/lifecycle" ;
13
- import { loginCheck , rename } from "../../../api-middleware/flatServer" ;
13
+ import {
14
+ deleteAccount ,
15
+ deleteAccountValidate ,
16
+ loginCheck ,
17
+ rename ,
18
+ } from "../../../api-middleware/flatServer" ;
14
19
import { ConfirmButtons } from "./ConfirmButtons" ;
15
20
import { UploadAvatar , uploadAvatar } from "./UploadAvatar" ;
16
21
import { useBindingList } from "./binding" ;
17
22
import { BindWeChat } from "./binding/WeChat" ;
18
23
import { BindGitHub } from "./binding/GitHub" ;
24
+ import { RouteNameType , usePushHistory } from "../../../utils/routes" ;
25
+ import { errorTips } from "../../../components/Tips/ErrorTips" ;
19
26
20
27
enum SelectLanguage {
21
28
Chinese ,
@@ -24,6 +31,7 @@ enum SelectLanguage {
24
31
25
32
export const GeneralSettingPage = observer ( function GeneralSettingPage ( ) {
26
33
const sp = useSafePromise ( ) ;
34
+ const pushHistory = usePushHistory ( ) ;
27
35
const { t, i18n } = useTranslation ( ) ;
28
36
const [ openAtLogin , setOpenAtLogin ] = useState ( false ) ;
29
37
const configStore = useContext ( ConfigStoreContext ) ;
@@ -81,6 +89,26 @@ export const GeneralSettingPage = observer(function GeneralSettingPage() {
81
89
configStore . updatePrefersColorScheme ( prefersColorScheme ) ;
82
90
} ;
83
91
92
+ async function removeAccount ( ) : Promise < void > {
93
+ const { alreadyJoinedRoomCount } = await sp ( deleteAccountValidate ( ) ) ;
94
+ if ( alreadyJoinedRoomCount > 0 ) {
95
+ message . error ( t ( "quit-all-rooms-before-delete-account" ) ) ;
96
+ return ;
97
+ }
98
+ Modal . confirm ( {
99
+ content : t ( "confirm-delete-account" ) ,
100
+ onOk : async ( ) => {
101
+ try {
102
+ await sp ( deleteAccount ( ) ) ;
103
+ globalStore . updateUserInfo ( null ) ;
104
+ pushHistory ( RouteNameType . LoginPage ) ;
105
+ } catch ( err ) {
106
+ errorTips ( err ) ;
107
+ }
108
+ } ,
109
+ } ) ;
110
+ }
111
+
84
112
return (
85
113
< UserSettingLayoutContainer >
86
114
< div className = "general-setting-container" >
@@ -146,6 +174,14 @@ export const GeneralSettingPage = observer(function GeneralSettingPage() {
146
174
defaultValue = { configStore . prefersColorScheme }
147
175
/>
148
176
</ div >
177
+ < div className = "general-setting-user-account" >
178
+ < span className = "general-setting-title" > { t ( "delete-account" ) } </ span >
179
+ < div >
180
+ < Button danger onClick = { removeAccount } >
181
+ { t ( "delete-account" ) }
182
+ </ Button >
183
+ </ div >
184
+ </ div >
149
185
</ div >
150
186
</ UserSettingLayoutContainer >
151
187
) ;
0 commit comments