import React from 'react' import {View} from 'react-native' import {useLingui} from '@lingui/react' import {msg, Trans} from '@lingui/macro' import {logger} from '#/logger' import {atoms as a, useBreakpoints, useTheme} from '#/alf' import {Button, ButtonText, ButtonIcon} from '#/components/Button' import {News2_Stroke2_Corner0_Rounded as News} from '#/components/icons/News2' import {Check_Stroke2_Corner0_Rounded as Check} from '#/components/icons/Check' import {Growth_Stroke2_Corner0_Rounded as Growth} from '#/components/icons/Growth' import {Trending2_Stroke2_Corner2_Rounded as Trending} from '#/components/icons/Trending2' import {Text} from '#/components/Typography' import {useOnboardingDispatch} from '#/state/shell' import {Loader} from '#/components/Loader' // import {useSetSaveFeedsMutation} from '#/state/queries/preferences' import {getAgent} from '#/state/session' import {useAnalytics} from '#/lib/analytics/analytics' import {Context} from '#/screens/Onboarding/state' import { Title, Description, OnboardingControls, } from '#/screens/Onboarding/Layout' import {IconCircle} from '#/components/IconCircle' import {uploadBlob} from 'lib/api' // import { // bulkWriteFollows, // sortPrimaryAlgorithmFeeds, // } from '#/screens/Onboarding/util' export function StepFinished() { const {_} = useLingui() const t = useTheme() const {gtMobile} = useBreakpoints() const {track} = useAnalytics() const {state, dispatch} = React.useContext(Context) const onboardDispatch = useOnboardingDispatch() const [saving, setSaving] = React.useState(false) // const {mutateAsync: saveFeeds} = useSetSaveFeedsMutation() const finishOnboarding = React.useCallback(async () => { setSaving(true) // TODO uncomment const { // interestsStepResults, // suggestedAccountsStepResults, // algoFeedsStepResults, // topicalFeedsStepResults, profileStepResults, } = state // const {selectedInterests} = interestsStepResults // const selectedFeeds = [ // ...sortPrimaryAlgorithmFeeds(algoFeedsStepResults.feedUris), // ...topicalFeedsStepResults.feedUris, // ] try { // TODO uncomment! // await Promise.all([ // bulkWriteFollows(suggestedAccountsStepResults.accountDids), // // these must be serial // (async () => { // await getAgent().setInterestsPref({tags: selectedInterests}) // await saveFeeds({ // saved: selectedFeeds, // pinned: selectedFeeds, // }) // })(), // ]) await getAgent().upsertProfile(async existing => { existing = existing ?? {} if (profileStepResults.imageUri && profileStepResults.imageMime) { const res = await uploadBlob( getAgent(), profileStepResults.imageUri, profileStepResults.imageUri, ) existing.avatar = res.data.blob } return existing }) } catch (e: any) { logger.info(`onboarding: bulk save failed`) logger.error(e) // don't alert the user, just let them into their account } setSaving(false) dispatch({type: 'finish'}) onboardDispatch({type: 'finish'}) track('OnboardingV2:StepFinished:End') track('OnboardingV2:Complete') }, [dispatch, onboardDispatch, state, track]) React.useEffect(() => { track('OnboardingV2:StepFinished:Start') }, [track]) return ( <Trans>You're ready to go!</Trans> We hope you have a wonderful time. Remember, Bluesky is: Public Your posts, likes, and blocks are public. Mutes are private. Open Never lose access to your followers or data. Flexible Choose the algorithms that power your custom feeds. ) }