-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathSheetIntro.swift
More file actions
112 lines (101 loc) · 3.28 KB
/
SheetIntro.swift
File metadata and controls
112 lines (101 loc) · 3.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import SwiftUI
struct SheetIntro: View {
let navTitle: String
let title: String
let description: String
let image: String
let continueText: String
let cancelText: String?
let accentColor: Color
let accentFont: ((CGFloat) -> Font)?
let testID: String?
let continueTestID: String?
let onCancel: (() -> Void)?
let onContinue: () -> Void
private var baseTestID: String {
testID ?? "SheetIntro"
}
init(
navTitle: String,
title: String,
description: String,
image: String,
continueText: String,
cancelText: String? = nil,
accentColor: Color = .brandAccent,
accentFont: ((CGFloat) -> Font)? = nil,
testID: String? = nil,
continueTestID: String? = nil,
onCancel: (() -> Void)? = nil,
onContinue: @escaping () -> Void
) {
self.navTitle = navTitle
self.title = title
self.description = description
self.image = image
self.continueText = continueText
self.cancelText = cancelText
self.accentColor = accentColor
self.accentFont = accentFont
self.testID = testID
self.continueTestID = continueTestID
self.onCancel = onCancel
self.onContinue = onContinue
}
var body: some View {
VStack(alignment: .leading, spacing: 0) {
SheetHeader(title: navTitle)
VStack(spacing: 0) {
Spacer()
Image(image)
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: UIScreen.main.bounds.width * 0.8)
.frame(maxHeight: 256)
.padding(.bottom, 32)
.accessibilityIdentifier("\(baseTestID)Image")
DisplayText(title, accentColor: accentColor)
.padding(.bottom, 14)
.frame(maxWidth: .infinity, alignment: .leading)
BodyMText(description, accentFont: accentFont)
.frame(maxWidth: .infinity, alignment: .leading)
.accessibilityIdentifier("\(baseTestID)Description")
}
buttonStack
.padding(.top, 32)
}
.padding(.horizontal, 32)
.accessibilityElement(children: .contain)
.accessibilityIdentifier(baseTestID)
}
private var continueButtonTestID: String {
continueTestID ?? "\(baseTestID)Continue"
}
@ViewBuilder
private var buttonStack: some View {
if let cancelText, let onCancel {
HStack(alignment: .center, spacing: 16) {
CustomButton(
title: cancelText,
variant: .secondary
) {
onCancel()
}
.accessibilityIdentifier("\(baseTestID)Cancel")
CustomButton(
title: continueText
) {
onContinue()
}
.accessibilityIdentifier(continueButtonTestID)
}
} else {
CustomButton(
title: continueText
) {
onContinue()
}
.accessibilityIdentifier(continueButtonTestID)
}
}
}