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