11import SwiftUI
22
3- /// Resuable report card made for the Analytics Hub.
3+ /// Reusable report card made for the Analytics Hub.
44///
55struct AnalyticsReportCard : View {
66
77 let title : String
88 let leadingTitle : String
99 let leadingValue : String
10- let leadingDelta : String
11- let leadingDeltaColor : UIColor
12- let leadingDeltaTextColor : UIColor
10+ let leadingDelta : String ?
11+ let leadingDeltaColor : UIColor ?
12+ let leadingDeltaTextColor : UIColor ?
1313 let leadingChartData : [ Double ]
14- let leadingChartColor : UIColor
14+ let leadingChartColor : UIColor ?
1515 let trailingTitle : String
1616 let trailingValue : String
17- let trailingDelta : String
18- let trailingDeltaColor : UIColor
19- let trailingDeltaTextColor : UIColor
17+ let trailingDelta : String ?
18+ let trailingDeltaColor : UIColor ?
19+ let trailingDeltaTextColor : UIColor ?
2020 let trailingChartData : [ Double ]
21- let trailingChartColor : UIColor
21+ let trailingChartColor : UIColor ?
2222
2323 let isRedacted : Bool
2424
@@ -50,14 +50,18 @@ struct AnalyticsReportCard: View {
5050 . shimmering ( active: isRedacted)
5151
5252 AdaptiveStack ( horizontalAlignment: . leading) {
53- DeltaTag ( value: leadingDelta, backgroundColor: leadingDeltaColor, textColor: leadingDeltaTextColor)
54- . frame ( maxWidth: . infinity, alignment: . leading)
55- . redacted ( reason: isRedacted ? . placeholder : [ ] )
56- . shimmering ( active: isRedacted)
57-
58- AnalyticsLineChart ( dataPoints: leadingChartData, lineChartColor: leadingChartColor)
59- . aspectRatio ( Layout . chartAspectRatio, contentMode: . fit)
60- . frame ( maxWidth: scaledChartWidth)
53+ if let leadingDelta, let leadingDeltaColor, let leadingDeltaTextColor {
54+ DeltaTag ( value: leadingDelta, backgroundColor: leadingDeltaColor, textColor: leadingDeltaTextColor)
55+ . frame ( maxWidth: . infinity, alignment: . leading)
56+ . redacted ( reason: isRedacted ? . placeholder : [ ] )
57+ . shimmering ( active: isRedacted)
58+ }
59+
60+ if leadingChartData. isNotEmpty, let leadingChartColor {
61+ AnalyticsLineChart ( dataPoints: leadingChartData, lineChartColor: leadingChartColor)
62+ . aspectRatio ( Layout . chartAspectRatio, contentMode: . fit)
63+ . frame ( maxWidth: scaledChartWidth)
64+ }
6165 }
6266
6367 }
@@ -75,14 +79,18 @@ struct AnalyticsReportCard: View {
7579 . shimmering ( active: isRedacted)
7680
7781 AdaptiveStack ( horizontalAlignment: . leading) {
78- DeltaTag ( value: trailingDelta, backgroundColor: trailingDeltaColor, textColor: trailingDeltaTextColor)
79- . frame ( maxWidth: . infinity, alignment: . leading)
80- . redacted ( reason: isRedacted ? . placeholder : [ ] )
81- . shimmering ( active: isRedacted)
82-
83- AnalyticsLineChart ( dataPoints: trailingChartData, lineChartColor: trailingChartColor)
84- . aspectRatio ( Layout . chartAspectRatio, contentMode: . fit)
85- . frame ( maxWidth: scaledChartWidth)
82+ if let trailingDelta, let trailingDeltaColor, let trailingDeltaTextColor {
83+ DeltaTag ( value: trailingDelta, backgroundColor: trailingDeltaColor, textColor: trailingDeltaTextColor)
84+ . frame ( maxWidth: . infinity, alignment: . leading)
85+ . redacted ( reason: isRedacted ? . placeholder : [ ] )
86+ . shimmering ( active: isRedacted)
87+ }
88+
89+ if trailingChartData. isNotEmpty, let trailingChartColor {
90+ AnalyticsLineChart ( dataPoints: trailingChartData, lineChartColor: trailingChartColor)
91+ . aspectRatio ( Layout . chartAspectRatio, contentMode: . fit)
92+ . frame ( maxWidth: scaledChartWidth)
93+ }
8694 }
8795 }
8896 . frame ( maxWidth: . infinity, alignment: . leading)
@@ -155,5 +163,26 @@ struct Previews: PreviewProvider {
155163 syncErrorMessage: " Error loading revenue analytics " )
156164 . previewLayout ( . sizeThatFits)
157165 . previewDisplayName ( " No data " )
166+
167+ AnalyticsReportCard ( title: " SESSIONS " ,
168+ leadingTitle: " Views " ,
169+ leadingValue: " 1,458 " ,
170+ leadingDelta: nil ,
171+ leadingDeltaColor: nil ,
172+ leadingDeltaTextColor: nil ,
173+ leadingChartData: [ ] ,
174+ leadingChartColor: nil ,
175+ trailingTitle: " Conversion Rate " ,
176+ trailingValue: " 4.5% " ,
177+ trailingDelta: nil ,
178+ trailingDeltaColor: nil ,
179+ trailingDeltaTextColor: nil ,
180+ trailingChartData: [ ] ,
181+ trailingChartColor: nil ,
182+ isRedacted: false ,
183+ showSyncError: true ,
184+ syncErrorMessage: " " )
185+ . previewLayout ( . sizeThatFits)
186+ . previewDisplayName ( " Current period only " )
158187 }
159188}
0 commit comments