From f7f2bce1533f2484a7fb4452645314ca5ffa5e57 Mon Sep 17 00:00:00 2001 From: Satindar Dhillon Date: Mon, 12 Dec 2022 13:58:34 -0800 Subject: [PATCH] handle context menu linkeditem action in view model --- .../omnivore/ui/home/HomeViewModel.kt | 30 +++++++++++++++---- .../omnivore/ui/home/LinkedItemCard.kt | 6 ++-- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/home/HomeViewModel.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/home/HomeViewModel.kt index 124cc718e..5c29a8127 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/home/HomeViewModel.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/home/HomeViewModel.kt @@ -8,8 +8,7 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import app.omnivore.omnivore.models.LinkedItem -import app.omnivore.omnivore.networking.Networker -import app.omnivore.omnivore.networking.search +import app.omnivore.omnivore.networking.* import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -91,11 +90,31 @@ class HomeViewModel @Inject constructor( fun handleLinkedItemAction(itemID: String, action: LinkedItemAction) { when (action) { LinkedItemAction.Delete -> { - Log.d("maxx", "delete action for id: $itemID") + removeItemFromList(itemID) + + viewModelScope.launch { + networker.deleteLinkedItem(itemID) + } } LinkedItemAction.Archive -> { - Log.d("maxx", "archive action for id: $itemID") + removeItemFromList(itemID) + viewModelScope.launch { + networker.archiveLinkedItem(itemID) + } } + LinkedItemAction.Unarchive -> { + removeItemFromList(itemID) + viewModelScope.launch { + networker.unarchiveLinkedItem(itemID) + } + } + } + } + + private fun removeItemFromList(itemID: String) { + itemsLiveData.value?.let { + val newList = it.filter { item -> item.id != itemID } + itemsLiveData.postValue(newList) } } @@ -112,5 +131,6 @@ class HomeViewModel @Inject constructor( enum class LinkedItemAction { Delete, - Archive + Archive, + Unarchive } diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/home/LinkedItemCard.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/home/LinkedItemCard.kt index 6258d8474..f6667b1b1 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/home/LinkedItemCard.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/home/LinkedItemCard.kt @@ -5,7 +5,6 @@ import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Delete -import androidx.compose.material.icons.outlined.Edit import androidx.compose.material.icons.outlined.List import androidx.compose.material3.* import androidx.compose.runtime.* @@ -88,9 +87,10 @@ fun LinkedItemCard(item: LinkedItem, onClickHandler: () -> Unit, actionHandler: onDismissRequest = { isMenuExpanded = false } ) { DropdownMenuItem( - text = { Text("Archive") }, + text = { Text(if (item.isArchived) "Unarchive" else "Archive") }, onClick = { - actionHandler(LinkedItemAction.Archive) + val action = if (item.isArchived) LinkedItemAction.Unarchive else LinkedItemAction.Archive + actionHandler(action) isMenuExpanded = false }, leadingIcon = {