forked from
jollywhoppers.com/witchsky.app
Bluesky app fork with some witchin' additions 馃挮
1import {type QueryClient, useQuery} from '@tanstack/react-query'
2
3import {STALE} from '#/state/queries/index'
4import {useAgent} from '../session'
5
6const RQKEY_LINK_ROOT = 'resolve-link'
7export const RQKEY_LINK = (url: string) => [RQKEY_LINK_ROOT, url]
8
9const RQKEY_GIF_ROOT = 'resolve-gif'
10export const RQKEY_GIF = (url: string) => [RQKEY_GIF_ROOT, url]
11
12import {type BskyAgent} from '@atproto/api'
13
14import {type ResolvedLink, resolveGif, resolveLink} from '#/lib/api/resolve'
15import {type Gif} from './tenor'
16
17export function useResolveLinkQuery(url: string) {
18 const agent = useAgent()
19 return useQuery({
20 staleTime: STALE.HOURS.ONE,
21 queryKey: RQKEY_LINK(url),
22 queryFn: async () => {
23 return await resolveLink(agent, url)
24 },
25 })
26}
27export function fetchResolveLinkQuery(
28 queryClient: QueryClient,
29 agent: BskyAgent,
30 url: string,
31) {
32 return queryClient.fetchQuery({
33 staleTime: STALE.HOURS.ONE,
34 queryKey: RQKEY_LINK(url),
35 queryFn: async () => {
36 return await resolveLink(agent, url)
37 },
38 })
39}
40export function precacheResolveLinkQuery(
41 queryClient: QueryClient,
42 url: string,
43 resolvedLink: ResolvedLink,
44) {
45 queryClient.setQueryData(RQKEY_LINK(url), resolvedLink)
46}
47
48export function useResolveGifQuery(gif: Gif) {
49 const agent = useAgent()
50 return useQuery({
51 staleTime: STALE.HOURS.ONE,
52 queryKey: RQKEY_GIF(gif.url),
53 queryFn: async () => {
54 return await resolveGif(agent, gif)
55 },
56 })
57}
58export function fetchResolveGifQuery(
59 queryClient: QueryClient,
60 agent: BskyAgent,
61 gif: Gif,
62) {
63 return queryClient.fetchQuery({
64 staleTime: STALE.HOURS.ONE,
65 queryKey: RQKEY_GIF(gif.url),
66 queryFn: async () => {
67 return await resolveGif(agent, gif)
68 },
69 })
70}