diff options
author | Ricardo Cino <ricardo@cino.io> | 2022-06-27 18:21:31 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-27 17:21:31 +0100 |
commit | 0bf13689d53bd493fb4d0a4213c1801013b5aa8a (patch) | |
tree | 2b5ae44e4f1aa73b49c011954ff1cb47e3959bad /src/containers/settings/AccountScreen.tsx | |
parent | chore: recommend specific vscode extensions to setup development [skip ci] (#... (diff) | |
download | ferdium-app-0bf13689d53bd493fb4d0a4213c1801013b5aa8a.tar.gz ferdium-app-0bf13689d53bd493fb4d0a4213c1801013b5aa8a.tar.zst ferdium-app-0bf13689d53bd493fb4d0a4213c1801013b5aa8a.zip |
chore: transform containers/settings from js to tsx (#384)
Diffstat (limited to 'src/containers/settings/AccountScreen.tsx')
-rw-r--r-- | src/containers/settings/AccountScreen.tsx | 71 |
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 @@ | |||
1 | import { Component, ReactElement } from 'react'; | ||
2 | import { inject, observer } from 'mobx-react'; | ||
3 | |||
4 | import { StoresProps } from 'src/@types/ferdium-components.types'; | ||
5 | |||
6 | import AccountDashboard from '../../components/settings/account/AccountDashboard'; | ||
7 | import ErrorBoundary from '../../components/util/ErrorBoundary'; | ||
8 | import { LIVE_FRANZ_API } from '../../config'; | ||
9 | import { WEBSITE } from '../../environment-remote'; | ||
10 | |||
11 | class 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 | |||
71 | export default inject('stores', 'actions')(observer(AccountScreen)); | ||