fix types and update imports

This commit is contained in:
Ansh Nanda
2023-04-20 23:47:48 -07:00
parent 630d750a08
commit a03e376737
24 changed files with 57 additions and 60 deletions
+1 -1
View File
@@ -12,7 +12,7 @@ import * as view from './view/index'
import {RootStoreModel, setupState, RootStoreProvider} from './state' import {RootStoreModel, setupState, RootStoreProvider} from './state'
import {Shell} from './view/shell' import {Shell} from './view/shell'
import * as notifee from 'lib/notifee' import * as notifee from 'lib/notifee'
import * as analytics from 'lib/analytics' import * as analytics from 'lib/analytics/analytics'
import * as Toast from './view/com/util/Toast' import * as Toast from './view/com/util/Toast'
import {handleLink} from './Navigation' import {handleLink} from './Navigation'
+1 -1
View File
@@ -2,7 +2,7 @@ import React, {useState, useEffect} from 'react'
import {SafeAreaProvider} from 'react-native-safe-area-context' import {SafeAreaProvider} from 'react-native-safe-area-context'
import {RootSiblingParent} from 'react-native-root-siblings' import {RootSiblingParent} from 'react-native-root-siblings'
import * as view from './view/index' import * as view from './view/index'
import * as analytics from 'lib/analytics' import * as analytics from 'lib/analytics/analytics'
import {RootStoreModel, setupState, RootStoreProvider} from './state' import {RootStoreModel, setupState, RootStoreProvider} from './state'
import {Shell} from './view/shell/index' import {Shell} from './view/shell/index'
import {ToastContainer} from './view/com/util/Toast.web' import {ToastContainer} from './view/com/util/Toast.web'
@@ -5,11 +5,11 @@ import {
AnalyticsProvider, AnalyticsProvider,
useAnalytics as useAnalyticsOrig, useAnalytics as useAnalyticsOrig,
ClientMethods, ClientMethods,
JsonMap,
} from '@segment/analytics-react-native' } from '@segment/analytics-react-native'
import {RootStoreModel, AppInfo} from 'state/models/root-store' import {RootStoreModel, AppInfo} from 'state/models/root-store'
import {useStores} from 'state/models/root-store' import {useStores} from 'state/models/root-store'
import {sha256} from 'js-sha256' import {sha256} from 'js-sha256'
import {ScreenEvent, TrackEvent} from './types'
const segmentClient = createClient({ const segmentClient = createClient({
writeKey: '8I6DsgfiSLuoONyaunGoiQM7A6y2ybdI', writeKey: '8I6DsgfiSLuoONyaunGoiQM7A6y2ybdI',
@@ -21,17 +21,25 @@ export function useAnalytics() {
const methods: ClientMethods = useAnalyticsOrig() const methods: ClientMethods = useAnalyticsOrig()
return React.useMemo(() => { return React.useMemo(() => {
if (store.session.hasSession) { if (store.session.hasSession) {
return methods return {
screen: methods.screen as ScreenEvent,
track: methods.track as TrackEvent,
identify: methods.identify,
flush: methods.flush,
group: methods.group,
alias: methods.alias,
reset: methods.reset,
}
} }
// dont send analytics pings for anonymous users // dont send analytics pings for anonymous users
return { return {
screen: (name: string, properties?: JsonMap) => Promise<void>, screen: () => Promise<void>,
track: (event: string, properties?: JsonMap) => Promise<void>, track: () => Promise<void>,
identify: (userId?: string, userTraits?: UserTraits) => Promise<void>, identify: () => Promise<void>,
flush: () => Promise<void>, flush: () => Promise<void>,
group: (groupId: string, groupTraits?: GroupTraits) => Promise<void>, group: () => Promise<void>,
alias: (newUserId: string) => Promise<void>, alias: () => Promise<void>,
reset: (resetAnonymousId?: boolean) => Promise<void>, reset: () => Promise<void>,
} }
}, [store, methods]) }, [store, methods])
} }
+17 -30
View File
@@ -1,31 +1,18 @@
import { export type TrackEvent = (
ClientMethods, event: keyof TrackPropertiesMap,
GroupTraits, properties?: TrackPropertiesMap[keyof TrackPropertiesMap],
JsonMap, ) => Promise<void>
UserTraits,
} from '@segment/analytics-react-native'
export type IAnalyticsEvent = { export type ScreenEvent = (
name: keyof TrackPropertiesMap name: keyof ScreenPropertiesMap,
properties: TrackPropertiesMap[keyof TrackPropertiesMap] properties?: ScreenPropertiesMap[keyof ScreenPropertiesMap],
} ) => Promise<void>
interface TrackPropertiesMap {
export interface IAnalyticsProvider extends ClientMethods {
screen: (name: string, properties?: JsonMap) => Promise<void>
track: (event: string, properties?: JsonMap) => Promise<void>
identify: (userId?: string, userTraits?: UserTraits) => Promise<void>
flush: () => Promise<void>
group: (groupId: string, groupTraits?: GroupTraits) => Promise<void>
alias: (newUserId: string) => Promise<void>
reset: (resetAnonymousId?: boolean) => Promise<void>
}
export interface TrackPropertiesMap {
// LOGIN / SIGN UP events // LOGIN / SIGN UP events
'Sing In': {resumedSession: boolean} 'Sign In': {resumedSession: boolean}
'Create Account': {} 'Create Account': {}
'SignIn:ForgotPassowrd': {} 'Signin:PressedForgotPassword': {}
'SignIn:PressedSelectService': {} 'Signin:PressedSelectService': {}
// COMPOSER / CREATE POST events // COMPOSER / CREATE POST events
'Create Post': {imageCount: string} 'Create Post': {imageCount: string}
'Composer:PastedPhotos': {} 'Composer:PastedPhotos': {}
@@ -49,7 +36,7 @@ export interface TrackPropertiesMap {
'FeedItem:PostLike': {} 'FeedItem:PostLike': {}
'FeedItem:PostDelete': {} 'FeedItem:PostDelete': {}
// PROFILE HEADER events // PROFILE HEADER events
'ProfileHeaeder:EditProfileButtonClicked': {} 'ProfileHeader:EditProfileButtonClicked': {}
'ProfileHeader:FollowersButtonClicked': {} 'ProfileHeader:FollowersButtonClicked': {}
'ProfileHeader:FollowsButtonClicked': {} 'ProfileHeader:FollowsButtonClicked': {}
'ProfileHeader:ShareButtonClicked': {} 'ProfileHeader:ShareButtonClicked': {}
@@ -58,7 +45,7 @@ export interface TrackPropertiesMap {
'ProfileHeader:ReportAccountButtonClicked': {} 'ProfileHeader:ReportAccountButtonClicked': {}
'ViewHeader:MenuButtonClicked': {} 'ViewHeader:MenuButtonClicked': {}
// SETTINGS events // SETTINGS events
'Settings:SwitchAccountButtonCLicked': {} 'Settings:SwitchAccountButtonClicked': {}
'Settings:AddAccountButtonClicked': {} 'Settings:AddAccountButtonClicked': {}
'Settings:ChangeHandleButtonClicked': {} 'Settings:ChangeHandleButtonClicked': {}
'Settings:InvitecodesButtonClicked': {} 'Settings:InvitecodesButtonClicked': {}
@@ -68,13 +55,13 @@ export interface TrackPropertiesMap {
'Menu:ItemClicked': {url: string} 'Menu:ItemClicked': {url: string}
'Menu:FeedbackClicked': {} 'Menu:FeedbackClicked': {}
// MOBILE SHELL events // MOBILE SHELL events
'MobileShell:ProfileButtonPressed': {} 'MobileShell:MyProfileButtonPressed': {}
'MobileShell:FeedButtonPressed': {} 'MobileShell:HomeButtonPressed': {}
'MobileShell:SearchButtonPressed': {} 'MobileShell:SearchButtonPressed': {}
'MobileShell:NotificationsButtonPressed': {} 'MobileShell:NotificationsButtonPressed': {}
} }
export interface ScreenPropertiesMap { interface ScreenPropertiesMap {
Login: {} Login: {}
CreateAccount: {} CreateAccount: {}
'Choose Account': {} 'Choose Account': {}
+1 -1
View File
@@ -7,7 +7,7 @@ import {ErrorBoundary} from 'view/com/util/ErrorBoundary'
import {s} from 'lib/styles' import {s} from 'lib/styles'
import {usePalette} from 'lib/hooks/usePalette' import {usePalette} from 'lib/hooks/usePalette'
import {useStores} from 'state/index' import {useStores} from 'state/index'
import {useAnalytics} from 'lib/analytics' import {useAnalytics} from 'lib/analytics/analytics'
import {SplashScreen} from './SplashScreen' import {SplashScreen} from './SplashScreen'
import {CenteredView} from '../util/Views' import {CenteredView} from '../util/Views'
+1 -1
View File
@@ -8,7 +8,7 @@ import {
View, View,
} from 'react-native' } from 'react-native'
import {observer} from 'mobx-react-lite' import {observer} from 'mobx-react-lite'
import {useAnalytics} from 'lib/analytics' import {useAnalytics} from 'lib/analytics/analytics'
import {Text} from '../../util/text/Text' import {Text} from '../../util/text/Text'
import {s, colors} from 'lib/styles' import {s, colors} from 'lib/styles'
import {useStores} from 'state/index' import {useStores} from 'state/index'
+1 -1
View File
@@ -14,7 +14,7 @@ import {
} from '@fortawesome/react-native-fontawesome' } from '@fortawesome/react-native-fontawesome'
import * as EmailValidator from 'email-validator' import * as EmailValidator from 'email-validator'
import {BskyAgent} from '@atproto/api' import {BskyAgent} from '@atproto/api'
import {useAnalytics} from 'lib/analytics' import {useAnalytics} from 'lib/analytics/analytics'
import {Text} from '../../util/text/Text' import {Text} from '../../util/text/Text'
import {UserAvatar} from '../../util/UserAvatar' import {UserAvatar} from '../../util/UserAvatar'
import {s, colors} from 'lib/styles' import {s, colors} from 'lib/styles'
+1 -1
View File
@@ -14,7 +14,7 @@ import {useSafeAreaInsets} from 'react-native-safe-area-context'
import LinearGradient from 'react-native-linear-gradient' import LinearGradient from 'react-native-linear-gradient'
import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
import {RichText} from '@atproto/api' import {RichText} from '@atproto/api'
import {useAnalytics} from 'lib/analytics' import {useAnalytics} from 'lib/analytics/analytics'
import {UserAutocompleteModel} from 'state/models/discovery/user-autocomplete' import {UserAutocompleteModel} from 'state/models/discovery/user-autocomplete'
import {ExternalEmbed} from './ExternalEmbed' import {ExternalEmbed} from './ExternalEmbed'
import {Text} from '../util/text/Text' import {Text} from '../util/text/Text'
@@ -5,7 +5,7 @@ import {
FontAwesomeIconStyle, FontAwesomeIconStyle,
} from '@fortawesome/react-native-fontawesome' } from '@fortawesome/react-native-fontawesome'
import {usePalette} from 'lib/hooks/usePalette' import {usePalette} from 'lib/hooks/usePalette'
import {useAnalytics} from 'lib/analytics' import {useAnalytics} from 'lib/analytics/analytics'
import {useStores} from 'state/index' import {useStores} from 'state/index'
import {s} from 'lib/styles' import {s} from 'lib/styles'
import {isDesktopWeb} from 'platform/detection' import {isDesktopWeb} from 'platform/detection'
@@ -5,7 +5,7 @@ import {
FontAwesomeIconStyle, FontAwesomeIconStyle,
} from '@fortawesome/react-native-fontawesome' } from '@fortawesome/react-native-fontawesome'
import {usePalette} from 'lib/hooks/usePalette' import {usePalette} from 'lib/hooks/usePalette'
import {useAnalytics} from 'lib/analytics' import {useAnalytics} from 'lib/analytics/analytics'
import {s} from 'lib/styles' import {s} from 'lib/styles'
import {isDesktopWeb} from 'platform/detection' import {isDesktopWeb} from 'platform/detection'
import {usePhotoLibraryPermission} from 'lib/hooks/usePermissions' import {usePhotoLibraryPermission} from 'lib/hooks/usePermissions'
+1 -1
View File
@@ -18,7 +18,7 @@ import {s} from 'lib/styles'
import {makeValidHandle, createFullHandle} from 'lib/strings/handles' import {makeValidHandle, createFullHandle} from 'lib/strings/handles'
import {usePalette} from 'lib/hooks/usePalette' import {usePalette} from 'lib/hooks/usePalette'
import {useTheme} from 'lib/ThemeContext' import {useTheme} from 'lib/ThemeContext'
import {useAnalytics} from 'lib/analytics' import {useAnalytics} from 'lib/analytics/analytics'
import {cleanError} from 'lib/strings/errors' import {cleanError} from 'lib/strings/errors'
export const snapPoints = ['100%'] export const snapPoints = ['100%']
+1 -1
View File
@@ -21,7 +21,7 @@ import {UserBanner} from '../util/UserBanner'
import {UserAvatar} from '../util/UserAvatar' import {UserAvatar} from '../util/UserAvatar'
import {usePalette} from 'lib/hooks/usePalette' import {usePalette} from 'lib/hooks/usePalette'
import {useTheme} from 'lib/ThemeContext' import {useTheme} from 'lib/ThemeContext'
import {useAnalytics} from 'lib/analytics' import {useAnalytics} from 'lib/analytics/analytics'
import {cleanError, isNetworkError} from 'lib/strings/errors' import {cleanError, isNetworkError} from 'lib/strings/errors'
export const snapPoints = ['80%'] export const snapPoints = ['80%']
+1 -1
View File
@@ -16,7 +16,7 @@ import {FeedSlice} from './FeedSlice'
import {LoadMoreRetryBtn} from '../util/LoadMoreRetryBtn' import {LoadMoreRetryBtn} from '../util/LoadMoreRetryBtn'
import {OnScrollCb} from 'lib/hooks/useOnMainScroll' import {OnScrollCb} from 'lib/hooks/useOnMainScroll'
import {s} from 'lib/styles' import {s} from 'lib/styles'
import {useAnalytics} from 'lib/analytics' import {useAnalytics} from 'lib/analytics/analytics'
import {usePalette} from 'lib/hooks/usePalette' import {usePalette} from 'lib/hooks/usePalette'
const LOADING_ITEM = {_reactKey: '__loading__'} const LOADING_ITEM = {_reactKey: '__loading__'}
+1 -1
View File
@@ -22,7 +22,7 @@ import {UserAvatar} from '../util/UserAvatar'
import {s} from 'lib/styles' import {s} from 'lib/styles'
import {useStores} from 'state/index' import {useStores} from 'state/index'
import {usePalette} from 'lib/hooks/usePalette' import {usePalette} from 'lib/hooks/usePalette'
import {useAnalytics} from 'lib/analytics' import {useAnalytics} from 'lib/analytics/analytics'
import {sanitizeDisplayName} from 'lib/strings/display-names' import {sanitizeDisplayName} from 'lib/strings/display-names'
export const FeedItem = observer(function ({ export const FeedItem = observer(function ({
+1 -1
View File
@@ -29,7 +29,7 @@ import {UserAvatar} from '../util/UserAvatar'
import {UserBanner} from '../util/UserBanner' import {UserBanner} from '../util/UserBanner'
import {ProfileHeaderLabels} from '../util/moderation/ProfileHeaderLabels' import {ProfileHeaderLabels} from '../util/moderation/ProfileHeaderLabels'
import {usePalette} from 'lib/hooks/usePalette' import {usePalette} from 'lib/hooks/usePalette'
import {useAnalytics} from 'lib/analytics' import {useAnalytics} from 'lib/analytics/analytics'
import {NavigationProp} from 'lib/routes/types' import {NavigationProp} from 'lib/routes/types'
import {isAndroid, isDesktopWeb, isIOS} from 'platform/detection' import {isAndroid, isDesktopWeb, isIOS} from 'platform/detection'
import {FollowState} from 'state/models/cache/my-follows' import {FollowState} from 'state/models/cache/my-follows'
+1 -1
View File
@@ -10,7 +10,7 @@ import {MagnifyingGlassIcon} from 'lib/icons'
import {useTheme} from 'lib/ThemeContext' import {useTheme} from 'lib/ThemeContext'
import {usePalette} from 'lib/hooks/usePalette' import {usePalette} from 'lib/hooks/usePalette'
import {useStores} from 'state/index' import {useStores} from 'state/index'
import {useAnalytics} from 'lib/analytics' import {useAnalytics} from 'lib/analytics/analytics'
const MENU_HITSLOP = {left: 10, top: 10, right: 30, bottom: 10} const MENU_HITSLOP = {left: 10, top: 10, right: 30, bottom: 10}
+1 -1
View File
@@ -8,7 +8,7 @@ import {Text} from './text/Text'
import {useStores} from 'state/index' import {useStores} from 'state/index'
import {usePalette} from 'lib/hooks/usePalette' import {usePalette} from 'lib/hooks/usePalette'
import {useAnimatedValue} from 'lib/hooks/useAnimatedValue' import {useAnimatedValue} from 'lib/hooks/useAnimatedValue'
import {useAnalytics} from 'lib/analytics' import {useAnalytics} from 'lib/analytics/analytics'
import {NavigationProp} from 'lib/routes/types' import {NavigationProp} from 'lib/routes/types'
import {isDesktopWeb} from 'platform/detection' import {isDesktopWeb} from 'platform/detection'
+1 -1
View File
@@ -15,7 +15,7 @@ import {FAB} from '../com/util/fab/FAB'
import {useStores} from 'state/index' import {useStores} from 'state/index'
import {s} from 'lib/styles' import {s} from 'lib/styles'
import {useOnMainScroll} from 'lib/hooks/useOnMainScroll' import {useOnMainScroll} from 'lib/hooks/useOnMainScroll'
import {useAnalytics} from 'lib/analytics' import {useAnalytics} from 'lib/analytics/analytics'
import {ComposeIcon2} from 'lib/icons' import {ComposeIcon2} from 'lib/icons'
import {isDesktopWeb} from 'platform/detection' import {isDesktopWeb} from 'platform/detection'
+1 -1
View File
@@ -14,7 +14,7 @@ import {LoadLatestBtn} from 'view/com/util/load-latest/LoadLatestBtn'
import {useStores} from 'state/index' import {useStores} from 'state/index'
import {useOnMainScroll} from 'lib/hooks/useOnMainScroll' import {useOnMainScroll} from 'lib/hooks/useOnMainScroll'
import {s} from 'lib/styles' import {s} from 'lib/styles'
import {useAnalytics} from 'lib/analytics' import {useAnalytics} from 'lib/analytics/analytics'
type Props = NativeStackScreenProps< type Props = NativeStackScreenProps<
NotificationsTabNavigatorParams, NotificationsTabNavigatorParams,
+1 -1
View File
@@ -19,7 +19,7 @@ import {Text} from '../com/util/text/Text'
import {FAB} from '../com/util/fab/FAB' import {FAB} from '../com/util/fab/FAB'
import {s, colors} from 'lib/styles' import {s, colors} from 'lib/styles'
import {useOnMainScroll} from 'lib/hooks/useOnMainScroll' import {useOnMainScroll} from 'lib/hooks/useOnMainScroll'
import {useAnalytics} from 'lib/analytics' import {useAnalytics} from 'lib/analytics/analytics'
import {ComposeIcon2} from 'lib/icons' import {ComposeIcon2} from 'lib/icons'
type Props = NativeStackScreenProps<CommonNavigatorParams, 'Profile'> type Props = NativeStackScreenProps<CommonNavigatorParams, 'Profile'>
+1 -1
View File
@@ -32,7 +32,7 @@ import {DropdownButton} from 'view/com/util/forms/DropdownButton'
import {usePalette} from 'lib/hooks/usePalette' import {usePalette} from 'lib/hooks/usePalette'
import {useCustomPalette} from 'lib/hooks/useCustomPalette' import {useCustomPalette} from 'lib/hooks/useCustomPalette'
import {AccountData} from 'state/models/session' import {AccountData} from 'state/models/session'
import {useAnalytics} from 'lib/analytics' import {useAnalytics} from 'lib/analytics/analytics'
import {NavigationProp} from 'lib/routes/types' import {NavigationProp} from 'lib/routes/types'
import {pluralize} from 'lib/strings/helpers' import {pluralize} from 'lib/strings/helpers'
+1 -1
View File
@@ -33,7 +33,7 @@ import {UserAvatar} from 'view/com/util/UserAvatar'
import {Text} from 'view/com/util/text/Text' import {Text} from 'view/com/util/text/Text'
import {useTheme} from 'lib/ThemeContext' import {useTheme} from 'lib/ThemeContext'
import {usePalette} from 'lib/hooks/usePalette' import {usePalette} from 'lib/hooks/usePalette'
import {useAnalytics} from 'lib/analytics' import {useAnalytics} from 'lib/analytics/analytics'
import {pluralize} from 'lib/strings/helpers' import {pluralize} from 'lib/strings/helpers'
import {getTabState, TabState} from 'lib/routes/helpers' import {getTabState, TabState} from 'lib/routes/helpers'
import {NavigationProp} from 'lib/routes/types' import {NavigationProp} from 'lib/routes/types'
+4 -2
View File
@@ -11,7 +11,7 @@ import {useSafeAreaInsets} from 'react-native-safe-area-context'
import {observer} from 'mobx-react-lite' import {observer} from 'mobx-react-lite'
import {Text} from 'view/com/util/text/Text' import {Text} from 'view/com/util/text/Text'
import {useStores} from 'state/index' import {useStores} from 'state/index'
import {useAnalytics} from 'lib/analytics' import {useAnalytics} from 'lib/analytics/analytics'
import {clamp} from 'lib/numbers' import {clamp} from 'lib/numbers'
import { import {
HomeIcon, HomeIcon,
@@ -29,6 +29,8 @@ import {styles} from './BottomBarStyles'
import {useMinimalShellMode} from 'lib/hooks/useMinimalShellMode' import {useMinimalShellMode} from 'lib/hooks/useMinimalShellMode'
import {useNavigationTabState} from 'lib/hooks/useNavigationTabState' import {useNavigationTabState} from 'lib/hooks/useNavigationTabState'
type TabOptions = 'Home' | 'Search' | 'Notifications' | 'MyProfile'
export const BottomBar = observer(({navigation}: BottomTabBarProps) => { export const BottomBar = observer(({navigation}: BottomTabBarProps) => {
const store = useStores() const store = useStores()
const pal = usePalette('default') const pal = usePalette('default')
@@ -40,7 +42,7 @@ export const BottomBar = observer(({navigation}: BottomTabBarProps) => {
const {footerMinimalShellTransform} = useMinimalShellMode() const {footerMinimalShellTransform} = useMinimalShellMode()
const onPressTab = React.useCallback( const onPressTab = React.useCallback(
(tab: string) => { (tab: TabOptions) => {
track(`MobileShell:${tab}ButtonPressed`) track(`MobileShell:${tab}ButtonPressed`)
const state = navigation.getState() const state = navigation.getState()
const tabState = getTabState(state, tab) const tabState = getTabState(state, tab)