@@ -63,8 +63,9 @@ const ServerScreen = () => {
63
63
const [ serverNameRed , setServerNameRed ] = useState ( false )
64
64
const [ serverVersion , setServerVersion ] =
65
65
useState < keyof typeof protocolMap > ( 'auto' )
66
- const [ addServerDialogOpen , setAddServerDialogOpen ] = useState ( false )
67
- const [ editServerDialogOpen , setEditServerDialogOpen ] = useState ( '' )
66
+ const [ editServerDialogOpen , setEditServerDialogOpen ] = useState <
67
+ string | boolean
68
+ > ( false )
68
69
const [ pingResponses , setPingResponses ] = useState < {
69
70
// false - no route, null - unknown err, undefined - pinging
70
71
[ ip : string ] : LegacyPing | Ping | false | null | undefined
@@ -102,32 +103,42 @@ const ServerScreen = () => {
102
103
} , [ servers , pingResponses ] )
103
104
104
105
const invalidServerName = newServerName . length > 32
106
+ const openEditServerDialog = ( server : string ) => {
107
+ setEditServerDialogOpen ( server )
108
+ setNewServerName ( server )
109
+ setServerVersion ( servers [ server ] . version )
110
+ setIpAddr ( servers [ server ] . address )
111
+ }
105
112
const cancelAddServer = ( ) => {
106
- setAddServerDialogOpen ( false )
113
+ setEditServerDialogOpen ( false )
107
114
setServerVersion ( 'auto' )
108
115
setNewServerName ( '' )
109
116
setIpAddr ( '' )
110
117
setIpAddrRed ( false )
111
118
setServerNameRed ( false )
112
119
}
113
- const addServer = ( ) => {
120
+ const deleteServer = ( ) => {
121
+ if ( typeof editServerDialogOpen !== 'string' ) return cancelAddServer ( )
122
+ delete servers [ editServerDialogOpen ]
123
+ setServers ( servers )
124
+ cancelAddServer ( )
125
+ }
126
+ const editServer = ( ) => {
127
+ const edit = typeof editServerDialogOpen === 'string'
114
128
if (
115
129
! newServerName ||
116
130
invalidServerName ||
117
- ipAddr === '' ||
118
- servers [ newServerName ]
131
+ ( ! edit && servers [ newServerName ] ) ||
132
+ ( edit && servers [ newServerName ] && newServerName !== editServerDialogOpen )
119
133
) {
120
- setIpAddrRed ( ipAddr === '' )
121
- setServerNameRed ( ! newServerName )
122
- return
134
+ return setServerNameRed ( true )
135
+ } else if ( ipAddr === '' ) {
136
+ return setIpAddrRed ( true )
123
137
}
124
- setServers ( {
125
- ...servers ,
126
- [ newServerName ] : {
127
- version : serverVersion ,
128
- address : ipAddr
129
- }
130
- } )
138
+ const newServers = { ...servers }
139
+ if ( edit ) delete newServers [ editServerDialogOpen ]
140
+ servers [ newServerName ] = { version : serverVersion , address : ipAddr }
141
+ setServers ( newServers )
131
142
setPingResponses ( { } )
132
143
cancelAddServer ( )
133
144
}
@@ -172,7 +183,7 @@ const ServerScreen = () => {
172
183
selectedProfile : uuid ,
173
184
accessToken : accounts [ activeAccount ] . accessToken
174
185
} )
175
- const onCloseOrError = ( ) => {
186
+ const onCloseOrError : ( ) => void = ( ) => {
176
187
setConnection ( undefined )
177
188
if ( newConn . disconnectReason ) {
178
189
setDisconnectReason ( {
@@ -191,28 +202,11 @@ const ServerScreen = () => {
191
202
}
192
203
}
193
204
194
- // LOW-TODO: Support editing servers.
205
+ const modalButtonCancelText = darkMode
206
+ ? dialogStyles . modalButtonCancelDarkText
207
+ : dialogStyles . modalButtonCancelText
195
208
return (
196
209
< >
197
- < Dialog
198
- visible = { ! ! editServerDialogOpen }
199
- onRequestClose = { ( ) => setEditServerDialogOpen ( '' ) }
200
- containerStyles = { styles . deleteServerDialog }
201
- >
202
- < Pressable
203
- onPress = { ( ) => {
204
- delete servers [ editServerDialogOpen ]
205
- setEditServerDialogOpen ( '' )
206
- setServers ( servers )
207
- } }
208
- android_ripple = { { color : '#aaa' } }
209
- style = { dialogStyles . modalButton }
210
- >
211
- < Text style = { styles . deleteServerText } >
212
- Delete '{ editServerDialogOpen } ' server
213
- </ Text >
214
- </ Pressable >
215
- </ Dialog >
216
210
{ disconnectReason && (
217
211
< Dialog visible onRequestClose = { ( ) => setDisconnectReason ( ) } >
218
212
< Text style = { dialogStyles . modalTitle } >
@@ -236,10 +230,12 @@ const ServerScreen = () => {
236
230
</ View >
237
231
</ Dialog >
238
232
) }
239
- < Dialog visible = { addServerDialogOpen } onRequestClose = { cancelAddServer } >
240
- < Text style = { dialogStyles . modalTitle } > Add Server</ Text >
233
+ < Dialog visible = { ! ! editServerDialogOpen } onRequestClose = { cancelAddServer } >
234
+ < Text style = { dialogStyles . modalTitle } >
235
+ { typeof editServerDialogOpen === 'string' ? 'Edit' : 'Add' } Server
236
+ </ Text >
241
237
< TextField
242
- red = { ! ! servers [ newServerName ] || serverNameRed || invalidServerName }
238
+ red = { serverNameRed || invalidServerName }
243
239
value = { newServerName }
244
240
onChangeText = { setNewServerName }
245
241
placeholder = 'Server Name'
@@ -264,28 +260,31 @@ const ServerScreen = () => {
264
260
< Picker . Item label = '1.16.4/1.16.5' value = '1.16.4' />
265
261
</ Picker >
266
262
< View style = { dialogStyles . modalButtons } >
263
+ { typeof editServerDialogOpen === 'string' && (
264
+ < Pressable
265
+ onPress = { deleteServer }
266
+ android_ripple = { { color : '#aaa' } }
267
+ style = { dialogStyles . modalButton }
268
+ >
269
+ < Text style = { styles . deleteServerButtonText } > DELETE</ Text >
270
+ </ Pressable >
271
+ ) }
267
272
< View style = { globalStyle . flexSpacer } />
268
273
< Pressable
269
274
onPress = { cancelAddServer }
270
275
android_ripple = { { color : '#aaa' } }
271
276
style = { dialogStyles . modalButton }
272
277
>
273
- < Text
274
- style = {
275
- darkMode
276
- ? dialogStyles . modalButtonCancelDarkText
277
- : dialogStyles . modalButtonCancelText
278
- }
279
- >
280
- CANCEL
281
- </ Text >
278
+ < Text style = { modalButtonCancelText } > CANCEL</ Text >
282
279
</ Pressable >
283
280
< Pressable
284
- onPress = { addServer }
281
+ onPress = { ( ) => editServer ( ) }
285
282
android_ripple = { { color : '#aaa' } }
286
283
style = { dialogStyles . modalButton }
287
284
>
288
- < Text style = { dialogStyles . modalButtonText } > ADD</ Text >
285
+ < Text style = { dialogStyles . modalButtonText } >
286
+ { typeof editServerDialogOpen === 'string' ? 'EDIT' : 'ADD' }
287
+ </ Text >
289
288
</ Pressable >
290
289
</ View >
291
290
</ Dialog >
@@ -294,7 +293,7 @@ const ServerScreen = () => {
294
293
< View style = { globalStyle . flexSpacer } />
295
294
< Ionicons . Button
296
295
name = 'add'
297
- onPress = { ( ) => setAddServerDialogOpen ( true ) }
296
+ onPress = { ( ) => setEditServerDialogOpen ( true ) }
298
297
iconStyle = { globalStyle . iconStyle }
299
298
>
300
299
< Text style = { globalStyle . iconButtonText } > Add</ Text >
@@ -319,7 +318,7 @@ const ServerScreen = () => {
319
318
< ElevatedView key = { server } style = { styles . serverView } >
320
319
< Pressable
321
320
onPress = { async ( ) => await connectToServer ( server ) }
322
- onLongPress = { ( ) => setEditServerDialogOpen ( server ) }
321
+ onLongPress = { ( ) => openEditServerDialog ( server ) }
323
322
android_ripple = { { color : '#aaa' } }
324
323
style = { styles . serverPressable }
325
324
>
@@ -406,10 +405,9 @@ const styles = StyleSheet.create({
406
405
serverName : { fontSize : 20 , fontWeight : 'bold' } ,
407
406
serverPlayers : { fontSize : 12 , fontWeight : 'bold' } ,
408
407
serverDescription : { fontSize : 14 } ,
409
- deleteServerText : { fontSize : 16 } ,
410
- deleteServerDialog : { padding : 0 } ,
411
408
addServerPickerDark : { color : '#ffffff' } ,
412
- addServerPicker : { color : '#000000' }
409
+ addServerPicker : { color : '#000000' } ,
410
+ deleteServerButtonText : { color : '#ff0000' , fontWeight : 'bold' }
413
411
} )
414
412
415
413
export default ServerScreen
0 commit comments