diff options
author | Paul Frazee <pfrazee@gmail.com> | 2024-05-06 19:08:33 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-07 03:08:33 +0100 |
commit | 4fad18b2fa3c12ffdf1d49afac5228f7df658bc2 (patch) | |
tree | 8fa8df48dcf544c288bc0618127fcead58014962 /src/view/com/feeds | |
parent | e264dfbb875118036d5b155f46f2b0b71261e1ff (diff) | |
download | voidsky-4fad18b2fa3c12ffdf1d49afac5228f7df658bc2.tar.zst |
Implement FeedFeedback API (#3498)
* Implement onViewableItemsChanged on List.web.tsx * Introduce onItemSeen to List API * Add FeedFeedback tracker * Add clickthrough interaction tracking * Add engagement interaction tracking * Reduce duplicate sends, introduce a flushAndReset to be triggered on refreshes, and modify the api design a bit * Wire up SDK types and feedContext * Avoid needless function allocations * Fix schema usage * Add show more / show less buttons * Fix minor rendering issue on mobile menu * Wire up sendInteractions() * Fix logic error * Fix: it's item not uri * Update 'seen' to mean 3 seconds on-screen with some significant portion visible * Fix non-reactive debounce * Move methods out * Use a WeakSet for deduping * Reset timeout * 3 -> 2 seconds * Oopsie * Throttle instead * Fix divider * Remove explicit flush calls * Rm unused --------- Co-authored-by: dan <dan.abramov@gmail.com>
Diffstat (limited to 'src/view/com/feeds')
-rw-r--r-- | src/view/com/feeds/FeedPage.tsx | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/src/view/com/feeds/FeedPage.tsx b/src/view/com/feeds/FeedPage.tsx index 4ebf64da9..bb782809d 100644 --- a/src/view/com/feeds/FeedPage.tsx +++ b/src/view/com/feeds/FeedPage.tsx @@ -9,6 +9,7 @@ import {getRootNavigation, getTabState, TabState} from '#/lib/routes/helpers' import {logEvent, useGate} from '#/lib/statsig/statsig' import {isNative} from '#/platform/detection' import {listenSoftReset} from '#/state/events' +import {FeedFeedbackProvider, useFeedFeedback} from '#/state/feed-feedback' import {RQKEY as FEED_RQKEY} from '#/state/queries/post-feed' import {FeedDescriptor, FeedParams} from '#/state/queries/post-feed' import {truncateAndInvalidate} from '#/state/queries/util' @@ -51,6 +52,7 @@ export function FeedPage({ const setMinimalShellMode = useSetMinimalShellMode() const {screen, track} = useAnalytics() const headerOffset = useHeaderOffset() + const feedFeedback = useFeedFeedback(feed, hasSession) const scrollElRef = React.useRef<ListMethods>(null) const [hasNew, setHasNew] = React.useState(false) const gate = useGate() @@ -113,20 +115,22 @@ export function FeedPage({ return ( <View testID={testID} style={s.h100pct}> <MainScrollProvider> - <Feed - testID={testID ? `${testID}-feed` : undefined} - enabled={isPageFocused} - feed={feed} - feedParams={feedParams} - pollInterval={POLL_FREQ} - disablePoll={hasNew} - scrollElRef={scrollElRef} - onScrolledDownChange={setIsScrolledDown} - onHasNew={setHasNew} - renderEmptyState={renderEmptyState} - renderEndOfFeed={renderEndOfFeed} - headerOffset={headerOffset} - /> + <FeedFeedbackProvider value={feedFeedback}> + <Feed + testID={testID ? `${testID}-feed` : undefined} + enabled={isPageFocused} + feed={feed} + feedParams={feedParams} + pollInterval={POLL_FREQ} + disablePoll={hasNew} + scrollElRef={scrollElRef} + onScrolledDownChange={setIsScrolledDown} + onHasNew={setHasNew} + renderEmptyState={renderEmptyState} + renderEndOfFeed={renderEndOfFeed} + headerOffset={headerOffset} + /> + </FeedFeedbackProvider> </MainScrollProvider> {(isScrolledDown || adjustedHasNew) && ( <LoadLatestBtn |