import React from 'react' import {View} from 'react-native' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {useAnalytics} from '#/lib/analytics/analytics' import {logEvent} from '#/lib/statsig/statsig' import { DescriptionText, OnboardingControls, TitleText, } from '#/screens/Onboarding/Layout' import {Context} from '#/screens/Onboarding/state' import {FeedCard} from '#/screens/Onboarding/StepAlgoFeeds/FeedCard' import {atoms as a, tokens, useTheme} from '#/alf' import {Button, ButtonIcon, ButtonText} from '#/components/Button' import * as Toggle from '#/components/forms/Toggle' import {IconCircle} from '#/components/IconCircle' import {ChevronRight_Stroke2_Corner0_Rounded as ChevronRight} from '#/components/icons/Chevron' import {ListSparkle_Stroke2_Corner0_Rounded as ListSparkle} from '#/components/icons/ListSparkle' import {Loader} from '#/components/Loader' import {Text} from '#/components/Typography' import {IS_PROD} from '#/env' export type FeedConfig = { default: boolean uri: string gradient?: typeof tokens.gradients.midnight | typeof tokens.gradients.nordic } export const PRIMARY_FEEDS: FeedConfig[] = [ { default: IS_PROD, // these feeds are only available in prod uri: 'at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.generator/whats-hot', gradient: tokens.gradients.midnight, }, ] const SECONDARY_FEEDS: FeedConfig[] = [ { default: false, uri: 'at://did:plc:vpkhqolt662uhesyj6nxm7ys/app.bsky.feed.generator/infreq', }, { default: false, uri: 'at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.generator/with-friends', }, { default: false, uri: 'at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.generator/best-of-follows', }, { default: false, uri: 'at://did:plc:tenurhgjptubkk5zf5qhi3og/app.bsky.feed.generator/catch-up', }, { default: false, uri: 'at://did:plc:q6gjnaw2blty4crticxkmujt/app.bsky.feed.generator/at-bangers', }, ] export function StepAlgoFeeds() { const {_} = useLingui() const {track} = useAnalytics() const t = useTheme() const {state, dispatch} = React.useContext(Context) const [primaryFeedUris, setPrimaryFeedUris] = React.useState( PRIMARY_FEEDS.map(f => (f.default ? f.uri : '')).filter(Boolean), ) const [secondaryFeedUris, setSeconaryFeedUris] = React.useState([]) const [saving, setSaving] = React.useState(false) const saveFeeds = React.useCallback(async () => { setSaving(true) const uris = primaryFeedUris.concat(secondaryFeedUris) dispatch({type: 'setAlgoFeedsStepResults', feedUris: uris}) setSaving(false) dispatch({type: 'next'}) track('OnboardingV2:StepAlgoFeeds:End', { selectedPrimaryFeeds: primaryFeedUris, selectedPrimaryFeedsLength: primaryFeedUris.length, selectedSecondaryFeeds: secondaryFeedUris, selectedSecondaryFeedsLength: secondaryFeedUris.length, }) logEvent('onboarding:algoFeeds:nextPressed', { selectedPrimaryFeeds: primaryFeedUris, selectedPrimaryFeedsLength: primaryFeedUris.length, selectedSecondaryFeeds: secondaryFeedUris, selectedSecondaryFeedsLength: secondaryFeedUris.length, }) }, [primaryFeedUris, secondaryFeedUris, dispatch, track]) React.useEffect(() => { track('OnboardingV2:StepAlgoFeeds:Start') }, [track]) return ( Choose your main feeds Custom feeds built by the community bring you new experiences and help you find the content you love. We recommend our "Discover" feed: There are many feeds to try: {SECONDARY_FEEDS.map(config => ( ))} ) }