Refactor: Enhance server join flow and navigation
- Modified `DiscoverServersList` to accept an `onJoinToServerSuccess` callback, which is invoked with the server ID upon successful joining. - Updated `ServerInviteHandler` to pass the server ID to the `onJoinSuccess` callback. - Integrated the `onJoinToServerSuccess` callback in `ChannelSideDrawer` to navigate to the joined server after a successful join from the discover servers list.
This commit is contained in:
parent
39a948be1f
commit
0081ebc0c9
|
|
@ -33,10 +33,11 @@ import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
import chat.revolt.R
|
import chat.revolt.R
|
||||||
import chat.revolt.api.routes.googlesheets.ServerData
|
import chat.revolt.api.routes.googlesheets.ServerData
|
||||||
import chat.revolt.composables.screens.chat.discover.ServerInviteHandler
|
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun DiscoverServersList() {
|
fun DiscoverServersList(
|
||||||
|
onJoinToServerSuccess: (String) -> Unit,
|
||||||
|
) {
|
||||||
val viewModel = hiltViewModel<DiscoverServersListViewModel>()
|
val viewModel = hiltViewModel<DiscoverServersListViewModel>()
|
||||||
val uiState by viewModel.uiState.collectAsState()
|
val uiState by viewModel.uiState.collectAsState()
|
||||||
|
|
||||||
|
|
@ -47,14 +48,12 @@ fun DiscoverServersList() {
|
||||||
selectedServer?.let { server ->
|
selectedServer?.let { server ->
|
||||||
ServerInviteHandler(
|
ServerInviteHandler(
|
||||||
inviteCode = inviteCode,
|
inviteCode = inviteCode,
|
||||||
serverId = server.id,
|
|
||||||
viewModel = viewModel,
|
viewModel = viewModel,
|
||||||
onDismiss = {
|
onDismiss = {
|
||||||
viewModel.setSelectedInviteCode(null)
|
viewModel.setSelectedInviteCode(null)
|
||||||
},
|
},
|
||||||
onJoinSuccess = {
|
onJoinSuccess = { serverId ->
|
||||||
// Show a success message or navigate to the joined server
|
onJoinToServerSuccess(serverId)
|
||||||
viewModel.setSelectedInviteCode(null)
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,28 +1,23 @@
|
||||||
package chat.revolt.composables.screens.chat.discover
|
package chat.revolt.composables.screens.chat.discover
|
||||||
|
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
|
||||||
import androidx.compose.runtime.collectAsState
|
import androidx.compose.runtime.collectAsState
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.rememberCoroutineScope
|
import androidx.compose.runtime.rememberCoroutineScope
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
|
||||||
import chat.revolt.api.RevoltError
|
import chat.revolt.api.RevoltError
|
||||||
import chat.revolt.api.schemas.Invite
|
|
||||||
import chat.revolt.api.schemas.RsResult
|
|
||||||
import kotlinx.coroutines.flow.collectLatest
|
import kotlinx.coroutines.flow.collectLatest
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun ServerInviteHandler(
|
fun ServerInviteHandler(
|
||||||
inviteCode: String,
|
inviteCode: String,
|
||||||
serverId: String,
|
viewModel: DiscoverServersListViewModel = hiltViewModel(),
|
||||||
viewModel: DiscoverServersListViewModel = viewModel(),
|
|
||||||
onDismiss: () -> Unit = {},
|
onDismiss: () -> Unit = {},
|
||||||
onJoinSuccess: () -> Unit = {}
|
onJoinSuccess: (String) -> Unit = {}
|
||||||
) {
|
) {
|
||||||
val scope = rememberCoroutineScope()
|
val scope = rememberCoroutineScope()
|
||||||
var isJoining by remember { mutableStateOf(false) }
|
var isJoining by remember { mutableStateOf(false) }
|
||||||
|
|
@ -46,7 +41,10 @@ fun ServerInviteHandler(
|
||||||
if (result.ok) {
|
if (result.ok) {
|
||||||
showDialog = false
|
showDialog = false
|
||||||
viewModel.clearLoadedData()
|
viewModel.clearLoadedData()
|
||||||
onJoinSuccess()
|
uiState.loadedInviteData?.serverId?.let { serverId ->
|
||||||
|
onJoinSuccess(serverId)
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
error = result.error
|
error = result.error
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -461,7 +461,6 @@ fun ChannelSideDrawer(
|
||||||
serverBannerHeight + WindowInsets.statusBars.asPaddingValues()
|
serverBannerHeight + WindowInsets.statusBars.asPaddingValues()
|
||||||
.calculateTopPadding()
|
.calculateTopPadding()
|
||||||
)
|
)
|
||||||
//.offset(y = WindowInsets.statusBars.asPaddingValues().calculateTopPadding())
|
|
||||||
) {
|
) {
|
||||||
if (server?.banner != null) {
|
if (server?.banner != null) {
|
||||||
RemoteImage(
|
RemoteImage(
|
||||||
|
|
@ -562,7 +561,9 @@ fun ChannelSideDrawer(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (currentDestination is ChatRouterDestination.Discover) {
|
if (currentDestination is ChatRouterDestination.Discover) {
|
||||||
DiscoverServersList()
|
DiscoverServersList(
|
||||||
|
onJoinToServerSuccess = navigateToServer
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
if (currentServer == null) {
|
if (currentServer == null) {
|
||||||
DirectMessagesChannelListRenderer(
|
DirectMessagesChannelListRenderer(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue