Skip to content

Commit 57af9c9

Browse files
authored
Merge branch 'main' into feat/HCPSDKFIORIUIKIT-2881
2 parents 78ebdab + f8210d1 commit 57af9c9

24 files changed

+1064
-318
lines changed

Sources/FioriSwiftUICore/Models/ModelDefinitions.swift

+3-1
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,10 @@ public protocol ObjectHeaderModel {}
4848
// sourcery: add_view_builder_params = "chart"
4949
// sourcery: virtualPropIntStateChanged = "@State var mainViewSize: CGSize = CGSize(width: 312, height: 0)"
5050
// sourcery: generated_component
51-
public protocol HeaderChartModel: TitleComponent, SubtitleComponent, TrendComponent, TrendImageComponent, KpiComponent {}
51+
public protocol _HeaderChartModel: TitleComponent, SubtitleComponent, TrendComponent, TrendImageComponent, KpiComponent {}
5252

53+
@available(*, unavailable, renamed: "_HeaderChartModel", message: "Will be removed in the future release. Please create HeaderChart with other initializers instead.")
54+
public protocol HeaderChartModel {}
5355
// sourcery: generated_component
5456
// public protocol TimelineItemModel: TitleComponent, SubtitleComponent, FootnoteComponent, AttributeComponent, SecondaryAttributeComponent, TimestampComponent, SecondaryTimestampComponent, StatusComponent, SubstatusComponent {}
5557

Sources/FioriSwiftUICore/Views/HeaderChart+View.swift Sources/FioriSwiftUICore/Views/_HeaderChart+View.swift

+2-99
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import FioriCharts
22
import SwiftUI
33

