Files
sodalive-ios/SodaLive/Sources/V2/Main/Home/Recommendation/Components/MainHomeBannerSection.swift

69 lines
1.9 KiB
Swift

import SwiftUI
struct MainHomeBannerSection: View {
let items: [RecommendationBannerResponse]
let onTapBanner: (RecommendationBannerResponse) -> Void
init(
items: [RecommendationBannerResponse],
onTapBanner: @escaping (RecommendationBannerResponse) -> Void = { _ in }
) {
self.items = items
self.onTapBanner = onTapBanner
}
var body: some View {
BannerCarouselSection(
items: items,
id: fallbackId,
imageUrl: { $0.imageUrl },
action: onTapBanner
)
}
private func fallbackId(for item: RecommendationBannerResponse, index: Int) -> String {
if let eventItem = item.eventItem {
return "banner-\(index)-event-\(eventItem.id)"
}
if let creatorId = item.creatorId {
return "banner-\(index)-creator-\(creatorId)"
}
if let seriesId = item.seriesId {
return "banner-\(index)-series-\(seriesId)"
}
if let link = item.link, !link.isEmpty {
return "banner-\(index)-link-\(link)"
}
return "banner-\(index)-image-\(item.imageUrl)"
}
}
struct MainHomeBannerSection_Previews: PreviewProvider {
static var previews: some View {
MainHomeBannerSection(
items: [
RecommendationBannerResponse(
imageUrl: "https://picsum.photos/500/500",
eventItem: nil,
creatorId: nil,
seriesId: nil,
link: nil
),
RecommendationBannerResponse(
imageUrl: "https://picsum.photos/500/500",
eventItem: nil,
creatorId: 1,
seriesId: nil,
link: nil
)
]
)
.background(Color.black)
.previewLayout(.sizeThatFits)
}
}