Skip to content

Commit 23f49f9

Browse files
committed
[feat ArkProjectNFTs#163] replace use react query with custom hooks
1 parent db6d38b commit 23f49f9

18 files changed

+46
-217
lines changed

apps/arkmarket/src/app/collection/[collectionAddress]/components/collection-activity-data.tsx

+2-17
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
"use client";
22

33
import { useMemo } from "react";
4-
import { keepPreviousData, useInfiniteQuery } from "@tanstack/react-query";
54

6-
import type { CollectionActivityApiResponse } from "~/lib/getCollectionActivity";
75
import type { ActivityType } from "~/types";
86
import useInfiniteWindowScroll from "~/hooks/useInfiniteWindowScroll";
9-
import { getCollectionActivity } from "~/lib/getCollectionActivity";
107
import DesktopCollectionActivityData from "./desktop-collection-activity";
118
import MobileCollectionActivity from "./mobile-collection-activity";
9+
import useCollectionActivity from "~/hooks/useCollectionActivity";
1210

1311
interface CollectionProps {
1412
collectionAddress: string;
@@ -25,20 +23,7 @@ export default function CollectionActivityData({
2523
fetchNextPage,
2624
hasNextPage,
2725
isFetchingNextPage,
28-
} = useInfiniteQuery({
29-
queryKey: ["collectionActivity", collectionAddress, ...filters],
30-
refetchInterval: 10_000,
31-
placeholderData: keepPreviousData,
32-
getNextPageParam: (lastPage: CollectionActivityApiResponse) =>
33-
lastPage.next_page,
34-
initialPageParam: undefined,
35-
queryFn: ({ pageParam }) =>
36-
getCollectionActivity({
37-
page: pageParam,
38-
collectionAddress,
39-
activityFilters: filters,
40-
}),
41-
});
26+
} = useCollectionActivity({ collectionAddress, filters })
4227
useInfiniteWindowScroll({
4328
fetchNextPage,
4429
hasNextPage,

apps/arkmarket/src/app/collection/[collectionAddress]/components/collection-header.tsx

+3-8
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
"use client";
22

33
import { useState } from "react";
4-
import { useQuery } from "@tanstack/react-query";
54

65
import { cn, focusableStyles } from "@ark-market/ui";
76
import {
@@ -20,9 +19,10 @@ import {
2019
import type { Collection } from "~/types";
2120
import CopyButton from "~/components/copy-button";
2221
import ExternalLink from "~/components/external-link";
23-
import getCollection from "~/lib/getCollection";
2422
import CollectionHeaderStats from "./collection-header-stats";
2523

24+
import useCollection from "~/hooks/useCollection";
25+
2626
interface CollectionHeaderProps {
2727
collectionAddress: string;
2828
collection: Collection;
@@ -34,12 +34,7 @@ export default function CollectionHeader({
3434
}: CollectionHeaderProps) {
3535
const [collapsibleOpen, setCollapsibleOpen] = useState(false);
3636

37-
const { data } = useQuery({
38-
queryKey: ["collection", collectionAddress],
39-
queryFn: () => getCollection({ collectionAddress }),
40-
initialData: collection,
41-
refetchInterval: 15_000,
42-
});
37+
const { data } = useCollection({ address:collectionAddress })
4338

4439
if (!data) {
4540
return null;

apps/arkmarket/src/app/collection/[collectionAddress]/components/collection-items-data.tsx

+2-26
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,17 @@
11
"use client";
22

33
import { useMemo } from "react";
4-
import { useSuspenseInfiniteQuery } from "@tanstack/react-query";
54

65
import type { ViewType } from "../../../../components/view-type-toggle-group";
76
import type {
87
CollectionSortBy,
98
CollectionSortDirection,
10-
CollectionTokensApiResponse,
119
} from "~/lib/getCollectionTokens";
1210
import type { CollectionToken, Filters } from "~/types";
1311
import useInfiniteWindowScroll from "~/hooks/useInfiniteWindowScroll";
14-
import { getCollectionTokens } from "~/lib/getCollectionTokens";
1512
import CollectionItemsDataGridView from "./collection-items-data-grid-view";
1613
import CollectionItemsDataListView from "./collection-items-data-list-view";
14+
import useCollectionTokens from "~/hooks/useCollectionTokens";
1715

1816
interface CollectionItemsDataProps {
1917
collectionAddress: string;
@@ -37,29 +35,7 @@ export default function CollectionItemsData({
3735
fetchNextPage,
3836
hasNextPage,
3937
isFetchingNextPage,
40-
} = useSuspenseInfiniteQuery({
41-
queryKey: [
42-
"collectionTokens",
43-
sortDirection,
44-
sortBy,
45-
collectionAddress,
46-
filters,
47-
buyNow,
48-
],
49-
refetchInterval: 10_000,
50-
getNextPageParam: (lastPage: CollectionTokensApiResponse) =>
51-
lastPage.next_page,
52-
initialPageParam: undefined as number | undefined,
53-
queryFn: ({ pageParam }) =>
54-
getCollectionTokens({
55-
collectionAddress,
56-
page: pageParam,
57-
sortDirection,
58-
sortBy,
59-
filters,
60-
buyNow,
61-
}),
62-
});
38+
} = useCollectionTokens({ collectionAddress, filters, sortBy, sortDirection, buyNow })
6339

6440
useInfiniteWindowScroll({
6541
fetchNextPage,

apps/arkmarket/src/app/collection/[collectionAddress]/components/collection-items-filters-dialog.tsx

+3-4
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import type { Filters } from "~/types";
88
import getCollectionTraits from "~/lib/getCollectionTraits";
99
import CollectionItemsFiltersTrait from "./collection-items-filters-trait";
1010

11+
import useCollectionTraits from "~/hooks/useCollectionTraits";
12+
1113
interface CollectionItemsFiltersDialogProps {
1214
collectionAddress: string;
1315
filters: Filters;
@@ -25,10 +27,7 @@ export default function CollectionItemsFiltersDialog({
2527
open,
2628
setOpen,
2729
}: CollectionItemsFiltersDialogProps) {
28-
const { data } = useQuery({
29-
queryKey: ["collectionTraits", collectionAddress],
30-
queryFn: () => getCollectionTraits({ collectionAddress }),
31-
});
30+
const { data } = useCollectionTraits({ address:collectionAddress })
3231

3332
const handleTraitChange = async (name: string, value: string) => {
3433
const values = filters.traits[name] ?? [];

apps/arkmarket/src/app/collection/[collectionAddress]/components/collection-items-filters-panel.tsx

+3-6
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import { useState } from "react";
2-
import { useSuspenseQuery } from "@tanstack/react-query";
32

43
import { SearchInput } from "@ark-market/ui/search-input";
54

65
import type { Filters } from "~/types";
7-
import getCollectionTraits from "~/lib/getCollectionTraits";
86
import CollectionItemsFiltersContent from "./collection-items-filters-content";
97
import CollectionItemsFiltersTrait from "./collection-items-filters-trait";
108

9+
import useCollectionTraitsSuspense from "~/hooks/useCollectionTraitsSuspense";
10+
1111
interface CollectionItemsFiltersPanelProps {
1212
collectionAddress: string;
1313
filters: Filters;
@@ -25,10 +25,7 @@ export default function CollectionItemsFiltersPanel({
2525
buyNow,
2626
setBuyNow,
2727
}: CollectionItemsFiltersPanelProps) {
28-
const { data } = useSuspenseQuery({
29-
queryKey: ["collectionTraits", collectionAddress],
30-
queryFn: () => getCollectionTraits({ collectionAddress }),
31-
});
28+
const { data } = useCollectionTraitsSuspense({ collectionAddress })
3229
const [searchQuery, setSearchQuery] = useState("");
3330

3431
const handleTraitChange = async (name: string, value: string) => {

apps/arkmarket/src/app/token/[contractAddress]/[tokenId]/components/token-actions-create-listing.tsx

+3-10
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import { useEffect, useState } from "react";
55
import { useCreateAuction, useCreateListing } from "@ark-project/react";
66
import { zodResolver } from "@hookform/resolvers/zod";
77
import { useAccount } from "@starknet-react/core";
8-
import { useQuery } from "@tanstack/react-query";
98
import moment from "moment";
109
import { useForm } from "react-hook-form";
1110
import { formatEther, parseEther } from "viem";
@@ -46,11 +45,12 @@ import { env } from "~/env";
4645
import usePrices from "~/hooks/usePrices";
4746
import useTokenMarketdata from "~/hooks/useTokenMarketData";
4847
import formatAmount from "~/lib/formatAmount";
49-
import getCollection from "~/lib/getCollection";
5048
import ToastExecutedTransactionContent from "./toast-executed-transaction-content";
5149
import ToastRejectedTransactionContent from "./toast-rejected-transaction-content";
5250
import TokenActionsTokenOverview from "./token-actions-token-overview";
5351

52+
import useCollection from "~/hooks/useCollection";
53+
5454
interface TokenActionsCreateListingProps {
5555
token: Token | WalletToken;
5656
small?: boolean;
@@ -69,14 +69,7 @@ export function TokenActionsCreateListing({
6969
});
7070
const [isOpen, setIsOpen] = useState(false);
7171
const [isAuction, setIsAuction] = useState(false);
72-
const { data: collection } = useQuery({
73-
queryKey: ["collection", token.collection_address],
74-
queryFn: () =>
75-
getCollection({
76-
collectionAddress: token.collection_address,
77-
}),
78-
refetchInterval: 5_000,
79-
});
72+
const { data: collection } = useCollection({ address:token.collection_address })
8073
const { createListing, status } = useCreateListing();
8174
const { create: createAuction, status: auctionStatus } = useCreateAuction();
8275
const { toast } = useToast();

apps/arkmarket/src/app/token/[contractAddress]/[tokenId]/components/token-actions.tsx

+2-12
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
"use client";
22

33
import { useAccount } from "@starknet-react/core";
4-
import { useQuery } from "@tanstack/react-query";
54

65
import type { PropsWithClassName } from "@ark-market/ui";
76
import { areAddressesEqual, cn } from "@ark-market/ui";
87

98
import type { Token, TokenMarketData } from "~/types";
10-
import getTokenMarketData from "~/lib/getTokenMarketData";
119
import TokenActionsButtons from "./token-actions-buttons";
1210
import TokenActionsEmpty from "./token-actions-empty";
1311
import TokenActionsHeader from "./token-actions-header";
1412
import TokenActionsPrice from "./token-actions-price";
13+
import useTokenMarketdata from "~/hooks/useTokenMarketData";
1514

1615
interface TokenActionsProps {
1716
token: Token;
@@ -25,16 +24,7 @@ export default function TokenActions({
2524
className,
2625
}: TokenActionsProps) {
2726
const { address } = useAccount();
28-
const { data } = useQuery({
29-
queryKey: ["tokenMarketData", token.collection_address, token.token_id],
30-
queryFn: () =>
31-
getTokenMarketData({
32-
contractAddress: token.collection_address,
33-
tokenId: token.token_id,
34-
}),
35-
refetchInterval: 5_000,
36-
initialData: tokenMarketData,
37-
});
27+
const { data } = useTokenMarketdata({ collectionAddress: token.collection_address, tokenId: token.token_id, initialData: tokenMarketData })
3828

3929
const isOwner = areAddressesEqual(address, data?.owner);
4030

apps/arkmarket/src/app/token/[contractAddress]/[tokenId]/components/token-activity.tsx

+2-12
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
"use client";
22

33
import { useMemo, useRef } from "react";
4-
import { useInfiniteQuery } from "@tanstack/react-query";
54

65
import type { PropsWithClassName } from "@ark-market/ui";
76
import { cn } from "@ark-market/ui";
87

9-
import type { TokenActivityApiResponse } from "~/lib/getTokenActivity";
108
import useInfiniteWindowScroll from "~/hooks/useInfiniteWindowScroll";
119
import getTokenActivity from "~/lib/getTokenActivity";
1210
import DesktopTokenActivity from "./desktop-token-activity";
1311
import MobileTokenActivity from "./mobile-token-activity";
12+
import useTokenActivity from "~/hooks/useTokenActivity";
1413

1514
interface TokenActivityProps {
1615
contractAddress: string;
@@ -28,16 +27,7 @@ export default function TokenActivity({
2827
fetchNextPage,
2928
hasNextPage,
3029
isFetchingNextPage,
31-
} = useInfiniteQuery({
32-
queryKey: ["tokenActivity", contractAddress, tokenId],
33-
refetchInterval: 10_000,
34-
// getNextPageParam: (lastPage) => lastPage.next_page,
35-
getNextPageParam: (lastPage?: TokenActivityApiResponse) =>
36-
lastPage?.next_page,
37-
initialPageParam: undefined,
38-
queryFn: ({ pageParam }) =>
39-
getTokenActivity({ contractAddress, tokenId, page: pageParam }),
40-
});
30+
} = useTokenActivity({ contractAddress, tokenId })
4131

4232
const totalCount = infiniteData?.pages[0]?.count ?? 0;
4333
const tokenActivity = useMemo(

apps/arkmarket/src/app/token/[contractAddress]/[tokenId]/components/token-offers.tsx

+4-16
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
"use client";
22

33
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
4-
import { keepPreviousData, useInfiniteQuery } from "@tanstack/react-query";
54
import { useMediaQuery } from "usehooks-ts";
65

76
import type { PropsWithClassName } from "@ark-market/ui";
@@ -14,11 +13,10 @@ import {
1413
} from "@ark-market/ui/collapsible";
1514
import { ChevronDown, ChevronUp, NoOffer } from "@ark-market/ui/icons";
1615

17-
import type { TokenOffersApiResponse } from "~/lib/getTokenOffers";
1816
import type { Token, TokenMarketData } from "~/types";
19-
import { getTokenOffers } from "~/lib/getTokenOffers";
2017
import TokenOfferList from "./token-offers-list";
2118
import TokenOffersTable from "./token-offers-table";
19+
import useTokenOffers from "~/hooks/useTokenOffers";
2220

2321
interface TokenOffersProps {
2422
token: Token;
@@ -38,19 +36,9 @@ export default function TokenOffers({
3836
isFetching,
3937
hasNextPage,
4038
fetchNextPage,
41-
} = useInfiniteQuery({
42-
queryKey: ["tokenOffers", token.collection_address, token.token_id],
43-
refetchInterval: 10_000,
44-
getNextPageParam: (lastPage: TokenOffersApiResponse) => lastPage.next_page,
45-
placeholderData: keepPreviousData,
46-
initialPageParam: undefined,
47-
queryFn: ({ pageParam }) =>
48-
getTokenOffers({
49-
contractAddress: token.collection_address,
50-
tokenId: token.token_id,
51-
page: pageParam,
52-
}),
53-
});
39+
} = useTokenOffers({ token })
40+
41+
5442
const offersCount = infiniteData?.pages[0]?.count ?? 0;
5543
const tokenOffers = useMemo(
5644
() => infiniteData?.pages.flatMap((page) => page.data) ?? [],

apps/arkmarket/src/app/wallet/[walletAddress]/components/portfolio-activity-data.tsx

+2-17
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
"use client";
22

33
import { useMemo } from "react";
4-
import { keepPreviousData, useInfiniteQuery } from "@tanstack/react-query";
54

6-
import type { PortfolioActivityApiResponse } from "~/lib/getPortfolioActivity";
75
import type { ActivityType } from "~/types";
86
import useInfiniteWindowScroll from "~/hooks/useInfiniteWindowScroll";
9-
import { getPortfolioActivity } from "~/lib/getPortfolioActivity";
107
import DesktopPortfolioActivity from "./desktop-portfolio-activity";
118
import MobilePortfolioActivity from "./mobile-portfolio-activity";
9+
import useWalletActivity from "~/hooks/useWalletActivity";
1210

1311
interface PortfolioActivityDataProps {
1412
walletAddress: string;
@@ -24,20 +22,7 @@ export default function PortfolioActivityData({
2422
fetchNextPage,
2523
hasNextPage,
2624
isFetchingNextPage,
27-
} = useInfiniteQuery({
28-
queryKey: ["walletActivity", walletAddress, ...activityFilters],
29-
refetchInterval: 10_000,
30-
placeholderData: keepPreviousData,
31-
getNextPageParam: (lastPage: PortfolioActivityApiResponse) =>
32-
lastPage.next_page,
33-
initialPageParam: undefined,
34-
queryFn: ({ pageParam }) =>
35-
getPortfolioActivity({
36-
page: pageParam,
37-
walletAddress,
38-
activityFilters,
39-
}),
40-
});
25+
} = useWalletActivity({ activityFilters, walletAddress })
4126

4227
useInfiniteWindowScroll({
4328
fetchNextPage,

0 commit comments

Comments
 (0)