44
extension Fiori {
5-
enum HeaderChart {
5+
enum _HeaderChart {
66
struct Title: ViewModifier {
77
func body(content: Content) -> some View {
88
content
@@ -59,7 +59,7 @@ extension Fiori {
5959
}
6060
}
6161

62-
extension HeaderChart: View {
62+
extension _HeaderChart: View {
6363
/// Minimum Width is 100 px, Maximum Width is 312 px
6464
public var body: some View {
6565
VStack(alignment: .leading) {
@@ -120,100 +120,3 @@ extension HeaderChart: View {
120120
}
121121
}
122122
}
123-
124-
struct HeaderChart_Preview: PreviewProvider {
125-
static var previews: some View {
126-
let chartModel = ChartModel(chartType: .line,
127-
data: [[10, 30, 45, 55, 40, 70, 80]],
128-
titlesForCategory: [["9AM", nil, nil, nil, nil, nil, "9PM"]],
129-
categoryAxis: ChartCategoryAxisAttributes(labelLayoutStyle: .range))
130-
chartModel.numericAxis.labels.isHidden = true
131-
chartModel.seriesAttributes[0].point.isHidden = true
132-
133-
return Group {
134-
HeaderChart(title: "Temperature", subtitle: "20 min ago", trend: "11.5%", trendImage: Image(systemName: "triangle.fill"), kpi: "79°F") {
135-
ChartView(chartModel)
136-
}.previewLayout(.sizeThatFits)
137-
138-
HeaderChart(title: {
139-
Text("Temperature")
140-
}, subtitle: {
141-
Text("20 min ago")
142-
}, trend: {
143-
Text("11.5%").foregroundColor(.green)
144-
}, trendImage: {
145-
Image(systemName: "triangle.fill").foregroundColor(.green)
146-
}, kpi: {
147-
KPIItem(data: .components([.metric("79"), .unit("°F")]), subtitle: "").disabled(true)
148-
}, chart: {
149-
ChartView(chartModel)
150-
}).previewLayout(.sizeThatFits)
151-
152-
HeaderChart(title: {
153-
Text("Temperature")
154-
}, subtitle: {
155-
Text("20 min ago")
156-
}, trend: {
157-
Text("11.5%").foregroundColor(.green)
158-
}, trendImage: {
159-
Image(systemName: "triangle.fill").foregroundColor(.green)
160-
}, chart: {
161-
ChartView(chartModel)
162-
}).previewLayout(.sizeThatFits)
163-
164-
HeaderChart(title: {
165-
Text("Temperature")
166-
}, subtitle: {
167-
Text("20 min ago")
168-
}, chart: {
169-
ChartView(chartModel)
170-
}).previewLayout(.sizeThatFits)
171-
172-
HeaderChart(title: {
173-
Text("Temperature")
174-
}, subtitle: {
175-
Text("20 min ago")
176-
}, kpi: {
177-
KPIItem(data: .components([.metric("79"), .unit("°F")]), subtitle: "").disabled(true)
178-
}, chart: {
179-
ChartView(chartModel)
180-
}).previewLayout(.sizeThatFits)
181-
182-
HeaderChart(title: {
183-
Text("Temperature")
184-
}, subtitle: {
185-
Text("20 min ago")
186-
}, trend: {
187-
Text("11.5%").foregroundColor(.green)
188-
}, trendImage: {
189-
Image(systemName: "triangle.fill").foregroundColor(.green)
190-
}, kpi: {
191-
KPIItem(data: .components([.metric("79"), .unit("°F")]), subtitle: "").disabled(true)
192-
}).previewLayout(.sizeThatFits)
193-
194-
HeaderChart(title: {
195-
Text("Temperature")
196-
}, subtitle: {
197-
Text("20 min ago")
198-
}, trend: {
199-
Text("11.5%").foregroundColor(.green)
200-
}, trendImage: {
201-
Image(systemName: "triangle.fill").foregroundColor(.green)
202-
}).previewLayout(.sizeThatFits)
203-
204-
HeaderChart(title: {
205-
Text("Temperature")
206-
}, subtitle: {
207-
Text("20 min ago")
208-
}, kpi: {
209-
KPIItem(data: .components([.metric("79"), .unit("°F")]), subtitle: "").disabled(true)
210-
}).previewLayout(.sizeThatFits)
211-
212-
HeaderChart(title: {
213-
EmptyView()
214-
}, chart: {
215-
ChartView(chartModel)
216-
}).previewLayout(.sizeThatFits)
217-
}
218-
}
219-
}

Sources/FioriSwiftUICore/Views/_ObjectHeader+View.swift

+2-165
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public extension _ObjectHeader where Title == Text,
1010
Status == _ConditionalContent<TextOrIconView, EmptyView>,
1111
Substatus == _ConditionalContent<TextOrIconView, EmptyView>,
1212
DetailImage == _ConditionalContent<Image, EmptyView>,
13-
DetailContent == HeaderChart<Text, _ConditionalContent<Text, EmptyView>, _ConditionalContent<Text, EmptyView>, _ConditionalContent<Image, EmptyView>, _ConditionalContent<Text, EmptyView>, AnyView>
13+
DetailContent == HeaderChart
1414
{
1515
init(title: String,
1616
subtitle: String? = nil,
@@ -21,7 +21,7 @@ public extension _ObjectHeader where Title == Text,
2121
status: TextOrIcon? = nil,
2222
substatus: TextOrIcon? = nil,
2323
detailImage: Image? = nil,
24-
headerChart: HeaderChart<Text, _ConditionalContent<Text, EmptyView>, _ConditionalContent<Text, EmptyView>, _ConditionalContent<Image, EmptyView>, _ConditionalContent<Text, EmptyView>, AnyView>)
24+
headerChart: HeaderChart)
2525
{
2626
self._title = Text(title)
2727
self._subtitle = subtitle != nil ? ViewBuilder.buildEither(first: Text(subtitle!)) : ViewBuilder.buildEither(second: EmptyView())
@@ -586,166 +586,3 @@ struct SizeModifier: ViewModifier {
586586
})
587587
}
588588
}
589-
590-
struct ObjectHeader_Preview: PreviewProvider {
591-
static var previews: some View {
592-
let chartModel = ChartModel(chartType: .line,
593-
data: [[10, 30, 45, 55, 40, 70, 80]],
594-
titlesForCategory: [["9AM", nil, nil, nil, nil, nil, "9PM"]],
595-
categoryAxis: ChartCategoryAxisAttributes(labelLayoutStyle: .range))
596-
chartModel.numericAxis.labels.isHidden = true
597-
chartModel.seriesAttributes[0].point.isHidden = true
598-
599-
let hc = HeaderChart(title: {
600-
Text("Temperature")
601-
}, subtitle: {
602-
Text("20 min ago")
603-
}, trend: {
604-
Text("11.5%").foregroundColor(.green)
605-
}, trendImage: {
606-
Image(systemName: "triangle.fill").foregroundColor(.green)
607-
}, chart: {
608-
ChartView(chartModel)
609-
})
610-
611-
return Group {
612-
_ObjectHeader(title: "Transformer Overheating",
613-
subtitle: "Three Phase Pad Mounted Transformer (533423)", footnote: "1000 - Hamburg, MECHANIK",
614-
descriptionText: "Customer noticed that the transformer started to over heat within 45 minutes each time he turned it on at 7:30am. The first technician who looked at this did not have the correct additional tools to complete the job.",
615-
status: TextOrIcon.text("High"), substatus: TextOrIcon.text("Scheduled"),
616-
detailImage: Image(systemName: "person"),
617-
detailContent: { hc })
618-
.previewLayout(.fixed(width: 390, height: 150))
619-
.environment(\.horizontalSizeClass, .compact)
620-
621-
// page 6
622-
_ObjectHeader(title: {
623-
Text("Inspect Electric Pump Motor Long Job Title Example Wrapping Two Lines")
624-
}, subtitle: {
625-
Text("Job 819701")
626-
}, descriptionText: {
627-
Text("Temperature sensor predicts overheating failure in 4 days Urgent and needs attention sensor predicts overheating failure in 4 days Urgent and need attention.")
628-
}, status: {
629-
Image(systemName: "exclamationmark.square.fill").foregroundColor(.preferredColor(.negativeLabel))
630-
}, substatus: {
631-
Text("High Priority")
632-
}, detailImage: {
633-
Image(systemName: "person").font(Font.system(size: 70))
634-
}, detailContent: {
635-
HeaderChart(title: {
636-
Text("Temperature")
637-
}, subtitle: {
638-
Text("20 min ago")
639-
}, chart: {
640-
ChartView(chartModel)
641-
})
642-
})
643-
.previewLayout(.fixed(width: 1024, height: 200))
644-
.environment(\.horizontalSizeClass, .regular)
645-
.environment(\.colorScheme, .dark)
646-
647-
_ObjectHeader(title: {
648-
Text("Inspect Electric Pump Motor Long Job Title Example Wrapping Two Lines")
649-
}, subtitle: {
650-
Text("Job 819701")
651-
}, status: {
652-
Text("Very High Priority").foregroundColor(.preferredColor(.negativeLabel))
653-
}, detailImage: {
654-
Image(systemName: "person").font(Font.system(size: 70))
655-
})
656-
.previewLayout(.fixed(width: 1024, height: 200))
657-
.environment(\.horizontalSizeClass, .regular)
658-
.environment(\.colorScheme, .dark)
659-
660-
_ObjectHeader(title: {
661-
Text("Inspect Electric Pump Motor Long Job Title Example Wrapping Two Lines")
662-
}, subtitle: {
663-
Text("Job 819701")
664-
}, tags: {
665-
Tag("Started")
666-
Tag("PM01")
667-
Tag("103-Repair")
668-
}, bodyText: {
669-
Text("1000-Hamburg, MECHANIK")
670-
}, footnote: {
671-
Text("Due on 12/31/16")
672-
}, descriptionText: {
673-
Text("Temperature sensor predicts overheating failure in 4 days Urgent and needs attention sensor predicts overheating failure in 4 days Urgent and need attention.")
674-
}, status: {
675-
Text("Very High Priority").foregroundColor(.preferredColor(.negativeLabel))
676-
}, substatus: {
677-
Text("Scheduled")
678-
})
679-
.previewLayout(.fixed(width: 1024, height: 200))
680-
.environment(\.horizontalSizeClass, .regular)
681-
.environment(\.colorScheme, .dark)
682-
683-
_ObjectHeader(title: {
684-
Text("Inspect Electric Pump Motor Long Job Title Example Wrapping Two Lines")
685-
}, subtitle: {
686-
Text("Job 819701")
687-
}, tags: {
688-
Tag("Started")
689-
Tag("PM01")
690-
Tag("103-Repair")
691-
}, bodyText: {
692-
Text("1000-Hamburg, MECHANIK")
693-
}, footnote: {
694-
Text("Due on 12/31/16")
695-
})
696-
.previewLayout(.fixed(width: 1024, height: 200))
697-
.environment(\.horizontalSizeClass, .regular)
698-
.environment(\.colorScheme, .dark)
699-
700-
_ObjectHeader(title: {
701-
Text("Inspect Electric Pump Motor Long Job Title Example Wrapping Two Lines Accessibility Settings Testing")
702-
}, subtitle: {
703-
Text("Job 819701 Accessibility Settings Testing")
704-
}, descriptionText: {
705-
Text("Temperature sensor predicts overheating failure in 4 days Urgent and needs attention sensor predicts overheating failure in 4 days Urgent and need attention.")
706-
}, status: {
707-
Text("Very High Priority").foregroundColor(.preferredColor(.negativeLabel))
708-
}, substatus: {
709-
Text("Scheduled")
710-
})
711-
.previewLayout(.fixed(width: 1024, height: 200))
712-
.environment(\.horizontalSizeClass, .regular)
713-
.environment(\.colorScheme, .dark)
714-
.environment(\.sizeCategory, .extraExtraLarge)
715-
716-
_ObjectHeader(title: {
717-
Text("Inspect Electric Pump Motor Long Job Title Example Wrapping Two Lines Accessibility Settings Testing")
718-
}, subtitle: {
719-
Text("Job 819701 Accessibility Settings Testing")
720-
}, tags: {
721-
Tag("Started")
722-
Tag("PM01")
723-
Tag("103-Repair")
724-
}, bodyText: {
725-
Text("1000-Hamburg, MECHANIK")
726-
}, footnote: {
727-
Text("Due on 12/31/16")
728-
}, status: {
729-
Text("Very High Priority").foregroundColor(.preferredColor(.negativeLabel))
730-
}, substatus: {
731-
Text("Scheduled")
732-
}, detailContent: {
733-
HeaderChart(title: {
734-
Text("Temperature")
735-
}, subtitle: {
736-
Text("20 min ago")
737-
}, trend: {
738-
Text("11.5%").foregroundColor(.green)
739-
}, trendImage: {
740-
Image(systemName: "triangle.fill").foregroundColor(.green)
741-
}, kpi: {
742-
KPIItem(data: .components([.metric("79"), .unit("°F")]), subtitle: "").disabled(true)
743-
})
744-
})
745-
.previewLayout(.fixed(width: 1024, height: 300))
746-
.environment(\.horizontalSizeClass, .regular)
747-
.environment(\.colorScheme, .dark)
748-
.environment(\.sizeCategory, .extraExtraLarge)
749-
}
750-
}
751-
}

Sources/FioriSwiftUICore/_ComponentProtocols/BaseComponentProtocols.swift

+12
Original file line numberDiff line numberDiff line change
@@ -574,3 +574,15 @@ protocol _OuterCircleComponent {
574574
// sourcery: defaultValue = "Circle()"
575575
var outerCircle: any Shape { get }
576576
}
577+
578+
// sourcery: BaseComponent
579+
protocol _TrendComponent {
580+
// sourcery: @ViewBuilder
581+
var trend: AttributedString? { get }
582+
}
583+
584+
// sourcery: BaseComponent
585+
protocol _TrendImageComponent {
586+
// sourcery: @ViewBuilder
587+
var trendImage: Image? { get }
588+
}

Sources/FioriSwiftUICore/_ComponentProtocols/CompositeComponentProtocols.swift

+23
Original file line numberDiff line numberDiff line change
@@ -1077,3 +1077,26 @@ protocol _StepProgressIndicatorComponent: _TitleComponent, _ActionComponent, _Ca
10771077
/// ```
10781078
// sourcery: CompositeComponent
10791079
protocol _ObjectHeaderComponent: _TitleComponent, _SubtitleComponent, _TagsComponent, _BodyTextComponent, _FootnoteComponent, _DescriptionTextComponent, _StatusComponent, _SubstatusComponent, _DetailImageComponent, _DetailContentComponent {}
1080+
1081+
/// `HeaderChart` is a view that displays an object's title, subtitle, trend, trend image and kpi.
1082+
/// ## Usage
1083+
/// ```swift
1084+
/// HeaderChart {
1085+
/// Text("title")
1086+
/// } subtitle: {
1087+
/// Text("subtitle")
1088+
/// } trend: {
1089+
/// Text("trend")
1090+
/// } trendImage: {
1091+
/// Image(systemName: "person")
1092+
/// } kpi: {
1093+
/// Text("KPI View")
1094+
/// } chart: {
1095+
/// Text("Chart View")
1096+
/// }
1097+
/// ```
1098+
// sourcery: CompositeComponent
1099+
protocol _HeaderChartComponent: _TitleComponent, _SubtitleComponent, _TrendComponent, _TrendImageComponent, _KpiComponent {
1100+
@ViewBuilder
1101+
var chart: (() -> any View)? { get }
1102+
}

0 commit comments

Comments
 (0)