[Reduced Onboarding] Fix forward/backward nav with profile step (#3997)

* WIP

* Fix forward-backward to profile step

* [Reduced Onboarding] Add avatar metric (#3999)

* Add prop to finished event

* Fix type

* Use separate event
zio/stable
Eric Bailey 2024-05-13 16:54:12 -05:00 committed by GitHub
parent 9980012021
commit 95514e3af7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 37 additions and 4 deletions

View File

@ -53,6 +53,9 @@ export type LogEvents = {
'onboarding:moderation:nextPressed': {} 'onboarding:moderation:nextPressed': {}
'onboarding:profile:nextPressed': {} 'onboarding:profile:nextPressed': {}
'onboarding:finished:nextPressed': {} 'onboarding:finished:nextPressed': {}
'onboarding:finished:avatarResult': {
avatarResult: 'default' | 'created' | 'uploaded'
}
'home:feedDisplayed': { 'home:feedDisplayed': {
feedUrl: string feedUrl: string
feedType: string feedType: string

View File

@ -134,6 +134,14 @@ export function StepFinished() {
return existing return existing
}) })
} }
logEvent('onboarding:finished:avatarResult', {
avatarResult: profileStepResults.isCreatedAvatar
? 'created'
: profileStepResults.image
? 'uploaded'
: 'default',
})
})(), })(),
]) ])
} catch (e: any) { } catch (e: any) {

View File

@ -79,9 +79,10 @@ export function StepProfile() {
const {state, dispatch} = React.useContext(Context) const {state, dispatch} = React.useContext(Context)
const [avatar, setAvatar] = React.useState<Avatar>({ const [avatar, setAvatar] = React.useState<Avatar>({
image: state.profileStepResults?.image, image: state.profileStepResults?.image,
placeholder: emojiItems.at, placeholder: state.profileStepResults.creatorState?.emoji || emojiItems.at,
backgroundColor: randomColor, backgroundColor:
useCreatedAvatar: false, state.profileStepResults.creatorState?.backgroundColor || randomColor,
useCreatedAvatar: state.profileStepResults.isCreatedAvatar,
}) })
const canvasRef = React.useRef<PlaceholderCanvasRef>(null) const canvasRef = React.useRef<PlaceholderCanvasRef>(null)
@ -144,17 +145,23 @@ export function StepProfile() {
image: avatar.image, image: avatar.image,
imageUri, imageUri,
imageMime: avatar.image?.mime ?? 'image/jpeg', imageMime: avatar.image?.mime ?? 'image/jpeg',
isCreatedAvatar: avatar.useCreatedAvatar,
creatorState: {
emoji: avatar.placeholder,
backgroundColor: avatar.backgroundColor,
},
}) })
} }
dispatch({type: 'next'}) dispatch({type: 'next'})
track('OnboardingV2:StepProfile:End') track('OnboardingV2:StepProfile:End')
logEvent('onboarding:profile:nextPressed', {}) logEvent('onboarding:profile:nextPressed', {})
}, [avatar.image, avatar.useCreatedAvatar, dispatch, track]) }, [avatar, dispatch, track])
const onDoneCreating = React.useCallback(() => { const onDoneCreating = React.useCallback(() => {
setAvatar(prev => ({ setAvatar(prev => ({
...prev, ...prev,
image: undefined,
useCreatedAvatar: true, useCreatedAvatar: true,
})) }))
creatorControl.close() creatorControl.close()

View File

@ -1,6 +1,7 @@
import React from 'react' import React from 'react'
import {logger} from '#/logger' import {logger} from '#/logger'
import {AvatarColor, Emoji} from '#/screens/Onboarding/StepProfile/types'
export type OnboardingState = { export type OnboardingState = {
hasPrev: boolean hasPrev: boolean
@ -31,6 +32,7 @@ export type OnboardingState = {
feedUris: string[] feedUris: string[]
} }
profileStepResults: { profileStepResults: {
isCreatedAvatar: boolean
image?: { image?: {
path: string path: string
mime: string mime: string
@ -40,6 +42,10 @@ export type OnboardingState = {
} }
imageUri?: string imageUri?: string
imageMime?: string imageMime?: string
creatorState?: {
emoji: Emoji
backgroundColor: AvatarColor
}
} }
} }
@ -72,9 +78,14 @@ export type OnboardingAction =
} }
| { | {
type: 'setProfileStepResults' type: 'setProfileStepResults'
isCreatedAvatar: boolean
image?: OnboardingState['profileStepResults']['image'] image?: OnboardingState['profileStepResults']['image']
imageUri: string imageUri: string
imageMime: string imageMime: string
creatorState?: {
emoji: Emoji
backgroundColor: AvatarColor
}
} }
export type ApiResponseMap = { export type ApiResponseMap = {
@ -111,6 +122,7 @@ export const initialState: OnboardingState = {
feedUris: [], feedUris: [],
}, },
profileStepResults: { profileStepResults: {
isCreatedAvatar: false,
image: undefined, image: undefined,
imageUri: '', imageUri: '',
imageMime: '', imageMime: '',
@ -286,6 +298,7 @@ export const initialStateReduced: OnboardingState = {
feedUris: [], feedUris: [],
}, },
profileStepResults: { profileStepResults: {
isCreatedAvatar: false,
image: undefined, image: undefined,
imageUri: '', imageUri: '',
imageMime: '', imageMime: '',
@ -341,9 +354,11 @@ export function reducerReduced(
} }
case 'setProfileStepResults': { case 'setProfileStepResults': {
next.profileStepResults = { next.profileStepResults = {
isCreatedAvatar: a.isCreatedAvatar,
image: a.image, image: a.image,
imageUri: a.imageUri, imageUri: a.imageUri,
imageMime: a.imageMime, imageMime: a.imageMime,
creatorState: a.creatorState,
} }
break break
} }