Skip to content

Commit

Permalink
Merge pull request #127 from canopas/manage-network-error-for-invitec…
Browse files Browse the repository at this point in the history
…odescreen

Fix the internet error for SpaceInviteCodeScreen.
  • Loading branch information
cp-sneh-s authored Dec 6, 2024
2 parents b105ccb + c400799 commit 03b32b9
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.hilt.navigation.compose.hiltViewModel
import com.canopas.yourspace.R
import com.canopas.yourspace.domain.utils.ConnectivityObserver
import com.canopas.yourspace.ui.component.AppBanner
import com.canopas.yourspace.ui.component.PrimaryButton
import com.canopas.yourspace.ui.theme.AppTheme

Expand All @@ -45,6 +47,12 @@ fun SpaceInvite() {
val viewModel = hiltViewModel<SpaceInviteCodeViewModel>()
val state by viewModel.state.collectAsState()

if (state.error != null) {
AppBanner(msg = state.error!!) {
viewModel.resetErrorState()
}
}

LaunchedEffect(Unit) {
viewModel.onStart()
}
Expand All @@ -68,7 +76,15 @@ fun SpaceInvite() {
},
actions = {
if (state.isUserAdmin) {
IconButton(onClick = { viewModel.regenerateInviteCode() }) {
IconButton(
onClick = {
if (state.connectivityStatus == ConnectivityObserver.Status.Available) {
viewModel.regenerateInviteCode()
} else {
viewModel.setErrorState(Exception())
}
}
) {
Icon(
imageVector = Icons.Default.Refresh,
contentDescription = ""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,15 @@ import com.canopas.yourspace.data.repository.SpaceRepository
import com.canopas.yourspace.data.service.auth.AuthService
import com.canopas.yourspace.data.service.space.SpaceInvitationService
import com.canopas.yourspace.data.utils.AppDispatcher
import com.canopas.yourspace.domain.utils.ConnectivityObserver
import com.canopas.yourspace.ui.navigation.AppDestinations.SpaceInvitation.KEY_INVITE_CODE
import com.canopas.yourspace.ui.navigation.AppDestinations.SpaceInvitation.KEY_SPACE_NAME
import com.canopas.yourspace.ui.navigation.AppNavigator
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import javax.inject.Inject

Expand All @@ -24,7 +26,8 @@ class SpaceInviteCodeViewModel @Inject constructor(
private val appDispatcher: AppDispatcher,
private val spaceRepository: SpaceRepository,
private val spaceInvitationService: SpaceInvitationService,
private val authService: AuthService
private val authService: AuthService,
private val connectivityObserver: ConnectivityObserver
) : ViewModel() {

val spaceInviteCode = savedStateHandle.get<String>(KEY_INVITE_CODE) ?: ""
Expand All @@ -33,6 +36,10 @@ class SpaceInviteCodeViewModel @Inject constructor(
private val _state = MutableStateFlow(InviteCodeState())
val state: StateFlow<InviteCodeState> = _state.asStateFlow()

init {
checkInternetConnection()
}

fun onStart() {
viewModelScope.launch(appDispatcher.IO) {
try {
Expand Down Expand Up @@ -82,10 +89,36 @@ class SpaceInviteCodeViewModel @Inject constructor(
}
fetchInviteCode()
}

fun checkInternetConnection() {
viewModelScope.launch(appDispatcher.IO) {
connectivityObserver.observe().collectLatest { status ->
_state.emit(
_state.value.copy(
connectivityStatus = status
)
)
}
}
}

fun resetErrorState() {
_state.value = _state.value.copy(error = null)
}

fun setErrorState(exception: Exception) {
viewModelScope.launch {
_state.emit(
_state.value.copy(error = exception)
)
}
}
}

data class InviteCodeState(
var inviteCode: String = "",
val spaceName: String = "",
var isUserAdmin: Boolean = false
var isUserAdmin: Boolean = false,
var error: Exception? = null,
val connectivityStatus: ConnectivityObserver.Status = ConnectivityObserver.Status.Available
)
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,12 @@ import com.canopas.yourspace.data.repository.SpaceRepository
import com.canopas.yourspace.data.service.auth.AuthService
import com.canopas.yourspace.data.service.space.SpaceInvitationService
import com.canopas.yourspace.data.utils.AppDispatcher
import com.canopas.yourspace.domain.utils.ConnectivityObserver
import com.canopas.yourspace.ui.navigation.AppDestinations.SpaceInvitation.KEY_INVITE_CODE
import com.canopas.yourspace.ui.navigation.AppDestinations.SpaceInvitation.KEY_SPACE_NAME
import com.canopas.yourspace.ui.navigation.AppNavigator
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import org.junit.Before
import org.junit.Rule
Expand All @@ -30,18 +32,22 @@ class SpaceInviteCodeViewModelTest {
private val spaceRepository = mock<SpaceRepository>()
private val spaceInvitationService = mock<SpaceInvitationService>()
private val authService = mock<AuthService>()
private val connectivityObserver = mock<ConnectivityObserver>()

private lateinit var viewModel: SpaceInviteCodeViewModel

@Before
fun setViewModel() {
whenever(connectivityObserver.observe()).thenReturn(flowOf(ConnectivityObserver.Status.Available))

viewModel = SpaceInviteCodeViewModel(
appNavigator = appNavigator,
savedStateHandle = savedStateHandle,
appDispatcher = testDispatcher,
spaceRepository = spaceRepository,
spaceInvitationService = spaceInvitationService,
authService = authService
authService = authService,
connectivityObserver = connectivityObserver
)
}

Expand Down

0 comments on commit 03b32b9

Please sign in to comment.