forked from berty/berty
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgates.tsx
100 lines (87 loc) · 2.62 KB
/
gates.tsx
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
import React from 'react'
import { ActivityIndicator, Button, Text, TextInput, View } from 'react-native'
import { useDeleteAccount, useMsgrContext, useRestart } from '@berty-tech/store/hooks'
import {
isClosing,
isDeletingState,
isReadyingBasics,
MessengerActions,
MessengerAppState,
} from '@berty-tech/store/context'
import LoaderDots from './shared-components/LoaderDots'
const expandSelfAndCenterContent: any = {
alignItems: 'center',
justifyContent: 'center',
height: '100%',
width: '100%',
}
const gutter = 50
export const StreamGate: React.FC = ({ children }) => {
const { streamError, daemonAddress, embedded, dispatch } = useMsgrContext()
const [newAddress, setNewAddress] = React.useState(daemonAddress)
const changeAddress = React.useCallback(() => {
dispatch({ type: MessengerActions.SetDaemonAddress, payload: { value: newAddress } })
}, [dispatch, newAddress])
const restart = useRestart()
const deleteAccount = useDeleteAccount()
if (streamError) {
return (
<View style={[expandSelfAndCenterContent, { padding: gutter }]}>
<Text style={{ color: 'red' }}>{streamError.toString()}</Text>
<Text style={{ marginTop: gutter }}>
Likely couldn't connect to the node, or the connection dropped
</Text>
{embedded || (
<>
<TextInput
onChangeText={setNewAddress}
value={newAddress}
style={{ backgroundColor: 'grey' }}
/>
<Button title='Change node address' onPress={changeAddress} />
</>
)}
<View style={{ marginTop: gutter }}>
<Button onPress={() => restart()} title='Restart' />
</View>
<View style={{ marginTop: gutter }}>
<Button onPress={() => deleteAccount()} title='Delete account' />
</View>
</View>
)
}
return <>{children}</>
}
export const ListGate: React.FC = ({ children }) => {
const ctx = useMsgrContext()
if (ctx && !isClosing(ctx.appState) && !isReadyingBasics(ctx.appState)) {
return <>{children}</>
}
return <LoaderDots />
}
const DeleteProgressScreen = () => {
const ctx = useMsgrContext()
let text = 'Unknown state'
switch (ctx.appState) {
case MessengerAppState.DeletingClosingDaemon:
text = 'Stopping node..'
break
case MessengerAppState.DeletingClearingStorage:
text = 'Clearing storage..'
break
}
return (
<View style={[expandSelfAndCenterContent, { padding: gutter }]}>
<Text>{text}</Text>
<ActivityIndicator style={{ marginTop: gutter }} size='large' />
</View>
)
}
export const DeleteGate: React.FC = ({ children }) => {
const ctx = useMsgrContext()
if (ctx && isDeletingState(ctx.appState)) {
return <DeleteProgressScreen />
} else {
return <>{children}</>
}
}