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 84 lines 1.9 kB view raw
1import {useState} 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 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}