@@ -10,26 +10,25 @@ import NukeUI
10
10
import SwiftUI
11
11
12
12
@MemberwiseInit
13
- struct GradientOverlayImageView < TopContent , BottomContent > : View where TopContent : View , BottomContent : View {
13
+ struct GradientOverlayImageView < T , B > : View where T : View , B : View {
14
14
@Init ( . internal) private let imageUrl : URL ?
15
15
@Init ( . internal, default: nil ) private let thumbnailImageUrl : URL ?
16
- @Init ( . internal) private let height : CGFloat
17
- @Init ( . internal) private let maxWidth : CGFloat
16
+ @Init ( . internal) private let size : CGSize
18
17
@Init ( . internal, default: Gradient ( colors: [ . black. opacity ( 0.5 ) , . clear] ) ) private let gradient : Gradient
19
- @Init ( . internal, default: { EmptyView ( ) } , escaping: true ) private let topContent : ( ) -> TopContent
20
- @Init ( . internal, default: { EmptyView ( ) } , escaping: true ) private let bottomContent : ( ) -> BottomContent
18
+ @Init ( . internal, default: { EmptyView ( ) } , escaping: true ) private let topContent : ( ) -> T
19
+ @Init ( . internal, default: { EmptyView ( ) } , escaping: true ) private let bottomContent : ( ) -> B
21
20
22
21
var body : some View {
23
- lazyImage ( url : imageUrl ) {
24
- lazyImage ( url : thumbnailImageUrl ) {
25
- Color ( . systemFill )
26
- }
27
- }
22
+ URLImage (
23
+ imageUrl : imageUrl ,
24
+ thumbnailImageUrl : thumbnailImageUrl ,
25
+ size : size
26
+ )
28
27
. overlay {
29
- overlaidGradient ( . top, TopContent . self != EmptyView . self)
28
+ overlaidGradient ( . top, T . self != EmptyView . self)
30
29
}
31
30
. overlay {
32
- overlaidGradient ( . bottom, BottomContent . self != EmptyView . self)
31
+ overlaidGradient ( . bottom, B . self != EmptyView . self)
33
32
}
34
33
. overlay ( alignment: . top) {
35
34
overlaidContent ( topContent)
@@ -39,23 +38,6 @@ struct GradientOverlayImageView<TopContent, BottomContent>: View where TopConten
39
38
}
40
39
}
41
40
42
- private func lazyImage( url: URL ? , placeholder: @escaping ( ) -> some View ) -> some View {
43
- LazyImage ( url: url) { state in
44
- if let image = state. image {
45
- image
46
- . resizable ( )
47
- . aspectRatio ( contentMode: . fill)
48
- } else if state. error != nil {
49
- IconSet . exclamation. icon
50
- } else {
51
- placeholder ( )
52
- }
53
- }
54
- . frame ( height: height)
55
- . frame ( maxWidth: maxWidth)
56
- . clipped ( )
57
- }
58
-
59
41
@ViewBuilder
60
42
private func overlaidGradient( _ startPoint: UnitPoint , _ isVisible: Bool ) -> some View {
61
43
if isVisible {
0 commit comments