feat: handle case of join on joined server
This commit is contained in:
parent
990b495044
commit
2eada52212
|
|
@ -48,16 +48,18 @@ import androidx.lifecycle.viewModelScope
|
|||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import chat.stoat.R
|
||||
import chat.stoat.api.STOAT_FILES
|
||||
import chat.stoat.api.StoatAPI
|
||||
import chat.stoat.api.StoatAPIError
|
||||
import chat.stoat.api.routes.invites.fetchInviteByCode
|
||||
import chat.stoat.api.routes.invites.joinInviteByCode
|
||||
import chat.stoat.api.settings.LoadedSettings
|
||||
import chat.stoat.api.settings.SyncedSettings
|
||||
import chat.stoat.callbacks.ActionChannel
|
||||
import chat.stoat.composables.generic.IconPlaceholder
|
||||
import chat.stoat.composables.generic.RemoteImage
|
||||
import chat.stoat.core.model.schemas.Invite
|
||||
import chat.stoat.core.model.schemas.InviteJoined
|
||||
import chat.stoat.core.model.util.RsResult
|
||||
import chat.stoat.api.settings.LoadedSettings
|
||||
import chat.stoat.api.settings.SyncedSettings
|
||||
import chat.stoat.composables.generic.IconPlaceholder
|
||||
import chat.stoat.composables.generic.RemoteImage
|
||||
import chat.stoat.ui.theme.StoatTheme
|
||||
import com.bumptech.glide.integration.compose.ExperimentalGlideComposeApi
|
||||
import com.bumptech.glide.integration.compose.GlideImage
|
||||
|
|
@ -120,6 +122,12 @@ class InviteViewModel : ViewModel() {
|
|||
setJoinResult(result)
|
||||
}
|
||||
}
|
||||
|
||||
fun navigateToServer(channelId: String) {
|
||||
viewModelScope.launch {
|
||||
ActionChannel.send(chat.stoat.callbacks.Action.SwitchChannel(channelId))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalGlideComposeApi::class)
|
||||
|
|
@ -238,7 +246,12 @@ fun InviteScreen(
|
|||
Spacer(modifier = Modifier.height(8.dp))
|
||||
|
||||
Text(
|
||||
text = stringResource(id = R.string.invite_message),
|
||||
text = stringResource(
|
||||
id = if (StoatAPI.serverCache.containsKey(
|
||||
invite?.serverId
|
||||
)
|
||||
) R.string.invite_already_member else R.string.invite_message
|
||||
),
|
||||
textAlign = TextAlign.Center,
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
)
|
||||
|
|
@ -248,12 +261,25 @@ fun InviteScreen(
|
|||
Row {
|
||||
Button(
|
||||
onClick = {
|
||||
viewModel.joinInvite(inviteCode)
|
||||
if (StoatAPI.serverCache.containsKey(invite?.serverId)) {
|
||||
invite?.channelId?.let {
|
||||
viewModel.navigateToServer(it)
|
||||
}
|
||||
onFinish()
|
||||
} else {
|
||||
viewModel.joinInvite(inviteCode)
|
||||
}
|
||||
},
|
||||
modifier = Modifier
|
||||
.testTag("accept_invite")
|
||||
) {
|
||||
Text(text = stringResource(id = R.string.invite_join))
|
||||
Text(
|
||||
text = stringResource(
|
||||
id =
|
||||
if (StoatAPI.serverCache.containsKey(invite?.serverId)) R.string.invite_open_server
|
||||
else R.string.invite_join
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
Spacer(modifier = Modifier.width(8.dp))
|
||||
|
|
|
|||
|
|
@ -557,6 +557,7 @@
|
|||
<string name="invite_message">You\'ve been invited to join this server. Would you like to join?</string>
|
||||
<string name="invite_join">Join</string>
|
||||
<string name="invite_cancel">Cancel</string>
|
||||
<string name="invite_open_server">Open</string>
|
||||
<string name="invite_already_member">You are already a member of this server.</string>
|
||||
<string name="invite_error_header">There was an error</string>
|
||||
<string name="invite_error_no_invite">No invite code was specified.</string>
|
||||
|
|
|
|||
Loading…
Reference in New Issue