aboutsummaryrefslogtreecommitdiffstats
path: root/src/containers/settings/AccountScreen.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/containers/settings/AccountScreen.tsx')
-rw-r--r--src/containers/settings/AccountScreen.tsx71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/containers/settings/AccountScreen.tsx b/src/containers/settings/AccountScreen.tsx
new file mode 100644
index 000000000..480b61f6c
--- /dev/null
+++ b/src/containers/settings/AccountScreen.tsx
@@ -0,0 +1,71 @@
1import { Component, ReactElement } from 'react';
2import { inject, observer } from 'mobx-react';
3
4import { StoresProps } from 'src/@types/ferdium-components.types';
5
6import AccountDashboard from '../../components/settings/account/AccountDashboard';
7import ErrorBoundary from '../../components/util/ErrorBoundary';
8import { LIVE_FRANZ_API } from '../../config';
9import { WEBSITE } from '../../environment-remote';
10
11class AccountScreen extends Component<StoresProps> {
12 onCloseWindow(): void {
13 const { user, features } = this.props.stores;
14 user.getUserInfoRequest.invalidate({ immediately: true });
15 features.featuresRequest.invalidate({ immediately: true });
16 }
17
18 reloadData(): void {
19 const { user } = this.props.stores;
20
21 user.getUserInfoRequest.reload();
22 }
23
24 handleWebsiteLink(route: string): void {
25 const { actions, stores } = this.props;
26
27 const api: string = stores.settings.all.app.server;
28
29 const url: string =
30 api === LIVE_FRANZ_API
31 ? stores.user.getAuthURL(
32 `${WEBSITE}${route}?utm_source=app&utm_medium=account_dashboard`,
33 )
34 : `${api}${route}`;
35
36 actions.app.openExternalUrl({ url });
37 }
38
39 render(): ReactElement {
40 const { user, settings } = this.props.stores;
41 const { user: userActions } = this.props.actions;
42
43 const isLoadingUserInfo = user.getUserInfoRequest.isExecuting;
44
45 return (
46 <ErrorBoundary>
47 <AccountDashboard
48 server={settings.all.app.server}
49 user={user.data}
50 isLoading={isLoadingUserInfo}
51 userInfoRequestFailed={
52 user.getUserInfoRequest.wasExecuted &&
53 user.getUserInfoRequest.isError
54 }
55 retryUserInfoRequest={() => this.reloadData()}
56 onCloseSubscriptionWindow={() => this.onCloseWindow()}
57 deleteAccount={userActions.delete}
58 isLoadingDeleteAccount={user.deleteAccountRequest.isExecuting}
59 isDeleteAccountSuccessful={
60 user.deleteAccountRequest.wasExecuted &&
61 !user.deleteAccountRequest.isError
62 }
63 openEditAccount={() => this.handleWebsiteLink('/user/profile')}
64 openInvoices={() => this.handleWebsiteLink('/user/invoices')}
65 />
66 </ErrorBoundary>
67 );
68 }
69}
70
71export default inject('stores', 'actions')(observer(AccountScreen));