-
Notifications
You must be signed in to change notification settings - Fork 52
/
App.js
111 lines (101 loc) · 3.23 KB
/
App.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import './App.css';
import Authorize from './pages/Authorize';
import CreateAccount from './pages/CreateAccount';
import Loading from './pages/Loading';
import SignIn from './pages/SignIn';
import { Container } from 'semantic-ui-react';
import { appWindow } from '@tauri-apps/api/window';
import { invoke } from '@tauri-apps/api/tauri';
import { listen, once } from '@tauri-apps/api/event';
import { useState, useEffect } from 'react';
const LOADING_PAGE = 0;
const CREATE_ACCOUNT_PAGE = 1;
const LOGIN_PAGE = 2;
const AUTHORIZE_PAGE = 3;
function App() {
const [currentPage, setCurrentPage] = useState(LOADING_PAGE);
const [isConnected, setIsConnected] = useState(false);
const [recoveryPhrase, setRecoveryPhrase] = useState(null);
const [authorizationSummary, setAuthorizationSummary] = useState(null);
useEffect(() => {
if (isConnected) return;
const beginInitialConnectionPhase = async () => {
await once('connect', (event) => {
invoke('ui_connected');
console.log("[INFO]: Connect Event: ", event);
let payload = event.payload;
switch (payload.type) {
case 'CreateAccount':
setRecoveryPhrase(payload.content);
setCurrentPage(CREATE_ACCOUNT_PAGE);
break;
case 'Login':
setCurrentPage(LOGIN_PAGE);
break;
default:
break;
}
});
};
beginInitialConnectionPhase();
}, [isConnected]);
const hideWindow = () => {
console.log("[INFO]: HIDE.");
appWindow.hide();
setCurrentPage(LOADING_PAGE);
};
const listenForTxAuthorizationRequests = () => {
console.log("[INFO]: Setup listener.");
listen('authorize', (event) => {
console.log("[INFO]: Wake: ", event);
setAuthorizationSummary(event.payload);
setCurrentPage(AUTHORIZE_PAGE);
appWindow.show();
});
};
const sendPassword = async (password) => {
console.log("[INFO]: Send password to signer server.");
return await invoke('send_password', { password: password });
};
const stopPasswordPrompt = async () => {
console.log("[INFO]: Stop password prompt.");
await invoke('stop_password_prompt');
};
const endInitialConnectionPhase = async () => {
console.log("[INFO]: End Initial Connection Phase");
setIsConnected(true);
hideWindow();
listenForTxAuthorizationRequests();
};
return (
<div className="App">
<Container className="page">
{currentPage === LOADING_PAGE && (
<Loading/>
)}
{currentPage === CREATE_ACCOUNT_PAGE && (
<CreateAccount
recoveryPhrase={recoveryPhrase}
sendPassword={sendPassword}
endInitialConnectionPhase={endInitialConnectionPhase}
/>
)}
{currentPage === LOGIN_PAGE && (
<SignIn
sendPassword={sendPassword}
endInitialConnectionPhase={endInitialConnectionPhase}
/>
)}
{currentPage === AUTHORIZE_PAGE && (
<Authorize
summary={authorizationSummary}
sendPassword={sendPassword}
stopPasswordPrompt={stopPasswordPrompt}
hideWindow={hideWindow}
/>
)}
</Container>
</div>
);
}
export default App;