import { HexKey, u256 } from "@snort/system"; import { useSyncExternalStore } from "react"; import { InteractionCache } from "@/Cache"; import { EventInteraction } from "@/Db"; import { sha256, unwrap } from "@/Utils"; export function useInteractionCache(pubkey?: HexKey, event?: u256) { const id = event && pubkey ? sha256(event + pubkey) : undefined; const EmptyInteraction = { id, event, by: pubkey, } as EventInteraction; const data = useSyncExternalStore( c => InteractionCache.hook(c, id), () => InteractionCache.snapshot().find(a => a.id === id), ) || EmptyInteraction; return { data: data, react: () => InteractionCache.set({ ...data, event: unwrap(event), by: unwrap(pubkey), reacted: true, }), zap: () => InteractionCache.set({ ...data, event: unwrap(event), by: unwrap(pubkey), zapped: true, }), repost: () => InteractionCache.set({ ...data, event: unwrap(event), by: unwrap(pubkey), reposted: true, }), }; }