69 lines
1.9 KiB
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)
|
|
}
|
|
}
|