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) } }