Skip to content

Commit 1dcf172

Browse files
authored
Move account address into route for portfolio page (#1744)
* Move account address into route for portfolio page * Wire up longs tab to account from route
1 parent a19fff5 commit 1dcf172

File tree

9 files changed

+241
-202
lines changed

9 files changed

+241
-202
lines changed

apps/hyperdrive-trading/src/routeTree.gen.ts

Lines changed: 171 additions & 171 deletions
Large diffs are not rendered by default.

apps/hyperdrive-trading/src/ui/hyperdrive/longs/CloseLongForm/CloseLongForm.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,21 +36,22 @@ import {
3636
ZapsTokenPicker,
3737
} from "src/ui/token/TokenPicker";
3838
import { useTokenList } from "src/ui/tokenlist/useTokenList";
39-
import { formatUnits, parseUnits } from "viem";
40-
import { useAccount, useChainId } from "wagmi";
39+
import { Address, formatUnits, parseUnits } from "viem";
40+
import { useChainId } from "wagmi";
4141

4242
interface CloseLongFormProps {
4343
hyperdrive: HyperdriveConfig;
4444
long: Long;
45+
account: Address | undefined;
4546
onCloseLong?: (e: MouseEvent<HTMLButtonElement>) => void;
4647
}
4748

4849
export function CloseLongForm({
4950
hyperdrive,
51+
account,
5052
long,
5153
onCloseLong,
5254
}: CloseLongFormProps): ReactElement {
53-
const { address: account } = useAccount();
5455
const connectedChainId = useChainId();
5556
const defaultItems: TokenConfig[] = [];
5657
const appConfig = useAppConfigForConnectedChain();

apps/hyperdrive-trading/src/ui/hyperdrive/longs/CloseLongModalButton/CloseLongModalButton.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,18 @@ import { useAppConfigForConnectedChain } from "src/ui/appconfig/useAppConfigForC
1010
import { Modal } from "src/ui/base/components/Modal/Modal";
1111
import { ModalHeader } from "src/ui/base/components/Modal/ModalHeader";
1212
import { CloseLongForm } from "src/ui/hyperdrive/longs/CloseLongForm/CloseLongForm";
13+
import { Address } from "viem";
1314

1415
export interface CloseLongModalButtonProps {
1516
modalId: string;
1617
hyperdrive: HyperdriveConfig;
18+
account: Address | undefined;
1719
long: Long;
1820
}
1921
export function CloseLongModalButton({
2022
modalId,
2123
long,
24+
account,
2225
hyperdrive,
2326
}: CloseLongModalButtonProps): ReactElement {
2427
const appConfig = useAppConfigForConnectedChain();
@@ -45,6 +48,7 @@ export function CloseLongModalButton({
4548
<div>
4649
<CloseLongForm
4750
hyperdrive={hyperdrive}
51+
account={account}
4852
long={long}
4953
onCloseLong={(e) => {
5054
// preventDefault since we don't want to close the modal while the

apps/hyperdrive-trading/src/ui/portfolio/Portfolio.tsx

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useNavigate, useSearch } from "@tanstack/react-router";
1+
import { Navigate, useNavigate, useSearch } from "@tanstack/react-router";
22
import { ReactElement } from "react";
33
import { Tabs } from "src/ui/base/components/Tabs/Tabs";
44
import { useFeatureFlag } from "src/ui/base/featureFlags/featureFlags";
@@ -7,21 +7,29 @@ import { LpAndWithdrawalSharesContainer } from "src/ui/portfolio/lp/LpAndWithdra
77
import { RewardsContainer } from "src/ui/portfolio/rewards/RewardsContainer";
88
import { PORTFOLIO_ROUTE } from "src/ui/portfolio/routes";
99
import { OpenShortsContainer } from "src/ui/portfolio/shorts/ShortsContainer";
10+
import { Address } from "viem";
11+
import { useAccount } from "wagmi";
1012

1113
export function Portfolio(): ReactElement {
12-
const { position } = useSearch({ from: PORTFOLIO_ROUTE });
13-
const navigate = useNavigate({ from: PORTFOLIO_ROUTE });
14+
const { position, account: accountFromRoute } = useSearch({
15+
from: PORTFOLIO_ROUTE,
16+
});
1417
const activeTab = position ?? "longs";
18+
19+
const { address: connectedAccount } = useAccount();
20+
const account = (accountFromRoute ?? connectedAccount) as Address | undefined;
21+
const navigate = useNavigate({ from: PORTFOLIO_ROUTE });
22+
1523
const { isFlagEnabled: isPortfolioRewardsFeatureFlagEnabled } =
1624
useFeatureFlag("portfolio-rewards");
1725
const tabs = [
1826
{
1927
id: "longs",
20-
content: <OpenLongsContainer />,
28+
content: <OpenLongsContainer account={account} />,
2129
label: "Long",
2230
onClick: () => {
2331
navigate({
24-
search: () => ({ position: "longs" }),
32+
search: (prev) => ({ ...prev, position: "longs" }),
2533
});
2634
},
2735
},
@@ -31,7 +39,7 @@ export function Portfolio(): ReactElement {
3139
label: "Short",
3240
onClick: () => {
3341
navigate({
34-
search: () => ({ position: "shorts" }),
42+
search: (prev) => ({ ...prev, position: "shorts" }),
3543
});
3644
},
3745
},
@@ -41,7 +49,7 @@ export function Portfolio(): ReactElement {
4149
label: "LP",
4250
onClick: () => {
4351
navigate({
44-
search: () => ({ position: "lp" }),
52+
search: (prev) => ({ ...prev, position: "lp" }),
4553
});
4654
},
4755
},
@@ -53,13 +61,19 @@ export function Portfolio(): ReactElement {
5361
label: "Rewards",
5462
onClick: () => {
5563
navigate({
56-
search: () => ({ position: "rewards" }),
64+
search: (prev) => ({ ...prev, position: "rewards" }),
5765
});
5866
},
5967
});
6068
}
6169
return (
6270
<div className="flex w-full flex-col items-center bg-base-100 py-8">
71+
{!accountFromRoute && connectedAccount ? (
72+
<Navigate
73+
from={PORTFOLIO_ROUTE}
74+
search={(prev) => ({ ...prev, account })}
75+
/>
76+
) : null}
6377
<Tabs activeTabId={activeTab} tabs={tabs} />
6478
</div>
6579
);

apps/hyperdrive-trading/src/ui/portfolio/longs/LongsContainer.tsx

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,19 @@ import { NonIdealState } from "src/ui/base/components/NonIdealState";
88
import { usePortfolioLongsData } from "src/ui/portfolio/longs/usePortfolioLongsData";
99
import { NoWalletConnected } from "src/ui/portfolio/NoWalletConnected";
1010
import { PositionContainer } from "src/ui/portfolio/PositionContainer";
11-
import { useAccount } from "wagmi";
11+
import { Address } from "viem";
1212
import { OpenLongsTableDesktop } from "./OpenLongsTable/OpenLongsTableDesktop";
1313

14-
export function OpenLongsContainer(): ReactElement {
15-
const { address: account } = useAccount();
16-
const { openLongPositions, openLongPositionsStatus } =
17-
usePortfolioLongsData();
14+
export function OpenLongsContainer({
15+
account,
16+
}: {
17+
account: Address | undefined;
18+
}): ReactElement {
1819
const appConfig = useAppConfigForConnectedChain();
20+
const { openLongPositions, openLongPositionsStatus } = usePortfolioLongsData({
21+
account,
22+
});
23+
1924
const hyperdrivesByChainAndYieldSource = groupBy(
2025
appConfig.hyperdrives,
2126
(hyperdrive) => `${hyperdrive.chainId}-${hyperdrive.yieldSource}`,
@@ -68,7 +73,11 @@ export function OpenLongsContainer(): ReactElement {
6873
<PositionContainer className="mt-10">
6974
{Object.entries(hyperdrivesByChainAndYieldSource).map(
7075
([key, hyperdrives]) => (
71-
<OpenLongsTableDesktop hyperdrives={hyperdrives} key={key} />
76+
<OpenLongsTableDesktop
77+
key={key}
78+
hyperdrives={hyperdrives}
79+
account={account}
80+
/>
7281
),
7382
)}
7483
</PositionContainer>

apps/hyperdrive-trading/src/ui/portfolio/longs/OpenLongsTable/OpenLongsTableDesktop.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,17 @@ import { ManageLongsButton } from "src/ui/portfolio/longs/OpenLongsTable/ManageL
3333
import { TotalOpenLongsValue } from "src/ui/portfolio/longs/TotalOpenLongsValue/TotalOpenLongsValue";
3434
import { usePortfolioLongsDataFromHyperdrives } from "src/ui/portfolio/longs/usePortfolioLongsData";
3535
import { PositionTableHeading } from "src/ui/portfolio/PositionTableHeading";
36-
import { useAccount } from "wagmi";
36+
import { Address } from "viem";
3737

3838
export function OpenLongsTableDesktop({
3939
hyperdrives,
40+
account,
4041
}: {
4142
hyperdrives: HyperdriveConfig[];
43+
account: Address | undefined;
4244
}): ReactElement | null {
43-
const { address: account } = useAccount();
4445
const { openLongPositions, openLongPositionsStatus } =
45-
usePortfolioLongsDataFromHyperdrives(hyperdrives);
46+
usePortfolioLongsDataFromHyperdrives({ hyperdrives, account });
4647
const openLongPositionsExist = openLongPositions?.some(
4748
(position) => position.details !== undefined,
4849
);
@@ -94,6 +95,7 @@ export function OpenLongsTableDesktop({
9495
hyperdrive={hyperdrives[0]}
9596
rightElement={
9697
<TotalOpenLongsValue
98+
account={account}
9799
hyperdrives={hyperdrives}
98100
openLongs={openLongPositions}
99101
/>
@@ -112,6 +114,7 @@ export function OpenLongsTableDesktop({
112114
return (
113115
<CloseLongModalButton
114116
key={modalId}
117+
account={account}
115118
hyperdrive={original.hyperdrive}
116119
modalId={modalId}
117120
long={{

apps/hyperdrive-trading/src/ui/portfolio/longs/TotalOpenLongsValue/TotalOpenLongsValue.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,19 @@ import { useAppConfigForConnectedChain } from "src/ui/appconfig/useAppConfigForC
77
import { formatBalance } from "src/ui/base/formatting/formatBalance";
88
import { useTotalOpenLongsValueTwo } from "src/ui/hyperdrive/longs/hooks/useTotalOpenLongsValue";
99
import { useTokenFiatPrice } from "src/ui/token/hooks/useTokenFiatPrice";
10-
import { useAccount } from "wagmi";
10+
import { Address } from "viem";
1111

1212
export function TotalOpenLongsValue({
1313
hyperdrives,
1414
openLongs,
15+
account,
1516
}: {
1617
hyperdrives: HyperdriveConfig[];
18+
account: Address | undefined;
1719
openLongs:
1820
| (OpenLongPositionReceived & { hyperdrive: HyperdriveConfig })[]
1921
| undefined;
2022
}): ReactElement {
21-
const { address: account } = useAccount();
22-
2323
const { totalOpenLongsValue, isLoading } = useTotalOpenLongsValueTwo({
2424
account,
2525
longs: openLongs,

apps/hyperdrive-trading/src/ui/portfolio/longs/usePortfolioLongsData.ts

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,21 @@ import { useQuery } from "@tanstack/react-query";
77
import { makeQueryKey, makeQueryKey2 } from "src/base/makeQueryKey";
88
import { getDrift } from "src/drift/getDrift";
99
import { useAppConfigForConnectedChain } from "src/ui/appconfig/useAppConfigForConnectedChain";
10-
import { useAccount } from "wagmi";
10+
import { Address } from "viem";
1111

1212
export type OpenLongPositionsData = {
1313
hyperdrive: HyperdriveConfig;
1414
openLongs: OpenLongPositionReceived[];
1515
}[];
1616

17-
export function usePortfolioLongsData(): {
17+
export function usePortfolioLongsData({
18+
account,
19+
}: {
20+
account: Address | undefined;
21+
}): {
1822
openLongPositions: OpenLongPositionsData | undefined;
1923
openLongPositionsStatus: "error" | "success" | "loading";
2024
} {
21-
const { address: account } = useAccount();
2225
const appConfigForConnectedChain = useAppConfigForConnectedChain();
2326
const queryEnabled = !!account && !!appConfigForConnectedChain;
2427

@@ -44,7 +47,7 @@ export function usePortfolioLongsData(): {
4447
...long,
4548
details: await readHyperdrive.getOpenLongDetails({
4649
assetId: long.assetId,
47-
account: account,
50+
account,
4851
}),
4952
})),
5053
);
@@ -64,15 +67,18 @@ export function usePortfolioLongsData(): {
6467
};
6568
}
6669

67-
export function usePortfolioLongsDataFromHyperdrives(
68-
hyperdrives: HyperdriveConfig[],
69-
): {
70+
export function usePortfolioLongsDataFromHyperdrives({
71+
hyperdrives,
72+
account,
73+
}: {
74+
hyperdrives: HyperdriveConfig[];
75+
account: Address | undefined;
76+
}): {
7077
openLongPositions:
7178
| (OpenLongPositionReceived & { hyperdrive: HyperdriveConfig })[]
7279
| undefined;
7380
openLongPositionsStatus: "error" | "success" | "loading";
7481
} {
75-
const { address: account } = useAccount();
7682
const queryEnabled = !!account && !!hyperdrives.length;
7783

7884
const { data: openLongPositions, status: openLongPositionsStatus } = useQuery(
@@ -105,6 +111,7 @@ export function usePortfolioLongsDataFromHyperdrives(
105111
}),
106112
})),
107113
);
114+
console.log("openLongs", openLongs);
108115

109116
return openLongs;
110117
}),

apps/hyperdrive-trading/src/ui/routes/portfolio.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,6 @@ export const Route = createFileRoute(PORTFOLIO_ROUTE)({
1111
),
1212
validateSearch: z.object({
1313
position: z.enum(["longs", "shorts", "lp", "rewards"]).optional(),
14+
account: z.string().optional(),
1415
}),
1516
});

0 commit comments

Comments
 (0)