Untitled

 avatar
unknown
kotlin
2 years ago
4.0 kB
2
Indexable
private fun makeHomeSections(home: HomePage, showLocationOnboarding: Boolean): List<Component> {
        val list = mutableListOf<Component>()

        list.addAll(generateBrowseEventsComponents())

        if (shouldShowSpotifyConnect()) {
            analytics.log(
                AnalyticsEvent.Event.Spotify.ConnectViewed(
                    location = AnalyticsEvent.Event.Spotify.Location.FEED
                )
            )

            list.add(generateSpotifyConnectComponent())
        }

        if (shouldShowTicketWalletOnboarding()) {
            list.add(generateTicketWalletOnboarding())
        } else if (showLocationOnboarding) {
            list.add(generateLocationOnboarding())
        }

        if (home.feedItems.isEmpty().not()) {
            // Required for analytics
            feedStartPosition = list.size
            for (item in home.feedItems) {
                val position = list.size

                when (item) {
                    is FeedItem.EventCollectionFeedItem,
                    is FeedItem.ThumbnailWithUrlFeedItem,
                    is FeedItem.BlogFeedItem -> {
                        item as ThumbnailFeedItem
                        list.add(
                            FeedItemComponent(
                                item.id,
                                item.title,
                                item.subtitle,
                                item.imageUrl,
                                item.status == FeedItemStatus.Preview,
                                item.apiType,
                                item.id
                            ) { onFeedItemTap(item, position) }
                        )
                    }
                    is FeedItem.GroupFeedItem -> {
                        if (item.items.isNotEmpty()) {
                            val subtitle = item.subtitle
                            val events = item.items.take(NUM_ITEMS_CARD).mapToEventComponents()
                            val showMore = item.items.size > NUM_ITEMS_CARD

                            list.add(
                                CardItemGroupComponent(
                                    id = item.id,
                                    title = RawText(item.title),
                                    subtitle = if (subtitle != null) RawText(subtitle) else null,
                                    clickText = ResText(R.string.see_all),
                                    preview = item.status == FeedItemStatus.Preview,
                                    items = events,
                                    onClick = { onFeedItemTap(item, position) },
                                    showMore = showMore,
                                    apiType = item.apiType,
                                    titleAnalytics = item.title,
                                    adapterProvider = componentAdapterProvider
                                )
                            )
                        }
                    }
                }
            }
        }

        if (home.eventsFromFollowedArtists.isEmpty().not()) {
            val events = home.eventsFromFollowedArtists.take(3)
                .mapEventToEventComponentsFromFollowedArtists()
            val showMore = home.eventsFromFollowedArtists.size > 3

            list.add(
                CardItemGroupComponent(
                    id = "EVENTS_FROM_YOUR_ARTISTS",
                    title = ResText(R.string.feed_events_from_followed_artists_title),
                    subtitle = ResText(R.string.feed_events_from_followed_artists_subtitle),
                    clickText = ResText(R.string.see_all),
                    items = events,
                    showMore = showMore,
                    onClick = { view?.goToFollowedArtistsEvents() },
                    apiType = "",
                    titleAnalytics = "",
                    adapterProvider = componentAdapterProvider
                )
            )
        }

        return list
    }