feat(gift): 선물 상세 정보를 표시한다

This commit is contained in:
Yu Sung
2026-10-08 12:32:57 +09:00
parent 78f2b737bb
commit 83b90b2fdb
2 changed files with 84 additions and 0 deletions
@@ -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: "; "))
}
}