forked from
rocksky.app/rocksky
A decentralized music tracking and discovery platform built on AT Protocol 馃幍
1import { useInfiniteQuery, useQuery } from "@tanstack/react-query";
2import {
3 getProfileByDid,
4 getProfileStatsByDid,
5 getRecentTracksByDid,
6} from "../api/profile";
7
8export const useProfileByDidQuery = (did: string) =>
9 useQuery({
10 queryKey: ["profile", did],
11 queryFn: () => getProfileByDid(did),
12 });
13
14export const useProfileStatsByDidQuery = (did: string) =>
15 useQuery({
16 queryKey: ["profile", "stats", did],
17 queryFn: () => getProfileStatsByDid(did),
18 enabled: !!did,
19 refetchInterval: 5000,
20 refetchOnWindowFocus: true,
21 });
22
23export const useRecentTracksByDidQuery = (did: string, offset = 0, size = 10) =>
24 useQuery({
25 queryKey: ["profile", "recent-tracks", did, offset, size],
26 queryFn: () => getRecentTracksByDid(did, offset, size),
27 enabled: !!did,
28 refetchInterval: 6000,
29 refetchOnWindowFocus: true,
30 });
31
32export const useRecentTracksByDidInfiniteQuery = (did: string, size = 20) =>
33 useInfiniteQuery({
34 queryKey: ["profile", "recent-tracks", did],
35 queryFn: async ({ pageParam = 0 }) => {
36 const data = await getRecentTracksByDid(did, pageParam * size, size);
37 return {
38 tracks: data,
39 nextOffset: pageParam + 1,
40 };
41 },
42 getNextPageParam: (lastPage) => {
43 return lastPage.tracks.length < size ? undefined : lastPage.nextOffset;
44 },
45 initialPageParam: 0,
46 refetchOnMount: false,
47 });