-
Notifications
You must be signed in to change notification settings - Fork 439
Expand file tree
/
Copy pathOnboardingScanningInstanceRow.swift
More file actions
94 lines (89 loc) · 3.25 KB
/
OnboardingScanningInstanceRow.swift
File metadata and controls
94 lines (89 loc) · 3.25 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
import Shared
import SwiftUI
struct OnboardingScanningInstanceRow: View {
private enum Constants {
static let iconContainerSize: CGFloat = 60
static let minHeight: CGFloat = 60
}
let name: String
let internalURLString: String?
let externalURLString: String?
let internalOrExternalURLString: String
let isLoading: Bool
var body: some View {
HStack(spacing: DesignSystem.Spaces.one) {
icon
VStack(alignment: .leading) {
Text(name)
.font(.headline)
Text(internalURLString ?? internalOrExternalURLString)
.font(.subheadline)
.foregroundColor(.secondary)
if let externalURLString {
Text(externalURLString)
.font(.caption2)
.foregroundColor(.secondary)
}
}
.frame(maxWidth: .infinity, alignment: .leading)
if isLoading {
HAProgressView(style: .small)
.padding(.trailing, DesignSystem.Spaces.one)
}
}
.frame(maxWidth: .infinity)
.frame(minHeight: Constants.minHeight)
.padding(DesignSystem.Spaces.one)
.overlay(
RoundedRectangle(cornerRadius: DesignSystem.CornerRadius.two)
.stroke(Color.tileBorder, lineWidth: DesignSystem.Border.Width.default)
)
}
private var icon: some View {
ZStack {
Group {
Image(uiImage: Asset.logo.image)
.resizable()
.aspectRatio(contentMode: .fit)
if internalURLString == nil, externalURLString != nil {
Image(systemSymbol: .icloudCircleFill)
.foregroundStyle(Color.haPrimary, .white)
.offset(x: 8, y: 12)
.shadow(color: .black.opacity(0.2), radius: 5)
}
}
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .center)
.padding(DesignSystem.Spaces.oneAndHalf)
}
.frame(width: Constants.iconContainerSize, height: Constants.iconContainerSize)
}
}
#Preview {
List {
Group {
OnboardingScanningInstanceRow(
name: "Home Assistant",
internalURLString: "https://example.com",
externalURLString: "https://example.com",
internalOrExternalURLString: "https://example.com",
isLoading: true
)
OnboardingScanningInstanceRow(
name: "Home Assistant",
internalURLString: "https://example.com",
externalURLString: "https://example.com",
internalOrExternalURLString: "https://example.com",
isLoading: false
)
OnboardingScanningInstanceRow(
name: "Home Assistant",
internalURLString: "https://example.com",
externalURLString: "https://example.com",
internalOrExternalURLString: "https://example.com",
isLoading: false
)
}
.listRowSeparator(.hidden)
}
.listStyle(.plain)
}