@@ -16,6 +16,7 @@ public struct FeedsListView: View {
16
16
@State var feeds : [ FeedItem ] = [ ]
17
17
@State var filter : FeedsListFilter = . suggested
18
18
19
+ @State var isRecentFeedExpanded : Bool = true
19
20
@Query ( recentFeedItemsDescriptor) var recentFeedItems : [ RecentFeedItem ]
20
21
21
22
@State var isInSearch : Bool = false
@@ -30,33 +31,9 @@ public struct FeedsListView: View {
30
31
public var body : some View {
31
32
List {
32
33
headerView
33
- . listRowSeparator ( . hidden)
34
- . padding ( . bottom, 8 )
35
-
36
34
errorView
37
-
38
- if !isInSearch {
39
- Section {
40
- TimelineFeedRowView ( )
41
- ForEach ( recentFeedItems) { item in
42
- RecentlyViewedFeedRowView ( item: item)
43
- }
44
- . onDelete { indexSet in
45
- for index in indexSet {
46
- modelContext. delete ( recentFeedItems [ index] )
47
- }
48
- }
49
-
50
- dividerView
51
- }
52
- }
53
-
54
- Section {
55
- ForEach ( feeds) { feed in
56
- FeedRowView ( feed: feed)
57
- }
58
- }
59
-
35
+ recentViewedSection
36
+ feedsSection
60
37
}
61
38
. screenContainer ( )
62
39
. scrollDismissesKeyboard ( . immediately)
@@ -88,6 +65,48 @@ public struct FeedsListView: View {
88
65
guard !isInSearch else { return }
89
66
Task { await fetchSuggestedFeed ( ) }
90
67
}
68
+ . listRowSeparator ( . hidden)
69
+ }
70
+
71
+ @ViewBuilder
72
+ private var recentViewedSection : some View {
73
+ if !isInSearch {
74
+ Section (
75
+ content: {
76
+ if isRecentFeedExpanded {
77
+ TimelineFeedRowView ( )
78
+ ForEach ( recentFeedItems) { item in
79
+ RecentlyViewedFeedRowView ( item: item)
80
+ }
81
+ . onDelete { indexSet in
82
+ for index in indexSet {
83
+ modelContext. delete ( recentFeedItems [ index] )
84
+ }
85
+ }
86
+ dividerView
87
+ }
88
+ } ,
89
+ header: {
90
+ Label (
91
+ " Recently Viewed " ,
92
+ systemImage: isRecentFeedExpanded ? " chevron.down " : " chevron.right "
93
+ )
94
+ . onTapGesture {
95
+ withAnimation {
96
+ isRecentFeedExpanded. toggle ( )
97
+ }
98
+ }
99
+ }
100
+ )
101
+ }
102
+ }
103
+
104
+ private var feedsSection : some View {
105
+ Section {
106
+ ForEach ( feeds) { feed in
107
+ FeedRowView ( feed: feed)
108
+ }
109
+ }
91
110
}
92
111
93
112
private var dividerView : some View {
@@ -134,7 +153,7 @@ extension FeedsListView {
134
153
SortDescriptor ( \. lastViewedAt, order: . reverse)
135
154
]
136
155
)
137
- descriptor. fetchLimit = 5
156
+ descriptor. fetchLimit = 4
138
157
return descriptor
139
158
}
140
159
}
0 commit comments