feat(gift): 선물 상세 정보를 표시한다
This commit is contained in:
@@ -0,0 +1,43 @@
|
|||||||
|
import SwiftUI
|
||||||
|
|
||||||
|
struct GiftInfoSectionView<Content: View>: View {
|
||||||
|
let title: String
|
||||||
|
@ViewBuilder let content: Content
|
||||||
|
|
||||||
|
var body: some View {
|
||||||
|
VStack(alignment: .leading, spacing: SodaSpacing.s24) {
|
||||||
|
Text(title)
|
||||||
|
.appFont(.body1)
|
||||||
|
.foregroundColor(.white)
|
||||||
|
.accessibilityAddTraits(.isHeader)
|
||||||
|
|
||||||
|
VStack(alignment: .leading, spacing: SodaSpacing.s14) {
|
||||||
|
content
|
||||||
|
}
|
||||||
|
.padding(SodaSpacing.s14)
|
||||||
|
.frame(maxWidth: .infinity, alignment: .leading)
|
||||||
|
.background(Color.gray900)
|
||||||
|
.clipShape(RoundedRectangle(cornerRadius: SodaRadius.r14))
|
||||||
|
}
|
||||||
|
.frame(maxWidth: .infinity, alignment: .leading)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct GiftInfoRow: View {
|
||||||
|
let title: String
|
||||||
|
let value: String
|
||||||
|
|
||||||
|
var body: some View {
|
||||||
|
HStack(alignment: .top, spacing: SodaSpacing.s24) {
|
||||||
|
Text(title)
|
||||||
|
.foregroundColor(.gray500)
|
||||||
|
.frame(width: SodaSpacing.s48 + SodaSpacing.s24, alignment: .leading)
|
||||||
|
Text(value)
|
||||||
|
.foregroundColor(.white)
|
||||||
|
.frame(maxWidth: .infinity, alignment: .leading)
|
||||||
|
}
|
||||||
|
.appFont(.body6)
|
||||||
|
.fixedSize(horizontal: false, vertical: true)
|
||||||
|
.accessibilityElement(children: .combine)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
import SwiftUI
|
||||||
|
|
||||||
|
struct GiftProgressView: View {
|
||||||
|
let progress: [GiftProgressDisplayModel]
|
||||||
|
|
||||||
|
var body: some View {
|
||||||
|
HStack(alignment: .top, spacing: SodaSpacing.s4) {
|
||||||
|
ForEach(progress, id: \.step) { model in
|
||||||
|
VStack(spacing: SodaSpacing.s12) {
|
||||||
|
Capsule()
|
||||||
|
.fill(model.occurredDateText != nil ? Color.soda400 : Color.gray700)
|
||||||
|
.frame(height: SodaSpacing.s4)
|
||||||
|
.accessibilityHidden(true)
|
||||||
|
|
||||||
|
VStack(spacing: SodaSpacing.s8) {
|
||||||
|
Text(model.step.title)
|
||||||
|
.foregroundColor(model.occurredDateText != nil ? .white : .gray500)
|
||||||
|
if let date = model.occurredDateText {
|
||||||
|
Text(date)
|
||||||
|
.foregroundColor(.gray400)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.appFont(.caption3)
|
||||||
|
.multilineTextAlignment(.center)
|
||||||
|
.fixedSize(horizontal: false, vertical: true)
|
||||||
|
}
|
||||||
|
.frame(maxWidth: .infinity, alignment: .top)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.padding(SodaSpacing.s14)
|
||||||
|
.frame(maxWidth: .infinity, alignment: .leading)
|
||||||
|
.background(Color.gray900)
|
||||||
|
.clipShape(RoundedRectangle(cornerRadius: SodaRadius.r14))
|
||||||
|
.accessibilityElement(children: .ignore)
|
||||||
|
.accessibilityLabel(progress.enumerated().map { index, model in
|
||||||
|
["\(index + 1)단계", model.step.title, model.occurredDateText,
|
||||||
|
model.occurredDateText != nil ? "완료" : "미완료"]
|
||||||
|
.compactMap { $0 }.joined(separator: ", ")
|
||||||
|
}.joined(separator: "; "))
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user