From 332524b7dec18b5e19edacdb976467d6725a5df0 Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Mon, 17 Jun 2024 13:21:09 -0500 Subject: [PATCH 1/3] Add `native_pwi_disabled` feature gate experiment (#4507) * Add native_pwi_disabled feature gate experiment * Use const --- src/App.native.tsx | 9 ++++++++- src/lib/statsig/gates.ts | 1 + src/lib/statsig/statsig.tsx | 10 ++++++++-- src/view/shell/createNativeStackNavigatorWithAuth.tsx | 10 ++++++++-- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/App.native.tsx b/src/App.native.tsx index 5b2071e102..322e944a47 100644 --- a/src/App.native.tsx +++ b/src/App.native.tsx @@ -14,7 +14,11 @@ import * as SplashScreen from 'expo-splash-screen' import {msg} from '@lingui/macro' import {useLingui} from '@lingui/react' -import {Provider as StatsigProvider} from '#/lib/statsig/statsig' +import { + initialize, + Provider as StatsigProvider, + tryFetchGates, +} from '#/lib/statsig/statsig' import {logger} from '#/logger' import {MessagesProvider} from '#/state/messages' import {init as initPersistedState} from '#/state/persisted' @@ -69,6 +73,9 @@ function InnerApp() { try { if (account) { await resumeSession(account) + } else { + await initialize() + await tryFetchGates(undefined, 'prefer-fresh-gates') } } catch (e) { logger.error(`session: resume failed`, {message: e}) diff --git a/src/lib/statsig/gates.ts b/src/lib/statsig/gates.ts index 4481935f77..6e460dc60f 100644 --- a/src/lib/statsig/gates.ts +++ b/src/lib/statsig/gates.ts @@ -1,5 +1,6 @@ export type Gate = // Keep this alphabetic please. + | 'native_pwi_disabled' | 'request_notifications_permission_after_onboarding_v2' | 'show_avi_follow_button' | 'show_follow_back_label_v2' diff --git a/src/lib/statsig/statsig.tsx b/src/lib/statsig/statsig.tsx index f6aed999f9..b5a239c3a5 100644 --- a/src/lib/statsig/statsig.tsx +++ b/src/lib/statsig/statsig.tsx @@ -14,6 +14,8 @@ import {useNonReactiveCallback} from '../hooks/useNonReactiveCallback' import {LogEvents} from './events' import {Gate} from './gates' +const SDK_KEY = 'client-SXJakO39w9vIhl3D44u8UupyzFl4oZ2qPIkjwcvuPsV' + type StatsigUser = { userID: string | undefined // TODO: Remove when enough users have custom.platform: @@ -251,7 +253,7 @@ AppState.addEventListener('change', (state: AppStateStatus) => { }) export async function tryFetchGates( - did: string, + did: string | undefined, strategy: 'prefer-low-latency' | 'prefer-fresh-gates', ) { try { @@ -275,6 +277,10 @@ export async function tryFetchGates( } } +export function initialize() { + return Statsig.initialize(SDK_KEY, null, createStatsigOptions([])) +} + export function Provider({children}: {children: React.ReactNode}) { const {currentAccount, accounts} = useSession() const did = currentAccount?.did @@ -320,7 +326,7 @@ export function Provider({children}: {children: React.ReactNode}) { } if (hasSession && currentAccount?.signupQueued) { From 7e88d0d7a6c7ee81c218bab0ad7fa3a8e63025cf Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Mon, 17 Jun 2024 13:21:35 -0500 Subject: [PATCH 2/3] Onboarding fixes (#4508) * Add extra padding to bottom of profile step * Make profile pic gen higher res --- src/screens/Onboarding/Layout.tsx | 2 +- src/screens/Onboarding/StepProfile/PlaceholderCanvas.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/screens/Onboarding/Layout.tsx b/src/screens/Onboarding/Layout.tsx index 75e2f99fcd..02b207303e 100644 --- a/src/screens/Onboarding/Layout.tsx +++ b/src/screens/Onboarding/Layout.tsx @@ -152,7 +152,7 @@ export function Layout({children}: React.PropsWithChildren<{}>) { {children} - + diff --git a/src/screens/Onboarding/StepProfile/PlaceholderCanvas.tsx b/src/screens/Onboarding/StepProfile/PlaceholderCanvas.tsx index 29ba39a0b4..d1d1af6d9f 100644 --- a/src/screens/Onboarding/StepProfile/PlaceholderCanvas.tsx +++ b/src/screens/Onboarding/StepProfile/PlaceholderCanvas.tsx @@ -5,7 +5,7 @@ import ViewShot from 'react-native-view-shot' import {useAvatar} from '#/screens/Onboarding/StepProfile/index' import {atoms as a} from '#/alf' -const SIZE_MULTIPLIER = 1.5 +const SIZE_MULTIPLIER = 5 export interface PlaceholderCanvasRef { capture: () => Promise From 077da0830924d4c040ef095d8349f13fdfdf4372 Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Mon, 17 Jun 2024 13:56:11 -0500 Subject: [PATCH 3/3] Explore feed cards (#4521) * Replace FeedSourceCard on Explore page (cherry picked from commit e7e9787bfaa9368bfaeaaa4ca144ab77b438219c) * Replace FeedSourceCard on Search page (cherry picked from commit ac47aade7622d359eee9509763cda666d964d8a3) --- src/view/screens/Search/Explore.tsx | 23 ++++++++++------------- src/view/screens/Search/Search.tsx | 22 ++++++++++++---------- 2 files changed, 22 insertions(+), 23 deletions(-) diff --git a/src/view/screens/Search/Explore.tsx b/src/view/screens/Search/Explore.tsx index f6e998838a..c7f5f939fe 100644 --- a/src/view/screens/Search/Explore.tsx +++ b/src/view/screens/Search/Explore.tsx @@ -16,18 +16,17 @@ import {useModerationOpts} from '#/state/preferences/moderation-opts' import {useGetPopularFeedsQuery} from '#/state/queries/feed' import {usePreferencesQuery} from '#/state/queries/preferences' import {useSuggestedFollowsQuery} from '#/state/queries/suggested-follows' -import {useSession} from '#/state/session' import {cleanError} from 'lib/strings/errors' import {ProfileCardWithFollowBtn} from '#/view/com/profile/ProfileCard' import {List} from '#/view/com/util/List' import {UserAvatar} from '#/view/com/util/UserAvatar' -import {FeedSourceCard} from 'view/com/feeds/FeedSourceCard' import { FeedFeedLoadingPlaceholder, ProfileCardFeedLoadingPlaceholder, } from 'view/com/util/LoadingPlaceholder' import {atoms as a, useTheme, ViewStyleProp} from '#/alf' import {Button} from '#/components/Button' +import * as FeedCard from '#/components/FeedCard' import {ArrowBottom_Stroke2_Corner0_Rounded as ArrowBottom} from '#/components/icons/Arrow' import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo' import {Props as SVGIconProps} from '#/components/icons/common' @@ -271,7 +270,6 @@ type ExploreScreenItems = export function Explore() { const {_} = useLingui() const t = useTheme() - const {hasSession} = useSession() const {data: preferences, error: preferencesError} = usePreferencesQuery() const moderationOpts = useModerationOpts() const { @@ -480,15 +478,14 @@ export function Explore() { } case 'feed': { return ( - - + + ) } @@ -538,7 +535,7 @@ export function Explore() { } } }, - [t, hasSession, moderationOpts], + [t, moderationOpts], ) return ( diff --git a/src/view/screens/Search/Search.tsx b/src/view/screens/Search/Search.tsx index 53bd17e6ba..0b1fe37aaf 100644 --- a/src/view/screens/Search/Search.tsx +++ b/src/view/screens/Search/Search.tsx @@ -57,8 +57,8 @@ import {Text} from '#/view/com/util/text/Text' import {CenteredView, ScrollView} from '#/view/com/util/Views' import {Explore} from '#/view/screens/Search/Explore' import {SearchLinkCard, SearchProfileCard} from '#/view/shell/desktop/Search' -import {FeedSourceCard} from 'view/com/feeds/FeedSourceCard' -import {atoms as a} from '#/alf' +import {atoms as a, useTheme as useThemeNew} from '#/alf' +import * as FeedCard from '#/components/FeedCard' import {Menu_Stroke2_Corner0_Rounded as Menu} from '#/components/icons/Menu' function Loader() { @@ -285,8 +285,8 @@ let SearchScreenFeedsResults = ({ query: string active: boolean }): React.ReactNode => { + const t = useThemeNew() const {_} = useLingui() - const {hasSession} = useSession() const {data: results, isFetched} = usePopularFeedsSearch({ query, @@ -299,13 +299,15 @@ let SearchScreenFeedsResults = ({ ( - + + + )} keyExtractor={item => item.uri} // @ts-ignore web only -prf