65 lines
2.2 KiB
Swift
65 lines
2.2 KiB
Swift
import SwiftUI
|
|
|
|
struct MainHomeRankChangeBadge: View {
|
|
let showRankChange: Bool
|
|
let rankChange: Int?
|
|
let isNew: Bool
|
|
|
|
var body: some View {
|
|
if showRankChange {
|
|
if isNew {
|
|
Image("ic_rank_new")
|
|
.resizable()
|
|
.frame(width: 28, height: 18)
|
|
} else if let rankChange {
|
|
HStack(spacing: 2) {
|
|
switch rankChange {
|
|
case let value where value > 0:
|
|
rankChangeText(abs(value))
|
|
rankChangeIcon("ic_rank_caret_increase")
|
|
case let value where value < 0:
|
|
rankChangeText(abs(value))
|
|
rankChangeIcon("ic_rank_caret_decrease")
|
|
default:
|
|
rankChangeIcon("ic_rank_caret_stay")
|
|
}
|
|
}
|
|
.padding(.horizontal, 4)
|
|
.padding(.vertical, 3)
|
|
.background(Color.gray900)
|
|
.cornerRadius(4)
|
|
}
|
|
}
|
|
}
|
|
|
|
private func rankChangeText(_ value: Int) -> some View {
|
|
Text("\(value)")
|
|
.appFont(.caption2)
|
|
.foregroundColor(Color.gray400)
|
|
.lineLimit(1)
|
|
}
|
|
|
|
private func rankChangeIcon(_ name: String) -> some View {
|
|
Image(name)
|
|
.resizable()
|
|
.scaledToFit()
|
|
.frame(width: 14, height: 14)
|
|
}
|
|
}
|
|
|
|
struct MainHomeRankChangeBadge_Previews: PreviewProvider {
|
|
static var previews: some View {
|
|
VStack(alignment: .leading, spacing: SodaSpacing.s12) {
|
|
MainHomeRankChangeBadge(showRankChange: true, rankChange: 5, isNew: false)
|
|
MainHomeRankChangeBadge(showRankChange: true, rankChange: -3, isNew: false)
|
|
MainHomeRankChangeBadge(showRankChange: true, rankChange: 0, isNew: false)
|
|
MainHomeRankChangeBadge(showRankChange: true, rankChange: nil, isNew: true)
|
|
MainHomeRankChangeBadge(showRankChange: false, rankChange: 5, isNew: false)
|
|
MainHomeRankChangeBadge(showRankChange: true, rankChange: nil, isNew: false)
|
|
}
|
|
.padding(SodaSpacing.s20)
|
|
.background(Color.black)
|
|
.previewLayout(.sizeThatFits)
|
|
}
|
|
}
|