diff options
| author | Fuwn <[email protected]> | 2025-07-08 09:47:39 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-07-08 09:47:39 -0700 |
| commit | a43bdd31d3e053de100773dfaa34e7225dcf49a8 (patch) | |
| tree | b52a3a3636f76f2eb7c6e57c288f617d15e2b543 /Sora/Data | |
| parent | feat: Development commit (diff) | |
| download | sora-testing-a43bdd31d3e053de100773dfaa34e7225dcf49a8.tar.xz sora-testing-a43bdd31d3e053de100773dfaa34e7225dcf49a8.zip | |
feat: Development commit
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 + } + } +} |