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() .scaledToFit() .frame(width: 28, height: 12) } 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) .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: 8, height: 8) } } 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) } }