feat(gift): 선물 상세 액션을 추가한다
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
import SwiftUI
|
||||
|
||||
struct GiftCancelCompleteView: View {
|
||||
let model: SentGiftDetailDisplayModel
|
||||
@State private var isNavigating = false
|
||||
|
||||
var body: some View {
|
||||
VStack(alignment: .leading, spacing: SodaSpacing.s32) {
|
||||
VStack(alignment: .leading, spacing: SodaSpacing.s14) {
|
||||
Text("취소 완료")
|
||||
.appFont(.caption2)
|
||||
.foregroundColor(.white)
|
||||
.padding(.horizontal, SodaSpacing.s8)
|
||||
.padding(.vertical, SodaSpacing.s4)
|
||||
.background(Color.gray700)
|
||||
.clipShape(RoundedRectangle(cornerRadius: SodaRadius.r4))
|
||||
|
||||
Text("선물 신청이 취소되었어요")
|
||||
.appFont(.heading2)
|
||||
.foregroundColor(.white)
|
||||
.accessibilityAddTraits(.isHeader)
|
||||
|
||||
Text(completionMessage)
|
||||
.appFont(.body6)
|
||||
.foregroundColor(.gray300)
|
||||
}
|
||||
.fixedSize(horizontal: false, vertical: true)
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
|
||||
VStack(spacing: SodaSpacing.s12) {
|
||||
GiftInfoSectionView(title: "취소 상세") {
|
||||
if let creatorNickname {
|
||||
GiftInfoRow(title: "크리에이터", value: creatorNickname)
|
||||
}
|
||||
GiftInfoRow(title: "선물 사이즈", value: model.sizeName)
|
||||
GiftInfoRow(title: "카테고리", value: model.categoryName)
|
||||
GiftInfoRow(title: "신청번호", value: model.applicationNo)
|
||||
if let applicationDate = model.applicationDateText {
|
||||
GiftInfoRow(title: "신청일", value: applicationDate)
|
||||
}
|
||||
if let canceledDate = model.canceledDateText {
|
||||
GiftInfoRow(title: "취소일", value: canceledDate)
|
||||
}
|
||||
if let paidCan = model.paidCan {
|
||||
GiftInfoRow(title: "환불 캔", value: String(paidCan))
|
||||
}
|
||||
}
|
||||
|
||||
inquiryButton
|
||||
}
|
||||
}
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
.onAppear {
|
||||
isNavigating = false
|
||||
}
|
||||
}
|
||||
|
||||
private var inquiryButton: some View {
|
||||
Button {
|
||||
guard !isNavigating else { return }
|
||||
isNavigating = true
|
||||
AppState.shared.setAppStep(step: GiftConstants.inquiryStep)
|
||||
} label: {
|
||||
Text("문의하기")
|
||||
.appFont(.body2)
|
||||
.foregroundColor(isNavigating ? .gray500 : .white)
|
||||
.multilineTextAlignment(.center)
|
||||
.fixedSize(horizontal: false, vertical: true)
|
||||
.padding(.horizontal, SodaSpacing.s16)
|
||||
.padding(.vertical, SodaSpacing.s12)
|
||||
.frame(maxWidth: .infinity, minHeight: SodaSpacing.s48)
|
||||
.overlay(Capsule().strokeBorder(Color.gray800))
|
||||
.contentShape(Capsule())
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
.disabled(isNavigating)
|
||||
}
|
||||
|
||||
private var creatorNickname: String? {
|
||||
guard let nickname = model.recipientCreatorNickname?.trimmingCharacters(in: .whitespacesAndNewlines),
|
||||
!nickname.isEmpty else { return nil }
|
||||
return nickname
|
||||
}
|
||||
|
||||
private var completionMessage: String {
|
||||
let recipient = creatorNickname.map { "\($0)에게 보내는 " } ?? ""
|
||||
let applicationNo = model.applicationNo.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
let application = applicationNo.isEmpty ? "" : "(\(applicationNo))"
|
||||
return "\(recipient)선물 신청\(application)이 취소되었습니다. 취소한 신청은 되돌릴 수 없으며, 다시 보내려면 새로 신청해 주세요."
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user