Bluesky app fork with some witchin' additions 馃挮 witchsky.app
bluesky fork client
119
fork

Configure Feed

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

at a876aae44ea07494ebea9727350aa060b81f317b 34 lines 948 B view raw
1import {useCallback, useRef} from 'react' 2import {type AppBskyFeedDefs} from '@atproto/api' 3 4import {type Metrics, useAnalytics} from '#/analytics' 5 6/** 7 * Hook that returns a callback to track post:view events. 8 * Handles deduplication so the same post URI is only tracked once per mount. 9 * 10 * @param logContext - The context where the post is being viewed 11 * @returns A callback that accepts a post and logs the view event 12 */ 13export function usePostViewTracking( 14 logContext: Metrics['post:view']['logContext'], 15) { 16 const ax = useAnalytics() 17 const seenUrisRef = useRef(new Set<string>()) 18 19 const trackPostView = useCallback( 20 (post: AppBskyFeedDefs.PostView) => { 21 if (seenUrisRef.current.has(post.uri)) return 22 seenUrisRef.current.add(post.uri) 23 24 ax.metric('post:view', { 25 uri: post.uri, 26 authorDid: post.author.did, 27 logContext, 28 }) 29 }, 30 [ax, logContext], 31 ) 32 33 return trackPostView 34}