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(
freezer_id = backStackEntry.arguments?.getString("freezer_id")!!.toInt(),
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 {
override val icon = Icons.Default.DateRange
override val destinationName = R.string.home_card_freezer
override val route = "freezer_item_list/"
override val route = "freezer_item_list"
}
object FreezerItemDetail : ThuisDestination {

View File

@@ -1,6 +1,7 @@
package com.mitchelbv.thuis_c.network.thuis
import com.mitchelbv.thuis_c.network.thuis.responses.*
import retrofit2.Response
import retrofit2.http.*
interface ThuisService {
@@ -54,7 +55,7 @@ interface ThuisService {
// Put
@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("api/FreezerItem/{id}")

View File

@@ -8,7 +8,7 @@ data class FreezerItem(
@SerializedName("item") var item: String? = null,
@SerializedName("amount") var amount: 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
)

View File

@@ -4,15 +4,15 @@ import androidx.compose.foundation.layout.*
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.*
import androidx.compose.material3.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.res.stringResource
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
import com.mitchelbv.thuis_c.R
import com.mitchelbv.thuis_c.network.thuis.responses.FreezerItem
import com.mitchelbv.thuis_c.ui.theme.ThuisTypography
import okhttp3.internal.notifyAll
// Is the destination of FreezerItemListDestination
@Composable
@@ -23,7 +23,24 @@ fun FreezerItemListScreen(
) {
val freezerItemListUiState by freezerItemListViewModel.uiState.collectAsState()
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
@@ -45,18 +62,28 @@ fun FreezerItemElement(
onEditItem: (Int) -> Unit
) {
ListItem(
headlineText = { Text(freezerItem.item!!) },
supportingText = { Text("${stringResource(R.string.freezer_item_drawer_partial)} ${freezerItem.drawer!!}") },
headlineText = { Text("${freezerItem.item}") },
supportingText = { Text("${stringResource(R.string.freezer_item_drawer_partial)} ${freezerItem.drawer}") },
trailingContent = {
Row(
verticalAlignment = Alignment.CenterVertically,
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")
}
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")
}
TextButton(onClick = { onEditItem(freezerItem.freezerItemId!!) }) {

View File

@@ -1,5 +1,6 @@
package com.mitchelbv.thuis_c.views.freezer.item_list
import android.util.Log
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
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.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import retrofit2.HttpException
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() {
private val _uiState = MutableStateFlow(FreezerItemListUiState())
@@ -34,19 +41,30 @@ class FreezerItemListViewModel : ViewModel() {
}
// new model instead of this?
fun UpdateItemAmount(item_id: Int, operation: Int) {
fun UpdateItemAmount(item_id: Int, newAmount: Int) {
viewModelScope.launch(Dispatchers.IO) {
try {
val itemList = _uiState.value.items
val indexFreezerItem =
uiState.value.items.indexOf(uiState.value.items.find { a -> a.freezerItemId == item_id })
val freezerItemToUpdate = uiState.value.items[indexFreezerItem]
freezerItemToUpdate.amount?.plus(operation)
itemList.indexOf(uiState.value.items.find { a -> a.freezerItemId == item_id })
val freezerItemToUpdate = itemList[indexFreezerItem]
freezerItemToUpdate.amount = newAmount
val apiResponse =
ThuisRetrofitHelper.thuis.putFreezerItem(item_id, freezerItemToUpdate)
} catch (e: ConnectException) {
// Nothing to do really?
// Maybe a snackbar...
_uiState.update { currentState ->
currentState.copy(items = itemList)
}
} 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")
}
}
}
}