Add DeleteFeedDialog in FeedTab
This commit is contained in:
parent
215399d3ac
commit
a6d753ef8a
@ -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
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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 {
|
||||
|
@ -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
|
@ -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")
|
||||
}
|
||||
},
|
||||
)
|
||||
}
|
@ -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
|
Loading…
x
Reference in New Issue
Block a user