diff --git a/Multiplatform/Shared/Timeline/TimelineView.swift b/Multiplatform/Shared/Timeline/TimelineView.swift index 6be7b6f4a..b51e7fbe1 100644 --- a/Multiplatform/Shared/Timeline/TimelineView.swift +++ b/Multiplatform/Shared/Timeline/TimelineView.swift @@ -83,18 +83,16 @@ struct TimelineView: View { .navigationTitle(Text(verbatim: timelineModel.nameForDisplay)) #else ScrollViewReader { scrollViewProxy in - List(timelineItems.keys, id: \.self) { timelineItemID in - if let timelineItem = timelineItems[timelineItemID] { - ZStack { - let selected = timelineModel.selectedTimelineItemID == timelineItem.article.articleID - TimelineItemView(selected: selected, width: geometryReaderProxy.size.width, timelineItem: timelineItem) - .background(TimelineItemFramePreferenceView(timelineItem: timelineItem)) - NavigationLink(destination: ArticleContainerView(), - tag: timelineItem.article.articleID, - selection: $timelineModel.selectedTimelineItemID) { - EmptyView() - }.buttonStyle(PlainButtonStyle()) - } + List(timelineItems.items) { timelineItem in + ZStack { + let selected = timelineModel.selectedTimelineItemID == timelineItem.article.articleID + TimelineItemView(selected: selected, width: geometryReaderProxy.size.width, timelineItem: timelineItem) + .background(TimelineItemFramePreferenceView(timelineItem: timelineItem)) + NavigationLink(destination: ArticleContainerView(), + tag: timelineItem.article.articleID, + selection: $timelineModel.selectedTimelineItemID) { + EmptyView() + }.buttonStyle(PlainButtonStyle()) } } .onPreferenceChange(TimelineItemFramePreferenceKey.self) { preferences in @@ -119,6 +117,19 @@ struct TimelineView: View { timelineItems = items // } } + .onReceive(timelineModel.articleStatusChangePublisher!) { articleIDs in + articleIDs.forEach { articleID in + if let position = timelineItems.index[articleID] { + if timelineItems.items[position].isReadOnly { + withAnimation { + timelineItems.items[position].updateStatus() + } + } else { + timelineItems.items[position].updateStatus() + } + } + } + } .navigationBarTitle(Text(verbatim: timelineModel.nameForDisplay), displayMode: .inline) #endif }