mirror of
https://github.com/Ranchero-Software/NetNewsWire.git
synced 2025-02-02 20:16:54 +01:00
Move onReceive to container view for timeline
This commit is contained in:
parent
a3459bc57a
commit
71acfb524d
@ -11,15 +11,16 @@ import Account
|
||||
|
||||
struct SidebarView: View {
|
||||
|
||||
// I had to comment out SceneStorage because it blows up if used on macOS
|
||||
// @SceneStorage("expandedContainers") private var expandedContainerData = Data()
|
||||
@StateObject private var expandedContainers = SidebarExpandedContainers()
|
||||
@Binding var sidebarItems: [SidebarItem]
|
||||
|
||||
@EnvironmentObject private var refreshProgress: RefreshProgressModel
|
||||
@EnvironmentObject private var sceneModel: SceneModel
|
||||
@EnvironmentObject private var sidebarModel: SidebarModel
|
||||
|
||||
@Binding var sidebarItems: [SidebarItem]
|
||||
|
||||
// I had to comment out SceneStorage because it blows up if used on macOS
|
||||
// @SceneStorage("expandedContainers") private var expandedContainerData = Data()
|
||||
@StateObject private var expandedContainers = SidebarExpandedContainers()
|
||||
|
||||
private let threshold: CGFloat = 80
|
||||
@State private var previousScrollOffset: CGFloat = 0
|
||||
@State private var scrollOffset: CGFloat = 0
|
||||
|
@ -14,13 +14,40 @@ struct TimelineContainerView: View {
|
||||
@Environment(\.undoManager) var undoManager
|
||||
@EnvironmentObject private var sceneModel: SceneModel
|
||||
|
||||
@State private var timelineItems = TimelineItems()
|
||||
@State private var isReadFiltered: Bool? = nil
|
||||
|
||||
@ViewBuilder var body: some View {
|
||||
TimelineView()
|
||||
TimelineView(timelineItems: $timelineItems, isReadFiltered: $isReadFiltered)
|
||||
.modifier(TimelineToolbarModifier())
|
||||
.environmentObject(sceneModel.timelineModel)
|
||||
.onAppear {
|
||||
sceneModel.timelineModel.undoManager = undoManager
|
||||
}
|
||||
.onReceive(sceneModel.timelineModel.readFilterAndFeedsPublisher!) { (_, filtered) in
|
||||
isReadFiltered = filtered
|
||||
}
|
||||
.onReceive(sceneModel.timelineModel.timelineItemsPublisher!) { items in
|
||||
timelineItems = items
|
||||
}
|
||||
.onReceive(sceneModel.timelineModel.articleStatusChangePublisher!) { articleIDs in
|
||||
articleIDs.forEach { articleID in
|
||||
if let position = timelineItems.index[articleID] {
|
||||
// This animation will trigger a deselect on iPhones and iPads, so we will disable it for now
|
||||
#if os(macOS)
|
||||
if timelineItems.items[position].isReadOnly {
|
||||
withAnimation {
|
||||
timelineItems.items[position].updateStatus()
|
||||
}
|
||||
} else {
|
||||
timelineItems.items[position].updateStatus()
|
||||
}
|
||||
#else
|
||||
timelineItems.items[position].updateStatus()
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -10,10 +10,12 @@ import SwiftUI
|
||||
|
||||
struct TimelineView: View {
|
||||
|
||||
@Binding var timelineItems: TimelineItems
|
||||
@Binding var isReadFiltered: Bool?
|
||||
|
||||
@EnvironmentObject private var timelineModel: TimelineModel
|
||||
@State private var timelineItems = TimelineItems()
|
||||
|
||||
@State private var timelineItemFrames = [String: CGRect]()
|
||||
@State private var isReadFiltered: Bool? = nil
|
||||
|
||||
@ViewBuilder var body: some View {
|
||||
GeometryReader { geometryReaderProxy in
|
||||
@ -63,27 +65,6 @@ struct TimelineView: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
.onReceive(timelineModel.readFilterAndFeedsPublisher!) { (_, filtered) in
|
||||
isReadFiltered = filtered
|
||||
}
|
||||
.onReceive(timelineModel.timelineItemsPublisher!) { items in
|
||||
withAnimation {
|
||||
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()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.navigationTitle(Text(verbatim: timelineModel.nameForDisplay))
|
||||
#else
|
||||
ScrollViewReader { scrollViewProxy in
|
||||
@ -115,26 +96,6 @@ struct TimelineView: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
.onReceive(timelineModel.timelineItemsPublisher!) { items in
|
||||
// Animations crash on iPadOS right now
|
||||
// withAnimation {
|
||||
timelineItems = items
|
||||
// }
|
||||
}
|
||||
.onReceive(timelineModel.articleStatusChangePublisher!) { articleIDs in
|
||||
articleIDs.forEach { articleID in
|
||||
if let position = timelineItems.index[articleID] {
|
||||
// This will trigger a deselect on iPhones and iPads, so we will disable it for now
|
||||
// if timelineItems.items[position].isReadOnly {
|
||||
// withAnimation {
|
||||
// timelineItems.items[position].updateStatus()
|
||||
// }
|
||||
// } else {
|
||||
timelineItems.items[position].updateStatus()
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
.navigationBarTitle(Text(verbatim: timelineModel.nameForDisplay), displayMode: .inline)
|
||||
#endif
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user