Skip to content

Commit b19bb46

Browse files
authored
Overload scrollTargetBehavior to get native velocity (#1544)
1 parent 89f13a7 commit b19bb46

File tree

1 file changed

+25
-15
lines changed

1 file changed

+25
-15
lines changed

Sources/LiveViewNative/Stylesheets/ResolvableTypes/SwiftUI/ScrollTargetBehavior.swift

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,24 +11,16 @@ import LiveViewNativeCore
1111

1212
@ASTDecodable("ScrollTargetBehavior")
1313
@available(iOS 17, macOS 14, tvOS 17, watchOS 10, *)
14-
enum StylesheetResolvableScrollTargetBehavior: @preconcurrency ScrollTargetBehavior, StylesheetResolvable, @preconcurrency Decodable {
15-
case _resolved(any ScrollTargetBehavior)
16-
14+
enum StylesheetResolvableScrollTargetBehavior: StylesheetResolvable, @preconcurrency Decodable {
1715
case paging
1816
case viewAligned
1917
case _viewAligned(limitBehavior: Any)
18+
case _viewAlignedResolved(limitBehavior: Any)
2019

2120
@available(iOS 17, macOS 14, tvOS 17, watchOS 10, *)
2221
static func viewAligned(limitBehavior: AttributeReference<ViewAlignedScrollTargetBehavior.LimitBehavior.Resolvable>) -> Self {
2322
._viewAligned(limitBehavior: limitBehavior)
2423
}
25-
26-
func updateTarget(_ target: inout ScrollTarget, context: TargetContext) {
27-
guard case let ._resolved(resolved) = self
28-
else { fatalError() }
29-
30-
resolved.updateTarget(&target, context: context)
31-
}
3224
}
3325

3426
@available(iOS 17, macOS 14, tvOS 17, watchOS 10, *)
@@ -64,16 +56,16 @@ extension StylesheetResolvableScrollTargetBehavior {
6456
@MainActor func resolve<R: RootRegistry>(on element: ElementNode, in context: LiveContext<R>) -> Self {
6557
switch self {
6658
case .paging:
67-
return ._resolved(.paging)
59+
return self
6860
case .viewAligned:
69-
return ._resolved(.viewAligned)
61+
return self
7062
case ._viewAligned(let limitBehavior):
71-
return ._resolved(.viewAligned(
63+
return ._viewAlignedResolved(
7264
limitBehavior: (limitBehavior as! AttributeReference<ViewAlignedScrollTargetBehavior.LimitBehavior.Resolvable>)
7365
.resolve(on: element, in: context)
7466
.resolve(on: element, in: context)
75-
))
76-
case ._resolved:
67+
)
68+
case ._viewAlignedResolved:
7769
return self
7870
}
7971
}
@@ -92,3 +84,21 @@ extension StylesheetResolvableScrollTargetBehavior: @preconcurrency AttributeDec
9284
}
9385
}
9486
}
87+
88+
@available(iOS 17, macOS 14, tvOS 17, watchOS 10, *)
89+
extension View {
90+
@_disfavoredOverload
91+
@ViewBuilder
92+
func scrollTargetBehavior(_ behavior: StylesheetResolvableScrollTargetBehavior) -> some View {
93+
switch behavior {
94+
case .paging:
95+
self.scrollTargetBehavior(.paging)
96+
case .viewAligned:
97+
self.scrollTargetBehavior(.viewAligned)
98+
case ._viewAligned:
99+
fatalError()
100+
case ._viewAlignedResolved(let limitBehavior):
101+
self.scrollTargetBehavior(.viewAligned(limitBehavior: limitBehavior as! ViewAlignedScrollTargetBehavior.LimitBehavior))
102+
}
103+
}
104+
}

0 commit comments

Comments
 (0)