@@ -6,18 +6,25 @@ import androidx.compose.foundation.lazy.LazyColumn
6
6
import androidx.compose.foundation.lazy.items
7
7
import androidx.compose.material3.ExperimentalMaterial3Api
8
8
import androidx.compose.material3.Scaffold
9
+ import androidx.compose.material3.SnackbarDuration
10
+ import androidx.compose.material3.SnackbarHost
11
+ import androidx.compose.material3.SnackbarHostState
12
+ import androidx.compose.material3.SnackbarResult
9
13
import androidx.compose.material3.Text
10
14
import androidx.compose.material3.TopAppBar
11
15
import androidx.compose.runtime.Composable
12
16
import androidx.compose.runtime.collectAsState
13
17
import androidx.compose.runtime.getValue
18
+ import androidx.compose.runtime.remember
19
+ import androidx.compose.runtime.rememberCoroutineScope
14
20
import androidx.compose.ui.Modifier
15
21
import androidx.lifecycle.viewmodel.compose.viewModel
16
22
import com.paulcoding.hviewer.model.PostItem
17
23
import com.paulcoding.hviewer.ui.component.HBackIcon
18
24
import com.paulcoding.hviewer.ui.component.HEmpty
19
25
import com.paulcoding.hviewer.ui.page.AppViewModel
20
26
import com.paulcoding.hviewer.ui.page.posts.PostCard
27
+ import kotlinx.coroutines.launch
21
28
22
29
@OptIn(ExperimentalMaterial3Api ::class )
23
30
@Composable
@@ -27,19 +34,42 @@ fun FavoritePage(
27
34
goBack : () -> Boolean
28
35
) {
29
36
val viewModel: AppViewModel = viewModel()
37
+ val snackbarHostState = remember { SnackbarHostState () }
38
+ val scope = rememberCoroutineScope()
30
39
val favoritePosts by viewModel.favoritePosts.collectAsState(initial = emptyList())
31
40
41
+ fun onDelete (post : PostItem ) {
42
+ appViewModel.deleteFavorite(post)
43
+
44
+ scope.launch {
45
+ val result = snackbarHostState.showSnackbar(
46
+ " ${post.name} removed from favorite" ,
47
+ " Undo" ,
48
+ duration = SnackbarDuration .Short
49
+ )
50
+ when (result) {
51
+ SnackbarResult .ActionPerformed -> {
52
+ appViewModel.addFavorite(post, true )
53
+ }
54
+
55
+ SnackbarResult .Dismissed -> {
56
+ }
57
+ }
58
+ }
59
+ }
60
+
32
61
Scaffold (
33
62
modifier = Modifier .fillMaxSize(),
63
+ snackbarHost = { SnackbarHost (snackbarHostState) },
34
64
topBar = {
35
65
TopAppBar (title = { Text (" Favorite" ) }, navigationIcon = {
36
66
HBackIcon { goBack() }
37
67
})
38
68
}) { paddings ->
39
69
LazyColumn (modifier = Modifier .padding(paddings)) {
40
- items(items = favoritePosts.reversed() , key = { it.url }) { item ->
41
- FavoriteItem (item, navToImages = { navToImages(it ) }, deleteFavorite = {
42
- appViewModel.deleteFavorite(it )
70
+ items(items = favoritePosts, key = { it.url }) { item ->
71
+ FavoriteItem (item, navToImages = { navToImages(item ) }, deleteFavorite = {
72
+ onDelete(item )
43
73
})
44
74
}
45
75
if (favoritePosts.isEmpty())
@@ -52,12 +82,12 @@ fun FavoritePage(
52
82
@Composable
53
83
fun FavoriteItem (
54
84
post : PostItem ,
55
- navToImages : (PostItem ) -> Unit ,
56
- deleteFavorite : (PostItem ) -> Unit
85
+ navToImages : () -> Unit ,
86
+ deleteFavorite : () -> Unit
57
87
) {
58
88
PostCard (post, isFavorite = true , setFavorite = {
59
- deleteFavorite(post )
89
+ deleteFavorite()
60
90
}) {
61
- navToImages(post )
91
+ navToImages()
62
92
}
63
93
}
0 commit comments