make DateTimeAdded optional
Trying to make amount dynamic Fix in route
This commit is contained in:
@@ -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...
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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}")
|
||||
|
||||
@@ -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
|
||||
|
||||
)
|
||||
@@ -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!!) }) {
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user