Skip to content

Commit

Permalink
fix: add missing shared object mapper
Browse files Browse the repository at this point in the history
  • Loading branch information
begonaalvarezd committed Jan 31, 2025
1 parent 6edeb40 commit 765b95a
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 38 deletions.
75 changes: 51 additions & 24 deletions apps/core/src/hooks/useGetAllStardustSharedObjects.ts
Original file line number Diff line number Diff line change
@@ -1,60 +1,87 @@
// Copyright (c) 2024 IOTA Stiftung
// SPDX-License-Identifier: Apache-2.0

import { useQuery } from '@tanstack/react-query';
import { IotaObjectData } from '@iota/iota-sdk/client';
import { useGetStardustSharedBasicObjects } from './useGetStardustSharedBasicObjects';
import { useGetStardustSharedNftObjects } from './useGetStardustSharedNftObjects';
import { useEffect, useState } from 'react';
import { useState, useEffect } from 'react';

const LIMIT_PER_REQ = 50;

export function useGetAllStardustSharedObjects(address: string) {
const [basicOutputPage, setBasicOutputPage] = useState(1);
const [nftOutputPage, setNftOutputPage] = useState(1);
const [allBasicOutputs, setAllBasicOutputs] = useState<IotaObjectData[]>([]);
const [allNftOutputs, setAllNftOutputs] = useState<IotaObjectData[]>([]);
const [basicPage, setBasicPage] = useState(1);
const [nftPage, setNftPage] = useState(1);
const [isBasicOutputComplete, setIsBasicOutputComplete] = useState(false);
const [isNftOutputComplete, setIsNftOutputComplete] = useState(false);

// Reset state when address changes
useEffect(() => {
setBasicOutputPage(1);
setNftOutputPage(1);
setAllBasicOutputs([]);
setAllNftOutputs([]);
setIsBasicOutputComplete(false);
setIsNftOutputComplete(false);
}, [address]);

const { data: basicObjects } = useGetStardustSharedBasicObjects(
address,
LIMIT_PER_REQ,
basicPage,
);
// Call hooks at the top level
const basicObjects = useGetStardustSharedBasicObjects(address, LIMIT_PER_REQ, basicOutputPage);

const { data: nftObjects } = useGetStardustSharedNftObjects(address, LIMIT_PER_REQ, nftPage);
const nftObjects = useGetStardustSharedNftObjects(address, LIMIT_PER_REQ, nftOutputPage);

// Handle basic objects pagination
useEffect(() => {
console.log('basicObjects', basicObjects);
if (basicObjects && basicObjects.length > 0) {
if (basicObjects.data && basicObjects.data.length > 0) {
setAllBasicOutputs((prev) => [
...prev,
...(basicObjects as unknown as IotaObjectData[]),
...(basicObjects.data as unknown as IotaObjectData[]),
]);

if (basicObjects.length === LIMIT_PER_REQ) {
setBasicPage((prev) => prev + 1);
if (basicObjects.data.length < LIMIT_PER_REQ) {
setIsBasicOutputComplete(true);
} else {
setBasicOutputPage((prev) => prev + 1);
}
} else if (basicObjects.data?.length === 0) {
setIsBasicOutputComplete(true);
}
}, [basicObjects]);
}, [basicObjects.data]);

// Handle NFT objects pagination
useEffect(() => {
console.log('nftObjects', nftObjects);
if (nftObjects && nftObjects.length > 0) {
setAllNftOutputs((prev) => [...prev, ...(nftObjects as unknown as IotaObjectData[])]);
if (nftObjects.data && nftObjects.data.length > 0) {
setAllNftOutputs((prev) => [
...prev,
...(nftObjects.data as unknown as IotaObjectData[]),
]);

if (nftObjects.length === LIMIT_PER_REQ) {
setNftPage((prev) => prev + 1);
if (nftObjects.data.length < LIMIT_PER_REQ) {
setIsNftOutputComplete(true);
} else {
setNftOutputPage((prev) => prev + 1);
}
} else if (nftObjects.data?.length === 0) {
setIsNftOutputComplete(true);
}
}, [nftObjects]);
}, [nftObjects.data]);

// Wrap the results in useQuery for consistency with your original API
return useQuery({
queryKey: ['stardust-all-shared-objects', address, allBasicOutputs, allNftOutputs],
queryKey: [
'stardust-all-shared-objects',
address,
basicOutputPage,
nftOutputPage,
allBasicOutputs,
allNftOutputs,
],
queryFn: async () => ({
basic: allBasicOutputs,
nfts: allNftOutputs,
}),
enabled: !!address,
enabled: !!address && isBasicOutputComplete && isNftOutputComplete,
staleTime: 1000 * 60 * 5,
placeholderData: { basic: [], nfts: [] },
});
Expand Down
13 changes: 7 additions & 6 deletions apps/core/src/hooks/useGetStardustSharedBasicObjects.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// Copyright (c) 2024 IOTA Stiftung
// SPDX-License-Identifier: Apache-2.0

import { mapStardustBasicOutputs } from '../utils';
import { useQuery } from '@tanstack/react-query';
import { useStardustIndexerClientContext } from '../contexts';

Expand All @@ -22,12 +23,12 @@ export function useGetStardustSharedBasicObjects(
queryFn: async () => {
if (!stardustIndexerClient?.baseUrl) return [];

const basicOutputs = await stardustIndexerClient.getBasicResolvedOutputs(address, {
page,
pageSize,
});

return basicOutputs || [];
const basicOutputs =
(await stardustIndexerClient.getBasicResolvedOutputs(address, {
page,
pageSize,
})) || [];
return basicOutputs.map(mapStardustBasicOutputs) || [];
},
enabled: !!address,
staleTime: 1000 * 60 * 5,
Expand Down
13 changes: 7 additions & 6 deletions apps/core/src/hooks/useGetStardustSharedNftObjects.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// Copyright (c) 2024 IOTA Stiftung
// SPDX-License-Identifier: Apache-2.0

import { mapStardustBasicOutputs } from '../utils';
import { useQuery } from '@tanstack/react-query';
import { useStardustIndexerClientContext } from '../contexts';

Expand All @@ -18,12 +19,12 @@ export function useGetStardustSharedNftObjects(address: string, pageSize?: numbe
queryFn: async () => {
if (!stardustIndexerClient?.baseUrl) return [];

const nftOutputs = await stardustIndexerClient.getNftResolvedOutputs(address, {
page,
pageSize,
});

return nftOutputs || [];
const nftOutputs =
(await stardustIndexerClient.getNftResolvedOutputs(address, {
page,
pageSize,
})) || [];
return nftOutputs.map(mapStardustBasicOutputs) || [];
},
enabled: !!address,
staleTime: 1000 * 60 * 5,
Expand Down
2 changes: 0 additions & 2 deletions apps/wallet-dashboard/app/(protected)/migrations/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -54,12 +54,10 @@ function MigrationDashboardPage(): JSX.Element {
timelockedBasicOutputs,
timelockedNftOutputs,
} = stardustMigrationObjects || {};
console.log('stardustMigrationObjects:', stardustMigrationObjects);
const { data: resolvedMigrationObjects = [] } = useGroupedStardustObjects(
[...(migratableBasicOutputs || []), ...(migratableNftOutputs || [])],
false,
);
console.log('resolvedMigrationObjects:', resolvedMigrationObjects)
const { data: resolvedTimelockedObjects = [] } = useGroupedStardustObjects(
[...(timelockedBasicOutputs || []), ...(timelockedNftOutputs || [])],
true,
Expand Down

0 comments on commit 765b95a

Please sign in to comment.