Something went wrong. Try again.
Bluesky app fork with some witchin' additions 💫 forked from jollywhoppers.com/witchsky.app
Something went wrong. Try again.
1.9 kB · 84 lines
TypeScript
at main
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485import {useState} from 'react'
const LIKE_WINDOW = 100const FOLLOW_WINDOW = 100const FOLLOW_SUGGESTION_WINDOW = 100const SEEN_WINDOW = 100
export type SeenPost = { uri: string likeCount: number repostCount: number replyCount: number isFollowedBy: boolean feedContext: string | undefined}
export type UserActionHistory = { /** * The last 100 post URIs the user has liked */ likes: string[] /** * The last 100 DIDs the user has followed */ follows: string[] /* * The last 100 DIDs of suggested follows based on last follows */ followSuggestions: string[] /** * The last 100 post URIs the user has seen from the Discover feed only */ seen: SeenPost[]}
const userActionHistory: UserActionHistory = { likes: [], follows: [], followSuggestions: [], seen: [],}
export function getActionHistory() { return userActionHistory}
export function useActionHistorySnapshot() { return useState(() => getActionHistory())[0]}
export function like(postUris: string[]) { userActionHistory.likes = userActionHistory.likes .concat(postUris) .slice(-LIKE_WINDOW)}export function unlike(postUris: string[]) { userActionHistory.likes = userActionHistory.likes.filter( uri => !postUris.includes(uri), )}
export function follow(dids: string[]) { userActionHistory.follows = userActionHistory.follows .concat(dids) .slice(-FOLLOW_WINDOW)}
export function followSuggestion(dids: string[]) { userActionHistory.followSuggestions = userActionHistory.followSuggestions .concat(dids) .slice(-FOLLOW_SUGGESTION_WINDOW)}
export function unfollow(dids: string[]) { userActionHistory.follows = userActionHistory.follows.filter( uri => !dids.includes(uri), )}
export function seen(posts: SeenPost[]) { userActionHistory.seen = userActionHistory.seen .concat(posts) .slice(-SEEN_WINDOW)}