diff options
author | dan <dan.abramov@gmail.com> | 2024-10-08 09:02:58 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-10-07 17:02:58 -0700 |
commit | c06040cc209338fc37980648b31d4d64cc0c5c09 (patch) | |
tree | 766e41a310b03bed2e927f468114ca8d14602e5f /src/state/queries/resolve-link.ts | |
parent | dd8be2e939d2879e2bb23b2ccd843a034d19b8dd (diff) | |
download | voidsky-c06040cc209338fc37980648b31d4d64cc0c5c09.tar.zst |
Fetch link previews from RQ (#5608)
Co-authored-by: Mary <git@mary.my.id> Co-authored-by: Hailey <me@haileyok.com>
Diffstat (limited to 'src/state/queries/resolve-link.ts')
-rw-r--r-- | src/state/queries/resolve-link.ts | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/state/queries/resolve-link.ts b/src/state/queries/resolve-link.ts new file mode 100644 index 000000000..5856cfb5f --- /dev/null +++ b/src/state/queries/resolve-link.ts @@ -0,0 +1,70 @@ +import {QueryClient, useQuery} from '@tanstack/react-query' + +import {STALE} from '#/state/queries/index' +import {useAgent} from '../session' + +const RQKEY_LINK_ROOT = 'resolve-link' +export const RQKEY_LINK = (url: string) => [RQKEY_LINK_ROOT, url] + +const RQKEY_GIF_ROOT = 'resolve-gif' +export const RQKEY_GIF = (url: string) => [RQKEY_GIF_ROOT, url] + +import {BskyAgent} from '@atproto/api' + +import {ResolvedLink, resolveGif, resolveLink} from '#/lib/api/resolve' +import {Gif} from './tenor' + +export function useResolveLinkQuery(url: string) { + const agent = useAgent() + return useQuery({ + staleTime: STALE.HOURS.ONE, + queryKey: RQKEY_LINK(url), + queryFn: async () => { + return await resolveLink(agent, url) + }, + }) +} +export function fetchResolveLinkQuery( + queryClient: QueryClient, + agent: BskyAgent, + url: string, +) { + return queryClient.fetchQuery({ + staleTime: STALE.HOURS.ONE, + queryKey: RQKEY_LINK(url), + queryFn: async () => { + return await resolveLink(agent, url) + }, + }) +} +export function precacheResolveLinkQuery( + queryClient: QueryClient, + url: string, + resolvedLink: ResolvedLink, +) { + queryClient.setQueryData(RQKEY_LINK(url), resolvedLink) +} + +export function useResolveGifQuery(gif: Gif) { + const agent = useAgent() + return useQuery({ + staleTime: STALE.HOURS.ONE, + queryKey: RQKEY_GIF(gif.url), + queryFn: async () => { + return await resolveGif(agent, gif) + }, + }) +} +export function fetchResolveGifQuery( + queryClient: QueryClient, + agent: BskyAgent, + gif: Gif, +) { + return queryClient.fetchQuery({ + staleTime: STALE.HOURS.ONE, + queryKey: RQKEY_GIF(gif.url), + queryFn: async () => { + return await resolveGif(agent, gif) + }, + }) +} |