Bluesky app fork with some witchin' additions 馃挮
at main 84 lines 1.9 kB view raw
1import React from 'react' 2 3const LIKE_WINDOW = 100 4const FOLLOW_WINDOW = 100 5const FOLLOW_SUGGESTION_WINDOW = 100 6const SEEN_WINDOW = 100 7 8export type SeenPost = { 9 uri: string 10 likeCount: number 11 repostCount: number 12 replyCount: number 13 isFollowedBy: boolean 14 feedContext: string | undefined 15} 16 17export type UserActionHistory = { 18 /** 19 * The last 100 post URIs the user has liked 20 */ 21 likes: string[] 22 /** 23 * The last 100 DIDs the user has followed 24 */ 25 follows: string[] 26 /* 27 * The last 100 DIDs of suggested follows based on last follows 28 */ 29 followSuggestions: string[] 30 /** 31 * The last 100 post URIs the user has seen from the Discover feed only 32 */ 33 seen: SeenPost[] 34} 35 36const userActionHistory: UserActionHistory = { 37 likes: [], 38 follows: [], 39 followSuggestions: [], 40 seen: [], 41} 42 43export function getActionHistory() { 44 return userActionHistory 45} 46 47export function useActionHistorySnapshot() { 48 return React.useState(() => getActionHistory())[0] 49} 50 51export function like(postUris: string[]) { 52 userActionHistory.likes = userActionHistory.likes 53 .concat(postUris) 54 .slice(-LIKE_WINDOW) 55} 56export function unlike(postUris: string[]) { 57 userActionHistory.likes = userActionHistory.likes.filter( 58 uri => !postUris.includes(uri), 59 ) 60} 61 62export function follow(dids: string[]) { 63 userActionHistory.follows = userActionHistory.follows 64 .concat(dids) 65 .slice(-FOLLOW_WINDOW) 66} 67 68export function followSuggestion(dids: string[]) { 69 userActionHistory.followSuggestions = userActionHistory.followSuggestions 70 .concat(dids) 71 .slice(-FOLLOW_SUGGESTION_WINDOW) 72} 73 74export function unfollow(dids: string[]) { 75 userActionHistory.follows = userActionHistory.follows.filter( 76 uri => !dids.includes(uri), 77 ) 78} 79 80export function seen(posts: SeenPost[]) { 81 userActionHistory.seen = userActionHistory.seen 82 .concat(posts) 83 .slice(-SEEN_WINDOW) 84}