61004b887b
* WIP * Sorting working * Rough handling of hidden/muted * Better muted/hidden sorting and handling * Clarify some naming * Fix parents * Handle first reply under highlighted/composer * WIP RaW * WIP optimistic * Optimistic WIP * Little cleanup, inserting dupes * Re-org * Add in new optimistic insert logic * Update types * Sorta working linear view optimistic state * Simple working version, no pref for OP * Working optimistic reply insertions, preference for OP * Ensure deletes are coming through * WIP scroll handling * WIP scroll tweaks * Clean up scrolling * Clean up onPostSuccess * Add annotations * Fix highlighted post calc * WIP kill me * Update APIs * Nvm don't kill me * Fix optimistic insert * Handle read more cases in tree view * Basically working read more * Handle linear view * Reorg * More reorg * Split up thread post components * New reply tree layout * Fix up traversal metadata * Tighten some spacing * Use indent ya idiot * Some linear mode cleanup * Fix lines on read more items * Vibe coding to success * Almost there with read mores * Update APIs * Bump sdk * Update import * Checkpoint new traversal * Checkpoint cleanup * Checkpoint, need to fix blocked posts * Checkpoint: think we're good, needs more cleanup * Clean it up * Two passes only * Set to default params, update comment * Fix render bug on native * Checkpoint parent rendering, can opt for slower handling here * Clean up parent handling, reply handling * Fix read more extra space * Fix read more in linear view * Fix hidden reply handling, seen count, before/after calc * Update naming * Rename Slice to ThreadItem * Add basic post and anchor skeletons * Refactor client-side hidden * WIP hidden fetching * Update types * Clean up query a bit * Scrolling still broken * Ok maybe fix scrolling * Checkpoint move state into meta query * Don't load remote hidden items unless needed * skeleton view * Reset hidden items when params change * Split up traversal and avoid multiple passes * Clean up * Checkpoint: handling exhausted replies * Clean up traversal functions further * Clean up pagination * Limit optimistic reply depth * Handle optimistic insert in hidden replies * Share root query key for easier cache extraction * Make blurred posts not look like ass * Fix double deleted item * Make optimistic deleted state not look like crap in tree view * Fix parents traversal 4 real * Rename tree post * Make optimistic deletions of linear posts not look bad * Rename linear post components * Handle tombstone views * Rename read more component * Add moreParents handling * Align interaction states of read more * Fix read more on FF * Tree view skeleton * Reply composer skele * Remove hack for showing more replies * Checkpoint: sort change scrolling fixed * Checkpoint: learned new things, reset to base * Feature gate * Rename * Replace show more * Update settings screen * Update pkg and endpoint * Remove console * Eureka * Cleanup last commit * No tests atm * Remove scroll provider * Clean up callbacks, better error state * Remove todo * Remove todo * Remove todos * Format * Ok I think scrolling is solid * Add back mobile compose input * Ok need to compute headerHeight every time * Update comments * Ok button up web too * Threads v2 tweaks (#8467) * fix error screen collapsing * use personx icon for blocked posts * Remove height/width * Revert unused Header change * Clarify code * Relate consts to theme values * Remove debug code * Typo * Fix debounce of threads prefs * Update metadata comments, dev mode * Missed a spot * Clean up todo * Fix up no-unauthenticated posts * Truncate parents if no-unauth * Update getBranch docs * Remove debug code * Expand fetching in some cases * Clear scroll need for root post to fix jump bug * Fix reply composer skeleton state * Remove uneeded initialized value * Add profile shadow cache * Some metrics * prettier tweak * eslint ignore * Fix optimistic insertion * Typo * Rename, comment * Remove wait * Counter naming * Replies seen counter for moderated sub-trees * Remove borders on skeleton * Align tombstone with optimistic deletion state * Fix optimistic deletion for thread * Add tree view icon * Rename * Cleanup * Update settings copy * Header menu open metric * Bump package * Better reply prompt (#8474) * restyle reply prompt * hide bottom bar border for cleaner look * use new border hiding hook in DMs * create `transparentifyColor` function * adjust padding * fix padding in immersive lpayer * Apply suggestions from code review Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Integrate post-source (cherry picked from commit fe053e9b38395a4fcb30a4367bc800f64ea84fe9) --------- Co-authored-by: Samuel Newman <mozzius@protonmail.com> Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com>
447 lines
10 KiB
TypeScript
447 lines
10 KiB
TypeScript
import {type NotificationReason} from '#/lib/hooks/useNotificationHandler'
|
|
import {type FeedDescriptor} from '#/state/queries/post-feed'
|
|
|
|
export type MetricEvents = {
|
|
// App events
|
|
init: {
|
|
initMs: number
|
|
}
|
|
'account:loggedIn': {
|
|
logContext:
|
|
| 'LoginForm'
|
|
| 'SwitchAccount'
|
|
| 'ChooseAccountForm'
|
|
| 'Settings'
|
|
| 'Notification'
|
|
withPassword: boolean
|
|
}
|
|
'account:loggedOut': {
|
|
logContext:
|
|
| 'SwitchAccount'
|
|
| 'Settings'
|
|
| 'SignupQueued'
|
|
| 'Deactivated'
|
|
| 'Takendown'
|
|
scope: 'current' | 'every'
|
|
}
|
|
'notifications:openApp': {
|
|
reason: NotificationReason
|
|
}
|
|
'notifications:request': {
|
|
context: 'StartOnboarding' | 'AfterOnboarding' | 'Login' | 'Home'
|
|
status: 'granted' | 'denied' | 'undetermined'
|
|
}
|
|
'state:background': {
|
|
secondsActive: number
|
|
}
|
|
'state:foreground': {}
|
|
'router:navigate': {
|
|
from?: string
|
|
}
|
|
'deepLink:referrerReceived': {
|
|
to: string
|
|
referrer: string
|
|
hostname: string
|
|
}
|
|
|
|
// Screen events
|
|
'splash:signInPressed': {}
|
|
'splash:createAccountPressed': {}
|
|
'signup:nextPressed': {
|
|
activeStep: number
|
|
phoneVerificationRequired?: boolean
|
|
}
|
|
'signup:backPressed': {
|
|
activeStep: number
|
|
}
|
|
'signup:captchaSuccess': {}
|
|
'signup:captchaFailure': {}
|
|
'signup:fieldError': {
|
|
field: string
|
|
errorCount: number
|
|
errorMessage: string
|
|
activeStep: number
|
|
}
|
|
'signup:backgrounded': {
|
|
activeStep: number
|
|
backgroundCount: number
|
|
}
|
|
'signup:handleTaken': {}
|
|
'signin:hostingProviderPressed': {
|
|
hostingProviderDidChange: boolean
|
|
}
|
|
'signin:hostingProviderFailedResolution': {}
|
|
'signin:success': {
|
|
failedAttemptsCount: number
|
|
isUsingCustomProvider: boolean
|
|
timeTakenSeconds: number
|
|
}
|
|
'signin:backPressed': {
|
|
failedAttemptsCount: number
|
|
}
|
|
'signin:forgotPasswordPressed': {}
|
|
'signin:passwordReset': {}
|
|
'signin:passwordResetSuccess': {}
|
|
'signin:passwordResetFailure': {}
|
|
'onboarding:interests:nextPressed': {
|
|
selectedInterests: string[]
|
|
selectedInterestsLength: number
|
|
}
|
|
'onboarding:suggestedAccounts:nextPressed': {
|
|
selectedAccountsLength: number
|
|
skipped: boolean
|
|
}
|
|
'onboarding:followingFeed:nextPressed': {}
|
|
'onboarding:algoFeeds:nextPressed': {
|
|
selectedPrimaryFeeds: string[]
|
|
selectedPrimaryFeedsLength: number
|
|
selectedSecondaryFeeds: string[]
|
|
selectedSecondaryFeedsLength: number
|
|
}
|
|
'onboarding:topicalFeeds:nextPressed': {
|
|
selectedFeeds: string[]
|
|
selectedFeedsLength: number
|
|
}
|
|
'onboarding:moderation:nextPressed': {}
|
|
'onboarding:profile:nextPressed': {}
|
|
'onboarding:finished:nextPressed': {
|
|
usedStarterPack: boolean
|
|
starterPackName?: string
|
|
starterPackCreator?: string
|
|
starterPackUri?: string
|
|
profilesFollowed: number
|
|
feedsPinned: number
|
|
}
|
|
'onboarding:finished:avatarResult': {
|
|
avatarResult: 'default' | 'created' | 'uploaded'
|
|
}
|
|
'home:feedDisplayed': {
|
|
feedUrl: string
|
|
feedType: string
|
|
index: number
|
|
}
|
|
'feed:endReached': {
|
|
feedUrl: string
|
|
feedType: string
|
|
itemCount: number
|
|
}
|
|
'feed:refresh': {
|
|
feedUrl: string
|
|
feedType: string
|
|
reason: 'pull-to-refresh' | 'soft-reset' | 'load-latest'
|
|
}
|
|
'feed:save': {
|
|
feedUrl: string
|
|
}
|
|
'feed:unsave': {
|
|
feedUrl: string
|
|
}
|
|
'feed:pin': {
|
|
feedUrl: string
|
|
}
|
|
'feed:unpin': {
|
|
feedUrl: string
|
|
}
|
|
'feed:like': {
|
|
feedUrl: string
|
|
}
|
|
'feed:unlike': {
|
|
feedUrl: string
|
|
}
|
|
'feed:share': {
|
|
feedUrl: string
|
|
}
|
|
'feed:suggestion:seen': {
|
|
feedUrl: string
|
|
}
|
|
'feed:suggestion:press': {
|
|
feedUrl: string
|
|
}
|
|
'discover:showMore': {
|
|
feedContext: string
|
|
}
|
|
'discover:showLess': {
|
|
feedContext: string
|
|
}
|
|
'discover:clickthrough': {
|
|
count: number
|
|
}
|
|
'discover:engaged': {
|
|
count: number
|
|
}
|
|
'discover:seen': {
|
|
count: number
|
|
}
|
|
|
|
'composer:gif:open': {}
|
|
'composer:gif:select': {}
|
|
|
|
// Data events
|
|
'account:create:begin': {}
|
|
'account:create:success': {
|
|
signupDuration: number
|
|
fieldErrorsTotal: number
|
|
backgroundCount: number
|
|
}
|
|
'post:create': {
|
|
imageCount: number
|
|
isReply: boolean
|
|
isPartOfThread: boolean
|
|
hasLink: boolean
|
|
hasQuote: boolean
|
|
langs: string
|
|
logContext: 'Composer'
|
|
}
|
|
'thread:create': {
|
|
postCount: number
|
|
isReply: boolean
|
|
}
|
|
'post:like': {
|
|
doesLikerFollowPoster: boolean | undefined
|
|
doesPosterFollowLiker: boolean | undefined
|
|
likerClout: number | undefined
|
|
postClout: number | undefined
|
|
logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
|
|
feedDescriptor?: string
|
|
}
|
|
'post:repost': {
|
|
logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
|
|
feedDescriptor?: string
|
|
}
|
|
'post:unlike': {
|
|
logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
|
|
feedDescriptor?: string
|
|
}
|
|
'post:unrepost': {
|
|
logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
|
|
feedDescriptor?: string
|
|
}
|
|
'post:mute': {}
|
|
'post:unmute': {}
|
|
'post:pin': {}
|
|
'post:unpin': {}
|
|
'profile:follow': {
|
|
didBecomeMutual: boolean | undefined
|
|
followeeClout: number | undefined
|
|
followerClout: number | undefined
|
|
logContext:
|
|
| 'RecommendedFollowsItem'
|
|
| 'PostThreadItem'
|
|
| 'ProfileCard'
|
|
| 'ProfileHeader'
|
|
| 'ProfileHeaderSuggestedFollows'
|
|
| 'ProfileMenu'
|
|
| 'ProfileHoverCard'
|
|
| 'AvatarButton'
|
|
| 'StarterPackProfilesList'
|
|
| 'FeedInterstitial'
|
|
| 'ProfileHeaderSuggestedFollows'
|
|
| 'PostOnboardingFindFollows'
|
|
| 'ImmersiveVideo'
|
|
| 'ExploreSuggestedAccounts'
|
|
}
|
|
'suggestedUser:follow': {
|
|
logContext:
|
|
| 'Explore'
|
|
| 'InterstitialDiscover'
|
|
| 'InterstitialProfile'
|
|
| 'Profile'
|
|
location: 'Card' | 'Profile'
|
|
recId?: number
|
|
position: number
|
|
}
|
|
'suggestedUser:press': {
|
|
logContext: 'Explore' | 'InterstitialDiscover' | 'InterstitialProfile'
|
|
recId?: number
|
|
position: number
|
|
}
|
|
'suggestedUser:seen': {
|
|
logContext: 'Explore' | 'InterstitialDiscover' | 'InterstitialProfile'
|
|
recId?: number
|
|
position: number
|
|
}
|
|
'profile:unfollow': {
|
|
logContext:
|
|
| 'RecommendedFollowsItem'
|
|
| 'PostThreadItem'
|
|
| 'ProfileCard'
|
|
| 'ProfileHeader'
|
|
| 'ProfileHeaderSuggestedFollows'
|
|
| 'ProfileMenu'
|
|
| 'ProfileHoverCard'
|
|
| 'Chat'
|
|
| 'AvatarButton'
|
|
| 'StarterPackProfilesList'
|
|
| 'FeedInterstitial'
|
|
| 'ProfileHeaderSuggestedFollows'
|
|
| 'PostOnboardingFindFollows'
|
|
| 'ImmersiveVideo'
|
|
| 'ExploreSuggestedAccounts'
|
|
}
|
|
'chat:create': {
|
|
logContext: 'ProfileHeader' | 'NewChatDialog' | 'SendViaChatDialog'
|
|
}
|
|
'chat:open': {
|
|
logContext:
|
|
| 'ProfileHeader'
|
|
| 'NewChatDialog'
|
|
| 'ChatsList'
|
|
| 'SendViaChatDialog'
|
|
}
|
|
'starterPack:share': {
|
|
starterPack: string
|
|
shareType: 'link' | 'qrcode'
|
|
qrShareType?: 'save' | 'copy' | 'share'
|
|
}
|
|
'starterPack:followAll': {
|
|
logContext: 'StarterPackProfilesList' | 'Onboarding'
|
|
starterPack: string
|
|
count: number
|
|
}
|
|
'starterPack:delete': {}
|
|
'starterPack:create': {
|
|
setName: boolean
|
|
setDescription: boolean
|
|
profilesCount: number
|
|
feedsCount: number
|
|
}
|
|
'starterPack:ctaPress': {
|
|
starterPack: string
|
|
}
|
|
'starterPack:opened': {
|
|
starterPack: string
|
|
}
|
|
'link:clicked': {
|
|
url: string
|
|
domain: string
|
|
}
|
|
|
|
'feed:interstitial:feedCard:press': {}
|
|
|
|
'profile:header:suggestedFollowsCard:press': {}
|
|
|
|
'test:all:always': {}
|
|
'test:all:sometimes': {}
|
|
'test:all:boosted_by_gate1': {reason: 'base' | 'gate1'}
|
|
'test:all:boosted_by_gate2': {reason: 'base' | 'gate2'}
|
|
'test:all:boosted_by_both': {reason: 'base' | 'gate1' | 'gate2'}
|
|
'test:gate1:always': {}
|
|
'test:gate1:sometimes': {}
|
|
'test:gate2:always': {}
|
|
'test:gate2:sometimes': {}
|
|
|
|
'tmd:share': {}
|
|
'tmd:download': {}
|
|
'tmd:post': {}
|
|
|
|
'trendingTopics:show': {
|
|
context: 'settings'
|
|
}
|
|
'trendingTopics:hide': {
|
|
context: 'settings' | 'sidebar' | 'interstitial' | 'explore:trending'
|
|
}
|
|
'trendingTopic:click': {
|
|
context: 'sidebar' | 'interstitial' | 'explore'
|
|
}
|
|
'recommendedTopic:click': {
|
|
context: 'explore'
|
|
}
|
|
'trendingVideos:show': {
|
|
context: 'settings'
|
|
}
|
|
'trendingVideos:hide': {
|
|
context: 'settings' | 'interstitial:discover' | 'interstitial:explore'
|
|
}
|
|
'videoCard:click': {
|
|
context: 'interstitial:discover' | 'interstitial:explore' | 'feed'
|
|
}
|
|
|
|
'explore:module:seen': {
|
|
module:
|
|
| 'trendingTopics'
|
|
| 'trendingVideos'
|
|
| 'suggestedAccounts'
|
|
| 'suggestedFeeds'
|
|
| 'suggestedStarterPacks'
|
|
| `feed:${FeedDescriptor}`
|
|
}
|
|
'explore:module:searchButtonPress': {
|
|
module: 'suggestedAccounts' | 'suggestedFeeds'
|
|
}
|
|
'explore:suggestedAccounts:tabPressed': {
|
|
tab: string
|
|
}
|
|
|
|
'progressGuide:hide': {}
|
|
'progressGuide:followDialog:open': {}
|
|
|
|
'moderation:subscribedToLabeler': {}
|
|
'moderation:unsubscribedFromLabeler': {}
|
|
'moderation:changeLabelPreference': {
|
|
preference: string
|
|
}
|
|
|
|
'moderation:subscribedToList': {
|
|
listType: 'mute' | 'block'
|
|
}
|
|
'moderation:unsubscribedFromList': {
|
|
listType: 'mute' | 'block'
|
|
}
|
|
|
|
'reportDialog:open': {
|
|
subjectType: string
|
|
}
|
|
'reportDialog:close': {}
|
|
'reportDialog:success': {
|
|
reason: string
|
|
labeler: string
|
|
details: boolean
|
|
}
|
|
'reportDialog:failure': {}
|
|
|
|
translate: {
|
|
sourceLanguages: string[]
|
|
targetLanguage: string
|
|
textLength: number
|
|
}
|
|
|
|
'verification:create': {}
|
|
'verification:revoke': {}
|
|
'verification:badge:click': {}
|
|
'verification:learn-more': {
|
|
location:
|
|
| 'initialAnnouncementeNux'
|
|
| 'verificationsDialog'
|
|
| 'verifierDialog'
|
|
| 'verificationSettings'
|
|
}
|
|
'verification:settings:hideBadges': {}
|
|
'verification:settings:unHideBadges': {}
|
|
|
|
'live:create': {duration: number}
|
|
'live:edit': {}
|
|
'live:remove': {}
|
|
'live:card:open': {subject: string; from: 'post' | 'profile'}
|
|
'live:card:watch': {subject: string}
|
|
'live:card:openProfile': {subject: string}
|
|
'live:view:profile': {subject: string}
|
|
'live:view:post': {subject: string; feed?: string}
|
|
|
|
'share:open': {context: 'feed' | 'thread'}
|
|
'share:press:copyLink': {}
|
|
'share:press:nativeShare': {}
|
|
'share:press:openDmSearch': {}
|
|
'share:press:dmSelected': {}
|
|
'share:press:recentDm': {}
|
|
'share:press:embed': {}
|
|
|
|
'thread:click:showOtherReplies': {}
|
|
'thread:preferences:load': {
|
|
[key: string]: any
|
|
}
|
|
'thread:preferences:update': {
|
|
[key: string]: any
|
|
}
|
|
'thread:click:headerMenuOpen': {}
|
|
}
|