Skip to content

Commit

Permalink
[improvement] implemented add pets support
Browse files Browse the repository at this point in the history
  • Loading branch information
Achintha Isuru committed May 3, 2024
1 parent 2df2686 commit 90d90c9
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ import androidx.compose.material3.OutlinedTextFieldDefaults
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
Expand All @@ -34,16 +38,18 @@ internal fun AddPetScreen(
val state = viewModel.state.collectAsStateWithLifecycle()

val navigateToHome: () -> Unit = viewModel::navigateToHome
val addPets: (name: String, breed: String, dateOfBirth: String) -> Unit = viewModel::addPets

LoadingDialog(isLoading = state.value.isLoading)
AddPetScreenContent(state.value, navigateToHome)
AddPetScreenContent(state.value, navigateToHome, addPets)
}

@Composable
@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter")
fun AddPetScreenContent(
state: AddPetScreenState,
navigateToHome: () -> Unit = {}
navigateToHome: () -> Unit = {},
addPets: (name: String, breed: String, dateOfBirth: String) -> Unit = { _, _, _ -> }
) {
Scaffold(
modifier = Modifier
Expand All @@ -65,9 +71,13 @@ fun AddPetScreenContent(
verticalArrangement = Arrangement.spacedBy(16.dp),
modifier = Modifier.padding(horizontal = 32.dp)
) {
var name by remember { mutableStateOf("") }
var breed by remember { mutableStateOf("") }
var dateOfBirth by remember { mutableStateOf("") }

OutlinedTextField(
value = "",
onValueChange = { },
value = name,
onValueChange = { name = it },
label = { Text(text = "Pet Name") },
modifier = Modifier.fillMaxWidth(),
shape = MaterialTheme.shapes.medium,
Expand All @@ -81,8 +91,8 @@ fun AddPetScreenContent(
)
)
OutlinedTextField(
value = "",
onValueChange = { },
value = breed,
onValueChange = { breed = it },
label = { Text(text = "Pet Breed") },
modifier = Modifier.fillMaxWidth(),
shape = MaterialTheme.shapes.medium,
Expand All @@ -96,8 +106,8 @@ fun AddPetScreenContent(
)
)
OutlinedTextField(
value = "",
onValueChange = { },
value = dateOfBirth,
onValueChange = { dateOfBirth = it },
label = { Text(text = "Date of Birth") },
modifier = Modifier.fillMaxWidth(),
shape = MaterialTheme.shapes.medium,
Expand All @@ -111,7 +121,7 @@ fun AddPetScreenContent(
)
)
Button(
onClick = { },
onClick = { addPets(name, breed, dateOfBirth) },
modifier = Modifier
.fillMaxWidth()
.padding(top = 8.dp)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,21 @@ package com.wso2_sample.api_auth_sample.features.home.presentation.screens.add_p
import android.content.Context
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.wso2_sample.api_auth_sample.features.home.domain.repository.PetRepository
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
import com.wso2_sample.api_auth_sample.features.login.domain.repository.AsgardeoAuthRepository
import com.wso2_sample.api_auth_sample.util.navigation.NavigationViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import javax.inject.Inject

@HiltViewModel
class AddPetScreenViewModel @Inject constructor(
asgardeoAuthRepository: AsgardeoAuthRepository,
@ApplicationContext private val applicationContext: Context,
private val petRepository: PetRepository
) : ViewModel() {

companion object {
Expand All @@ -33,4 +36,39 @@ class AddPetScreenViewModel @Inject constructor(
)
}
}

fun addPets(
name: String,
breed: String,
dateOfBirth: String
) {
viewModelScope.launch {
_state.update {
it.copy(
isLoading = true
)
}
tokenProvider.performAction(applicationContext) { accessToken, _ ->
viewModelScope.launch {
runCatching {
petRepository.addPet(
accessToken = accessToken!!,
name = name,
breed = breed,
dateOfBirth = dateOfBirth
)
}.onSuccess {
_state.update {
it.copy(isLoading = false)
}
}.onFailure { e ->
_state.update {
it.copy(error = e.message!!, isLoading = false)
}
}
}
}

}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,11 @@ class HomeScreenViewModel @Inject constructor(
petRepository.getPets(accessToken!!)
}.onSuccess { pets ->
_state.update {
it.copy(pets = pets!!)
it.copy(pets = pets!!, isLoading = false)
}
}.onFailure { e ->
_state.update {
it.copy(error = e.message!!)
it.copy(error = e.message!!, isLoading = false)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,8 @@ class ProfileScreenViewModel @Inject constructor(
} catch (e: Exception) {
_state.update {
it.copy(
error = e.message!!
error = e.message!!,
isLoading = false
)
}
}
Expand Down

0 comments on commit 90d90c9

Please sign in to comment.