Skip to content

Commit ef062a8

Browse files
committed
Recently viewed animations
1 parent 0794199 commit ef062a8

File tree

1 file changed

+46
-27
lines changed

1 file changed

+46
-27
lines changed

Packages/Features/Sources/FeedUI/List/FeedsListView.swift

+46-27
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public struct FeedsListView: View {
1616
@State var feeds: [FeedItem] = []
1717
@State var filter: FeedsListFilter = .suggested
1818

19+
@State var isRecentFeedExpanded: Bool = true
1920
@Query(recentFeedItemsDescriptor) var recentFeedItems: [RecentFeedItem]
2021

2122
@State var isInSearch: Bool = false
@@ -30,33 +31,9 @@ public struct FeedsListView: View {
3031
public var body: some View {
3132
List {
3233
headerView
33-
.listRowSeparator(.hidden)
34-
.padding(.bottom, 8)
35-
3634
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
6037
}
6138
.screenContainer()
6239
.scrollDismissesKeyboard(.immediately)
@@ -88,6 +65,48 @@ public struct FeedsListView: View {
8865
guard !isInSearch else { return }
8966
Task { await fetchSuggestedFeed() }
9067
}
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+
}
91110
}
92111

93112
private var dividerView: some View {
@@ -134,7 +153,7 @@ extension FeedsListView {
134153
SortDescriptor(\.lastViewedAt, order: .reverse)
135154
]
136155
)
137-
descriptor.fetchLimit = 5
156+
descriptor.fetchLimit = 4
138157
return descriptor
139158
}
140159
}

0 commit comments

Comments
 (0)