diff options
Diffstat (limited to 'Sora/Data')
| -rw-r--r-- | Sora/Data/PostGridViewState/PostGridViewState.swift | 1 | ||||
| -rw-r--r-- | Sora/Data/Scroll/ScrollPositionPreference.swift | 6 | ||||
| -rw-r--r-- | Sora/Data/Scroll/ScrollPositionPreferenceKey.swift | 19 |
3 files changed, 26 insertions, 0 deletions
diff --git a/Sora/Data/PostGridViewState/PostGridViewState.swift b/Sora/Data/PostGridViewState/PostGridViewState.swift index 266d05c..ff7a32a 100644 --- a/Sora/Data/PostGridViewState/PostGridViewState.swift +++ b/Sora/Data/PostGridViewState/PostGridViewState.swift @@ -4,5 +4,6 @@ struct PostGridViewState: Equatable { var posts: [BooruPost] = [] var currentPage: Int = 1 var selectedPost: BooruPost? + var scrollPosition: BooruPost.ID? let createdAt = Date() } diff --git a/Sora/Data/Scroll/ScrollPositionPreference.swift b/Sora/Data/Scroll/ScrollPositionPreference.swift new file mode 100644 index 0000000..fb36bb1 --- /dev/null +++ b/Sora/Data/Scroll/ScrollPositionPreference.swift @@ -0,0 +1,6 @@ +import SwiftUI + +struct ScrollPositionPreference: Equatable { + let id: BooruPost.ID + let yPosition: CGFloat +} diff --git a/Sora/Data/Scroll/ScrollPositionPreferenceKey.swift b/Sora/Data/Scroll/ScrollPositionPreferenceKey.swift new file mode 100644 index 0000000..6b78bdc --- /dev/null +++ b/Sora/Data/Scroll/ScrollPositionPreferenceKey.swift @@ -0,0 +1,19 @@ +import SwiftUI + +struct ScrollPositionPreferenceKey: PreferenceKey { + typealias Value = ScrollPositionPreference? + + static var defaultValue: Value = nil + + static func reduce(value: inout Value, nextValue: () -> Value) { + guard let next = nextValue() else { return } + + if let current = value { + if abs(next.yPosition) < abs(current.yPosition) { + value = next + } + } else { + value = next + } + } +} |