77 lines
2.5 KiB
Swift
77 lines
2.5 KiB
Swift
import Foundation
|
|
import SwiftUI
|
|
|
|
struct CreatorChannelAudioOwnershipRateView: View {
|
|
let purchasedAudioContentRate: Double
|
|
let purchasedAudioContentCount: Int
|
|
let paidAudioContentCount: Int
|
|
|
|
private var progress: CGFloat {
|
|
CGFloat(max(0, min(purchasedAudioContentRate / 100, 1)))
|
|
}
|
|
|
|
private var rateText: String {
|
|
let rounded = purchasedAudioContentRate.rounded()
|
|
if rounded == purchasedAudioContentRate {
|
|
return "\(Int(rounded))%"
|
|
}
|
|
return String(format: "%.1f%%", purchasedAudioContentRate)
|
|
}
|
|
|
|
var body: some View {
|
|
VStack(alignment: .leading, spacing: SodaSpacing.s14) {
|
|
HStack(alignment: .center, spacing: SodaSpacing.s4) {
|
|
(
|
|
Text(I18n.CreatorChannelAudio.ownershipPrefix)
|
|
.foregroundColor(.white)
|
|
+ Text(rateText)
|
|
.foregroundColor(Color.soda400)
|
|
+ Text(I18n.CreatorChannelAudio.ownershipSuffix)
|
|
.foregroundColor(.white)
|
|
)
|
|
.appFont(size: 14, weight: .medium)
|
|
.lineLimit(1)
|
|
|
|
Spacer(minLength: SodaSpacing.s8)
|
|
|
|
(
|
|
Text(purchasedAudioContentCount.comma())
|
|
.foregroundColor(.white)
|
|
+ Text("/\(paidAudioContentCount.comma())\(I18n.CreatorChannelAudio.countUnit)")
|
|
.foregroundColor(Color.gray500)
|
|
)
|
|
.appFont(size: 14, weight: .medium)
|
|
.lineLimit(1)
|
|
}
|
|
|
|
GeometryReader { proxy in
|
|
ZStack(alignment: .leading) {
|
|
Capsule()
|
|
.fill(Color.gray800)
|
|
|
|
Capsule()
|
|
.fill(Color.soda400)
|
|
.frame(width: proxy.size.width * progress)
|
|
}
|
|
}
|
|
.frame(height: 4)
|
|
}
|
|
.padding(SodaSpacing.s14)
|
|
.background(Color.gray900)
|
|
.clipShape(RoundedRectangle(cornerRadius: SodaSpacing.s14, style: .continuous))
|
|
.padding(.horizontal, SodaSpacing.s14)
|
|
}
|
|
}
|
|
|
|
struct CreatorChannelAudioOwnershipRateView_Previews: PreviewProvider {
|
|
static var previews: some View {
|
|
CreatorChannelAudioOwnershipRateView(
|
|
purchasedAudioContentRate: 58,
|
|
purchasedAudioContentCount: 12,
|
|
paidAudioContentCount: 43
|
|
)
|
|
.background(Color.black)
|
|
.previewLayout(.sizeThatFits)
|
|
}
|
|
}
|