Add DeleteFeedDialog in FeedTab

This commit is contained in:
Shinokuni 2024-01-17 16:42:03 +01:00
parent 215399d3ac
commit a6d753ef8a
6 changed files with 97 additions and 13 deletions

View File

@ -11,8 +11,11 @@ data class FeedState(
sealed interface DialogState {
object AddFeed : DialogState
object AddFolder : DialogState
class DeleteFeed(val feed: Feed) : DialogState
class DeleteFolder(val folder: Folder) : DialogState
class UpdateFeed(val feed: Feed) : DialogState
class UpdateFolder(val folder: Folder) : DialogState
class FeedSheet(val feed: Feed, val folder: Folder?) : DialogState
}

View File

@ -28,6 +28,9 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import cafe.adriel.voyager.navigator.tab.Tab
import cafe.adriel.voyager.navigator.tab.TabOptions
import com.readrops.app.compose.R
import com.readrops.app.compose.feeds.dialogs.AddFeedDialog
import com.readrops.app.compose.feeds.dialogs.DeleteFeedDialog
import com.readrops.app.compose.feeds.dialogs.FeedModalBottomSheet
import com.readrops.app.compose.util.components.Placeholder
import com.readrops.db.entities.Feed
import org.koin.androidx.compose.getViewModel
@ -60,19 +63,37 @@ object FeedTab : Tab {
},
)
}
is DialogState.DeleteFeed -> {}
is DialogState.DeleteFeed -> {
DeleteFeedDialog(
feed = dialog.feed,
onDismiss = { viewModel.closeDialog() },
onDelete = {
viewModel.deleteFeed(dialog.feed)
viewModel.closeDialog()
}
)
}
is DialogState.FeedSheet -> {
FeedModalBottomSheet(
feed = dialog.feed,
folder = dialog.folder,
onDismissRequest = { viewModel.closeDialog() },
onOpen = { uriHandler.openUri(dialog.feed.siteUrl!!) },
onOpen = {
uriHandler.openUri(dialog.feed.siteUrl!!)
viewModel.closeDialog()
},
onModify = { },
onUpdateColor = {},
onDelete = {},
onDelete = { viewModel.openDialog(DialogState.DeleteFeed(dialog.feed)) },
)
}
is DialogState.UpdateFeed -> {}
DialogState.AddFolder -> {}
is DialogState.DeleteFolder -> {}
is DialogState.UpdateFolder -> {}
null -> {}
}
@ -102,7 +123,8 @@ object FeedTab : Tab {
) {
when (state.foldersAndFeeds) {
is FolderAndFeedsState.LoadedState -> {
val foldersAndFeeds = (state.foldersAndFeeds as FolderAndFeedsState.LoadedState).values
val foldersAndFeeds =
(state.foldersAndFeeds as FolderAndFeedsState.LoadedState).values
if (foldersAndFeeds.isNotEmpty()) {
LazyColumn {
@ -119,7 +141,14 @@ object FeedTab : Tab {
FolderExpandableItem(
folder = folderWithFeeds.first!!,
feeds = folderWithFeeds.second,
onFeedClick = { feed -> viewModel.openFeedSheet(feed, folderWithFeeds.first) },
onFeedClick = { feed ->
viewModel.openDialog(
DialogState.FeedSheet(
feed,
folderWithFeeds.first
)
)
},
onFeedLongClick = { feed -> onFeedLongClick(feed) }
)
} else {
@ -128,7 +157,11 @@ object FeedTab : Tab {
for (feed in feeds) {
FeedItem(
feed = feed,
onClick = { viewModel.openFeedSheet(feed, null) },
onClick = {
viewModel.openDialog(
DialogState.FeedSheet(feed, null)
)
},
onLongClick = { onFeedLongClick(feed) },
)
}
@ -156,7 +189,7 @@ object FeedTab : Tab {
modifier = Modifier
.align(Alignment.BottomEnd)
.padding(16.dp),
onClick = { viewModel.openAddFeedDialog() }
onClick = { viewModel.openDialog(DialogState.AddFeed) }
) {
Icon(
imageVector = Icons.Default.Add,

View File

@ -8,7 +8,6 @@ import com.readrops.app.compose.base.TabViewModel
import com.readrops.app.compose.repositories.GetFoldersWithFeeds
import com.readrops.db.Database
import com.readrops.db.entities.Feed
import com.readrops.db.entities.Folder
import com.readrops.db.entities.account.Account
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow
@ -67,10 +66,13 @@ class FeedViewModel(
fun closeDialog() = _feedState.update { it.copy(dialog = null) }
fun openAddFeedDialog() = _feedState.update { it.copy(dialog = DialogState.AddFeed) }
fun openDialog(state: DialogState) = _feedState.update { it.copy(dialog = state) }
fun openFeedSheet(feed: Feed, folder: Folder?) =
_feedState.update { it.copy(dialog = DialogState.FeedSheet(feed, folder)) }
fun deleteFeed(feed: Feed) {
viewModelScope.launch(Dispatchers.IO) {
repository?.deleteFeed(feed)
}
}
fun setAddFeedDialogURL(url: String) {
_addFeedDialogState.update {

View File

@ -1,4 +1,4 @@
package com.readrops.app.compose.feeds
package com.readrops.app.compose.feeds.dialogs
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
@ -32,6 +32,7 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.readrops.app.compose.R
import com.readrops.app.compose.feeds.FeedViewModel
import com.readrops.app.compose.util.theme.LargeSpacer
import com.readrops.app.compose.util.theme.MediumSpacer
import com.readrops.app.compose.util.theme.ShortSpacer

View File

@ -0,0 +1,45 @@
package com.readrops.app.compose.feeds.dialogs
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Delete
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Icon
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
import com.readrops.db.entities.Feed
@Composable
fun DeleteFeedDialog(
feed: Feed,
onDismiss: () -> Unit,
onDelete: () -> Unit,
) {
AlertDialog(
onDismissRequest = onDismiss,
icon = {
Icon(
imageVector = Icons.Default.Delete,
contentDescription = null,
)
},
title = {
Text(text = "Delete feed")
},
text = {
Text(text = "Do you want to delete feed ${feed.name}?")
},
confirmButton = {
TextButton(onClick = onDelete) {
Text(text = "Delete")
}
},
dismissButton = {
TextButton(
onClick = onDismiss
) {
Text(text = "Cancel")
}
},
)
}

View File

@ -1,4 +1,4 @@
package com.readrops.app.compose.feeds
package com.readrops.app.compose.feeds.dialogs
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement