Add unfold more/unfold less action in FeedTab
This commit is contained in:
parent
a3c9e0a89e
commit
bfd54e1b19
@ -9,6 +9,7 @@ import com.readrops.db.entities.account.AccountType
|
|||||||
data class FeedState(
|
data class FeedState(
|
||||||
val foldersAndFeeds: FolderAndFeedsState = FolderAndFeedsState.InitialState,
|
val foldersAndFeeds: FolderAndFeedsState = FolderAndFeedsState.InitialState,
|
||||||
val dialog: DialogState? = null,
|
val dialog: DialogState? = null,
|
||||||
|
val areFoldersExpanded: Boolean = false
|
||||||
)
|
)
|
||||||
|
|
||||||
sealed interface DialogState {
|
sealed interface DialogState {
|
||||||
|
@ -10,7 +10,6 @@ import androidx.compose.foundation.lazy.items
|
|||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.filled.Add
|
import androidx.compose.material.icons.filled.Add
|
||||||
import androidx.compose.material.icons.filled.Delete
|
import androidx.compose.material.icons.filled.Delete
|
||||||
import androidx.compose.material.icons.filled.MoreVert
|
|
||||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
import androidx.compose.material3.FloatingActionButton
|
import androidx.compose.material3.FloatingActionButton
|
||||||
import androidx.compose.material3.Icon
|
import androidx.compose.material3.Icon
|
||||||
@ -166,10 +165,13 @@ object FeedTab : Tab {
|
|||||||
title = { Text(text = "Feeds") },
|
title = { Text(text = "Feeds") },
|
||||||
actions = {
|
actions = {
|
||||||
IconButton(
|
IconButton(
|
||||||
onClick = {}
|
onClick = { viewModel.setFolderExpandState(state.areFoldersExpanded.not()) }
|
||||||
) {
|
) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Default.MoreVert,
|
painter = painterResource(id = if (state.areFoldersExpanded)
|
||||||
|
R.drawable.ic_unfold_less
|
||||||
|
else
|
||||||
|
R.drawable.ic_unfold_more),
|
||||||
contentDescription = null
|
contentDescription = null
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -231,6 +233,7 @@ object FeedTab : Tab {
|
|||||||
FolderExpandableItem(
|
FolderExpandableItem(
|
||||||
folder = folder,
|
folder = folder,
|
||||||
feeds = folderWithFeeds.second,
|
feeds = folderWithFeeds.second,
|
||||||
|
isExpanded = state.areFoldersExpanded,
|
||||||
onFeedClick = { feed ->
|
onFeedClick = { feed ->
|
||||||
viewModel.openDialog(
|
viewModel.openDialog(
|
||||||
DialogState.FeedSheet(feed, folder)
|
DialogState.FeedSheet(feed, folder)
|
||||||
|
@ -90,6 +90,9 @@ class FeedViewModel(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun setFolderExpandState(isExpanded: Boolean) =
|
||||||
|
_feedState.update { it.copy(areFoldersExpanded = isExpanded) }
|
||||||
|
|
||||||
fun closeDialog() = _feedState.update { it.copy(dialog = null) }
|
fun closeDialog() = _feedState.update { it.copy(dialog = null) }
|
||||||
|
|
||||||
fun openDialog(state: DialogState) {
|
fun openDialog(state: DialogState) {
|
||||||
@ -302,7 +305,9 @@ class FeedViewModel(
|
|||||||
if (updateFolder) {
|
if (updateFolder) {
|
||||||
repository?.updateFolder(_folderState.value.folder)
|
repository?.updateFolder(_folderState.value.folder)
|
||||||
} else {
|
} else {
|
||||||
repository?.addFolder(_folderState.value.folder.apply { accountId = currentAccount!!.id })
|
repository?.addFolder(_folderState.value.folder.apply {
|
||||||
|
accountId = currentAccount!!.id
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
closeDialog()
|
closeDialog()
|
||||||
|
@ -19,6 +19,7 @@ import androidx.compose.material3.IconButton
|
|||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
@ -37,14 +38,19 @@ import com.readrops.db.entities.Folder
|
|||||||
fun FolderExpandableItem(
|
fun FolderExpandableItem(
|
||||||
folder: Folder,
|
folder: Folder,
|
||||||
feeds: List<Feed>,
|
feeds: List<Feed>,
|
||||||
|
isExpanded: Boolean = false,
|
||||||
onFeedClick: (Feed) -> Unit,
|
onFeedClick: (Feed) -> Unit,
|
||||||
onFeedLongClick: (Feed) -> Unit,
|
onFeedLongClick: (Feed) -> Unit,
|
||||||
onUpdateFolder: () -> Unit,
|
onUpdateFolder: () -> Unit,
|
||||||
onDeleteFolder: () -> Unit
|
onDeleteFolder: () -> Unit
|
||||||
) {
|
) {
|
||||||
var isExpanded by remember { mutableStateOf(false) }
|
var isFolderExpanded by remember { mutableStateOf(false) }
|
||||||
var isDropDownMenuExpanded by remember { mutableStateOf(false) }
|
var isDropDownMenuExpanded by remember { mutableStateOf(false) }
|
||||||
|
|
||||||
|
LaunchedEffect(isExpanded) {
|
||||||
|
isFolderExpanded = isExpanded
|
||||||
|
}
|
||||||
|
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.animateContentSize(
|
.animateContentSize(
|
||||||
@ -56,7 +62,7 @@ fun FolderExpandableItem(
|
|||||||
) {
|
) {
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.clickable { isExpanded = isExpanded.not() }
|
.clickable { isFolderExpanded = isFolderExpanded.not() }
|
||||||
.padding(
|
.padding(
|
||||||
horizontal = MaterialTheme.spacing.shortSpacing,
|
horizontal = MaterialTheme.spacing.shortSpacing,
|
||||||
vertical = MaterialTheme.spacing.veryShortSpacing,
|
vertical = MaterialTheme.spacing.veryShortSpacing,
|
||||||
@ -121,7 +127,7 @@ fun FolderExpandableItem(
|
|||||||
}
|
}
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
if (isExpanded) {
|
if (isFolderExpanded) {
|
||||||
for (feed in feeds) {
|
for (feed in feeds) {
|
||||||
FeedItem(
|
FeedItem(
|
||||||
feed = feed,
|
feed = feed,
|
||||||
|
5
appcompose/src/main/res/drawable/ic_unfold_less.xml
Normal file
5
appcompose/src/main/res/drawable/ic_unfold_less.xml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<vector android:height="24dp" android:tint="#000000"
|
||||||
|
android:viewportHeight="24" android:viewportWidth="24"
|
||||||
|
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<path android:fillColor="@android:color/white" android:pathData="M7.41,18.59L8.83,20 12,16.83 15.17,20l1.41,-1.41L12,14l-4.59,4.59zM16.59,5.41L15.17,4 12,7.17 8.83,4 7.41,5.41 12,10l4.59,-4.59z"/>
|
||||||
|
</vector>
|
5
appcompose/src/main/res/drawable/ic_unfold_more.xml
Normal file
5
appcompose/src/main/res/drawable/ic_unfold_more.xml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<vector android:height="24dp" android:tint="#000000"
|
||||||
|
android:viewportHeight="24" android:viewportWidth="24"
|
||||||
|
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<path android:fillColor="@android:color/white" android:pathData="M12,5.83L15.17,9l1.41,-1.41L12,3 7.41,7.59 8.83,9 12,5.83zM12,18.17L8.83,15l-1.41,1.41L12,21l4.59,-4.59L15.17,15 12,18.17z"/>
|
||||||
|
</vector>
|
Loading…
x
Reference in New Issue
Block a user