make DateTimeAdded optional

Trying to make amount dynamic

Fix in route
This commit is contained in:
KaasKop-
2023-04-10 21:23:02 +02:00
parent da2c98ce83
commit 5a00cd8f32
6 changed files with 66 additions and 20 deletions

View File

@@ -90,7 +90,7 @@ class MainActivity : ComponentActivity() {
FreezerItemListScreen( FreezerItemListScreen(
freezer_id = backStackEntry.arguments?.getString("freezer_id")!!.toInt(), freezer_id = backStackEntry.arguments?.getString("freezer_id")!!.toInt(),
onEditItem = { onEditItem = {
// I want onClickItem to open a modal dialog, so not sure if this is needed here... // I want onEditItem to open a modal dialog, so not sure if this is needed here...
}) })
} }
} }

View File

@@ -38,7 +38,7 @@ object FreezerListDestination : ThuisDestination {
object FreezerItemListDestination : ThuisDestination { object FreezerItemListDestination : ThuisDestination {
override val icon = Icons.Default.DateRange override val icon = Icons.Default.DateRange
override val destinationName = R.string.home_card_freezer override val destinationName = R.string.home_card_freezer
override val route = "freezer_item_list/" override val route = "freezer_item_list"
} }
object FreezerItemDetail : ThuisDestination { object FreezerItemDetail : ThuisDestination {

View File

@@ -1,6 +1,7 @@
package com.mitchelbv.thuis_c.network.thuis package com.mitchelbv.thuis_c.network.thuis
import com.mitchelbv.thuis_c.network.thuis.responses.* import com.mitchelbv.thuis_c.network.thuis.responses.*
import retrofit2.Response
import retrofit2.http.* import retrofit2.http.*
interface ThuisService { interface ThuisService {
@@ -54,7 +55,7 @@ interface ThuisService {
// Put // Put
@PUT("api/FreezerItem/{id}") @PUT("api/FreezerItem/{id}")
suspend fun putFreezerItem(@Path("id") id: Int, @Body freezerItem: FreezerItem): FreezerItem suspend fun putFreezerItem(@Path("id") id: Int, @Body freezerItem: FreezerItem): Response<Unit>
// Delete // Delete
@DELETE("api/FreezerItem/{id}") @DELETE("api/FreezerItem/{id}")

View File

@@ -8,7 +8,7 @@ data class FreezerItem(
@SerializedName("item") var item: String? = null, @SerializedName("item") var item: String? = null,
@SerializedName("amount") var amount: Int? = null, @SerializedName("amount") var amount: Int? = null,
@SerializedName("drawer") var drawer: Int? = null, @SerializedName("drawer") var drawer: Int? = null,
@SerializedName("dateTimeAdded") var dateTimeAdded: String? = null, @SerializedName("dateTimeAdded") var dateTimeAdded: String? = "",
@SerializedName("freezerId") var freezerId: Int? = null @SerializedName("freezerId") var freezerId: Int? = null
) )

View File

@@ -4,15 +4,15 @@ import androidx.compose.foundation.layout.*
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.* import androidx.compose.material.icons.filled.*
import androidx.compose.material3.* import androidx.compose.material3.*
import androidx.compose.runtime.Composable import androidx.compose.runtime.*
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel import androidx.lifecycle.viewmodel.compose.viewModel
import com.mitchelbv.thuis_c.R import com.mitchelbv.thuis_c.R
import com.mitchelbv.thuis_c.network.thuis.responses.FreezerItem import com.mitchelbv.thuis_c.network.thuis.responses.FreezerItem
import com.mitchelbv.thuis_c.ui.theme.ThuisTypography import com.mitchelbv.thuis_c.ui.theme.ThuisTypography
import okhttp3.internal.notifyAll
// Is the destination of FreezerItemListDestination // Is the destination of FreezerItemListDestination
@Composable @Composable
@@ -23,7 +23,24 @@ fun FreezerItemListScreen(
) { ) {
val freezerItemListUiState by freezerItemListViewModel.uiState.collectAsState() val freezerItemListUiState by freezerItemListViewModel.uiState.collectAsState()
freezerItemListViewModel.fillItemList(freezer_id) freezerItemListViewModel.fillItemList(freezer_id)
FreezerItemList(freezerItemListUiState.items, arrowPressed = { kaas: Int, baas: Int -> freezerItemListViewModel.UpdateItemAmount(kaas, baas) }, onEditItem = onEditItem) freezerItemListUiState.items.forEach { freezerItem ->
FreezerItemElement(freezerItem = freezerItem, arrowPressed = { kaas: Int, baas: Int ->
freezerItemListViewModel.UpdateItemAmount(
kaas,
baas
)
}, onEditItem = onEditItem)
}
// FreezerItemList(
// freezerItemListUiState.items,
// arrowPressed = { kaas: Int, baas: Int ->
// freezerItemListViewModel.UpdateItemAmount(
// kaas,
// baas
// )
// },
// onEditItem = onEditItem
// )
} }
@Composable @Composable
@@ -45,18 +62,28 @@ fun FreezerItemElement(
onEditItem: (Int) -> Unit onEditItem: (Int) -> Unit
) { ) {
ListItem( ListItem(
headlineText = { Text(freezerItem.item!!) }, headlineText = { Text("${freezerItem.item}") },
supportingText = { Text("${stringResource(R.string.freezer_item_drawer_partial)} ${freezerItem.drawer!!}") }, supportingText = { Text("${stringResource(R.string.freezer_item_drawer_partial)} ${freezerItem.drawer}") },
trailingContent = { trailingContent = {
Row( Row(
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.SpaceEvenly horizontalArrangement = Arrangement.SpaceEvenly
) { ) {
TextButton(onClick = { arrowPressed(freezerItem.freezerItemId!!, 1) }) { TextButton(onClick = {
arrowPressed(
freezerItem.freezerItemId!!,
freezerItem.amount!!.minus(1)
)
}) {
Icon(Icons.Default.KeyboardArrowDown, contentDescription = "Minus one") Icon(Icons.Default.KeyboardArrowDown, contentDescription = "Minus one")
} }
Text("${freezerItem.amount}", style = ThuisTypography.bodyLarge) Text("${freezerItem.amount}", style = ThuisTypography.bodyLarge)
TextButton(onClick = { arrowPressed(freezerItem.freezerItemId!!, -1) }) { TextButton(onClick = {
arrowPressed(
freezerItem.freezerItemId!!,
freezerItem.amount!!.plus(1)
)
}) {
Icon(Icons.Default.KeyboardArrowUp, contentDescription = "Plus one") Icon(Icons.Default.KeyboardArrowUp, contentDescription = "Plus one")
} }
TextButton(onClick = { onEditItem(freezerItem.freezerItemId!!) }) { TextButton(onClick = { onEditItem(freezerItem.freezerItemId!!) }) {

View File

@@ -1,5 +1,6 @@
package com.mitchelbv.thuis_c.views.freezer.item_list package com.mitchelbv.thuis_c.views.freezer.item_list
import android.util.Log
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.mitchelbv.thuis_c.network.thuis.ThuisRetrofitHelper import com.mitchelbv.thuis_c.network.thuis.ThuisRetrofitHelper
@@ -8,10 +9,16 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import retrofit2.HttpException
import java.net.ConnectException import java.net.ConnectException
import java.net.SocketTimeoutException
data class FreezerItemListUiState(var items: List<FreezerItem> = mutableListOf()) data class FreezerItemListUiState(
var items: List<FreezerItem> = listOf(),
var error: String = ""
)
class FreezerItemListViewModel : ViewModel() { class FreezerItemListViewModel : ViewModel() {
private val _uiState = MutableStateFlow(FreezerItemListUiState()) private val _uiState = MutableStateFlow(FreezerItemListUiState())
@@ -34,19 +41,30 @@ class FreezerItemListViewModel : ViewModel() {
} }
// new model instead of this? // new model instead of this?
fun UpdateItemAmount(item_id: Int, operation: Int) { fun UpdateItemAmount(item_id: Int, newAmount: Int) {
viewModelScope.launch(Dispatchers.IO) { viewModelScope.launch(Dispatchers.IO) {
try { try {
val itemList = _uiState.value.items
val indexFreezerItem = val indexFreezerItem =
uiState.value.items.indexOf(uiState.value.items.find { a -> a.freezerItemId == item_id }) itemList.indexOf(uiState.value.items.find { a -> a.freezerItemId == item_id })
val freezerItemToUpdate = uiState.value.items[indexFreezerItem] val freezerItemToUpdate = itemList[indexFreezerItem]
freezerItemToUpdate.amount?.plus(operation) freezerItemToUpdate.amount = newAmount
val apiResponse = val apiResponse =
ThuisRetrofitHelper.thuis.putFreezerItem(item_id, freezerItemToUpdate) ThuisRetrofitHelper.thuis.putFreezerItem(item_id, freezerItemToUpdate)
} catch (e: ConnectException) { _uiState.update { currentState ->
// Nothing to do really? currentState.copy(items = itemList)
// Maybe a snackbar...
} }
} catch (e: HttpException) {
// Display a snackbar...
Log.d(
this.javaClass.name.toString(),
"HttpException: ${e.code()} ${e.response()!!.errorBody()!!.string()}"
)
} catch (e: SocketTimeoutException) {
// Also display a snackbar
Log.d(this.javaClass.name.toString(), "Timeout")
}
} }
} }
} }