feat: 구매 확인 Dialog

- 포인트 사용이 가능한 경우 포인트를 같이 표시하도록 수정
This commit is contained in:
Yu Sung
2025-05-20 18:57:53 +09:00
parent ec8b866c3e
commit 1c03f476d8
2 changed files with 42 additions and 8 deletions

View File

@@ -252,6 +252,7 @@ struct ContentDetailView: View {
themeStr: audioContent.themeStr,
coverImageUrl: audioContent.coverImageUrl,
creatorNickname: audioContent.creator.nickname,
isAvailableUsePoint: audioContent.isAvailableUsePoint,
creatorProfileImageUrl: audioContent.creator.profileImageUrl,
orderType: orderType,
onClickConfirm: {

View File

@@ -18,11 +18,15 @@ struct ContentOrderConfirmDialogView: View {
let themeStr: String
let coverImageUrl: String
let creatorNickname: String
let isAvailableUsePoint: Bool
let creatorProfileImageUrl: String
let orderType: OrderType
let onClickConfirm: () -> Void
@State private var usablePoint = 0
@State private var remainingCan = 0
var body: some View {
ZStack {
Color
@@ -104,7 +108,7 @@ struct ContentOrderConfirmDialogView: View {
.padding(.top, 13.3)
if UserDefaults.int(forKey: .userId) != 17958 {
Text("아래 이 차감됩니다.")
Text("아래 금액이 차감됩니다.")
.font(.custom(Font.medium.rawValue, size: 13.3))
.foregroundColor(Color.grayee)
.fixedSize(horizontal: false, vertical: true)
@@ -112,17 +116,39 @@ struct ContentOrderConfirmDialogView: View {
.padding(.top, 13.3)
}
HStack(spacing: 2.7) {
HStack(spacing: 10) {
Spacer()
if UserDefaults.int(forKey: .userId) != 17958 {
Image("ic_can")
.resizable()
.frame(width: 16.7, height: 16.7)
if usablePoint > 0 {
HStack(spacing: 2.7) {
Image("ic_point")
.resizable()
.frame(width: 16.7, height: 16.7)
Text("\(price)")
.font(.custom(Font.bold.rawValue, size: 13.3))
.foregroundColor(Color.grayee)
Text("\(usablePoint)")
.font(.custom(Font.bold.rawValue, size: 13.3))
.foregroundColor(Color.grayee)
}
}
if usablePoint > 0 && remainingCan > 0 {
Text("+")
.font(.custom(Font.medium.rawValue, size: 13.3))
.foregroundColor(Color.grayee)
}
if remainingCan > 0 {
HStack(spacing: 10) {
Image("ic_can")
.resizable()
.frame(width: 16.7, height: 16.7)
Text("\(remainingCan)")
.font(.custom(Font.bold.rawValue, size: 13.3))
.foregroundColor(Color.grayee)
}
}
} else {
Text("\(price * 110)")
.font(.custom(Font.bold.rawValue, size: 13.3))
@@ -177,5 +203,12 @@ struct ContentOrderConfirmDialogView: View {
.cornerRadius(10)
.padding(.horizontal, 20)
}
.onAppear {
let maxUsablePoint = orderType == OrderType.RENTAL && isAvailableUsePoint ? price * 10 : 0
let totalAvailablePoint = orderType == OrderType.RENTAL && isAvailableUsePoint ? UserDefaults.int(forKey: .point) : 0
self.usablePoint = (min(totalAvailablePoint, maxUsablePoint) / 10) * 10
self.remainingCan = ((price * 10) - usablePoint) / 10
}
}
}