Bluesky app fork with some witchin' additions 💫
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

[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

authored by

Eric Bailey and committed by
GitHub
95514e3a 99800120

+37 -4
+3
src/lib/statsig/events.ts
··· 53 53 'onboarding:moderation:nextPressed': {} 54 54 'onboarding:profile:nextPressed': {} 55 55 'onboarding:finished:nextPressed': {} 56 + 'onboarding:finished:avatarResult': { 57 + avatarResult: 'default' | 'created' | 'uploaded' 58 + } 56 59 'home:feedDisplayed': { 57 60 feedUrl: string 58 61 feedType: string
+8
src/screens/Onboarding/StepFinished.tsx
··· 134 134 return existing 135 135 }) 136 136 } 137 + 138 + logEvent('onboarding:finished:avatarResult', { 139 + avatarResult: profileStepResults.isCreatedAvatar 140 + ? 'created' 141 + : profileStepResults.image 142 + ? 'uploaded' 143 + : 'default', 144 + }) 137 145 })(), 138 146 ]) 139 147 } catch (e: any) {
+11 -4
src/screens/Onboarding/StepProfile/index.tsx
··· 79 79 const {state, dispatch} = React.useContext(Context) 80 80 const [avatar, setAvatar] = React.useState<Avatar>({ 81 81 image: state.profileStepResults?.image, 82 - placeholder: emojiItems.at, 83 - backgroundColor: randomColor, 84 - useCreatedAvatar: false, 82 + placeholder: state.profileStepResults.creatorState?.emoji || emojiItems.at, 83 + backgroundColor: 84 + state.profileStepResults.creatorState?.backgroundColor || randomColor, 85 + useCreatedAvatar: state.profileStepResults.isCreatedAvatar, 85 86 }) 86 87 87 88 const canvasRef = React.useRef<PlaceholderCanvasRef>(null) ··· 144 145 image: avatar.image, 145 146 imageUri, 146 147 imageMime: avatar.image?.mime ?? 'image/jpeg', 148 + isCreatedAvatar: avatar.useCreatedAvatar, 149 + creatorState: { 150 + emoji: avatar.placeholder, 151 + backgroundColor: avatar.backgroundColor, 152 + }, 147 153 }) 148 154 } 149 155 150 156 dispatch({type: 'next'}) 151 157 track('OnboardingV2:StepProfile:End') 152 158 logEvent('onboarding:profile:nextPressed', {}) 153 - }, [avatar.image, avatar.useCreatedAvatar, dispatch, track]) 159 + }, [avatar, dispatch, track]) 154 160 155 161 const onDoneCreating = React.useCallback(() => { 156 162 setAvatar(prev => ({ 157 163 ...prev, 164 + image: undefined, 158 165 useCreatedAvatar: true, 159 166 })) 160 167 creatorControl.close()
+15
src/screens/Onboarding/state.ts
··· 1 1 import React from 'react' 2 2 3 3 import {logger} from '#/logger' 4 + import {AvatarColor, Emoji} from '#/screens/Onboarding/StepProfile/types' 4 5 5 6 export type OnboardingState = { 6 7 hasPrev: boolean ··· 31 32 feedUris: string[] 32 33 } 33 34 profileStepResults: { 35 + isCreatedAvatar: boolean 34 36 image?: { 35 37 path: string 36 38 mime: string ··· 40 42 } 41 43 imageUri?: string 42 44 imageMime?: string 45 + creatorState?: { 46 + emoji: Emoji 47 + backgroundColor: AvatarColor 48 + } 43 49 } 44 50 } 45 51 ··· 72 78 } 73 79 | { 74 80 type: 'setProfileStepResults' 81 + isCreatedAvatar: boolean 75 82 image?: OnboardingState['profileStepResults']['image'] 76 83 imageUri: string 77 84 imageMime: string 85 + creatorState?: { 86 + emoji: Emoji 87 + backgroundColor: AvatarColor 88 + } 78 89 } 79 90 80 91 export type ApiResponseMap = { ··· 111 122 feedUris: [], 112 123 }, 113 124 profileStepResults: { 125 + isCreatedAvatar: false, 114 126 image: undefined, 115 127 imageUri: '', 116 128 imageMime: '', ··· 286 298 feedUris: [], 287 299 }, 288 300 profileStepResults: { 301 + isCreatedAvatar: false, 289 302 image: undefined, 290 303 imageUri: '', 291 304 imageMime: '', ··· 341 354 } 342 355 case 'setProfileStepResults': { 343 356 next.profileStepResults = { 357 + isCreatedAvatar: a.isCreatedAvatar, 344 358 image: a.image, 345 359 imageUri: a.imageUri, 346 360 imageMime: a.imageMime, 361 + creatorState: a.creatorState, 347 362 } 348 363 break 349 364 }