Skip to content

Commit b7fe09b

Browse files
authored
Add reward banner to portfolio Short and LP tabs (#1826)
* Add reward banner to portfolio * Make pool rewards banner dynamic
1 parent 708f487 commit b7fe09b

File tree

4 files changed

+48
-5
lines changed

4 files changed

+48
-5
lines changed

apps/hyperdrive-trading/src/ui/portfolio/lp/LpAndWithdrawalSharesTable/LpAndWithdrawalSharesTable.tsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import {
22
AppConfig,
3+
getAddLiquidityRewardConfigs,
34
getBaseToken,
45
HyperdriveConfig,
56
} from "@delvtech/hyperdrive-appconfig";
@@ -22,6 +23,7 @@ import { TotalLpValue } from "src/ui/portfolio/lp/LpAndWithdrawalSharesTable/Tot
2223
import { WithdrawalQueueCell } from "src/ui/portfolio/lp/LpAndWithdrawalSharesTable/WithdrawalQueueCell";
2324
import { usePortfolioLpDataFromHyperdrives } from "src/ui/portfolio/lp/usePortfolioLpData";
2425
import { PositionTableHeading } from "src/ui/portfolio/PositionTableHeading";
26+
import { PoolHasRewardsBanner } from "src/ui/portfolio/rewards/PoolHasRewardsBanner";
2527
import { Address } from "viem";
2628

2729
export function OpenLpTableDesktop({
@@ -72,6 +74,15 @@ export function OpenLpTableDesktop({
7274
return null;
7375
}
7476

77+
const poolHasRewards = hyperdrives.some((hyperdrive) => {
78+
const rewardConfigs = getAddLiquidityRewardConfigs({
79+
appConfig,
80+
chainId: hyperdrive.chainId,
81+
hyperdriveAddress: hyperdrive.address,
82+
});
83+
return !!rewardConfigs?.length;
84+
});
85+
7586
return (
7687
<div className="flex flex-col gap-6">
7788
<PositionTableHeading
@@ -91,6 +102,7 @@ export function OpenLpTableDesktop({
91102
hyperdrives[0].name.replace(/\d{1,3}d/, "")
92103
}
93104
/>
105+
{poolHasRewards ? <PoolHasRewardsBanner /> : null}
94106
<div className="daisy-card overflow-x-clip rounded-box bg-gray-750 pt-3">
95107
<table className="daisy-table daisy-table-lg">
96108
<thead>
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { Link } from "@tanstack/react-router";
2+
import { ReactElement, ReactNode } from "react";
3+
import { PORTFOLIO_ROUTE } from "src/ui/portfolio/routes";
4+
5+
export function PoolHasRewardsBanner({
6+
message = "You are earning rewards in this pool.",
7+
}: {
8+
message?: ReactNode;
9+
}): ReactElement {
10+
return (
11+
<div className="flex items-center justify-between rounded-full bg-hypervue-pink/10 p-2 pl-8">
12+
<span className="text-hypervue-pink">{message}</span>
13+
<Link
14+
to={PORTFOLIO_ROUTE}
15+
className="daisy-btn daisy-btn-ghost daisy-btn-sm rounded-full"
16+
search={(prev) => ({ ...prev, position: "rewards" })}
17+
>
18+
View rewards
19+
</Link>
20+
</div>
21+
);
22+
}

apps/hyperdrive-trading/src/ui/portfolio/shorts/OpenShortsTable/OpenShortsTableDesktop.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import {
22
AppConfig,
33
getBaseToken,
4+
getOpenShortRewardConfigs,
45
HyperdriveConfig,
56
} from "@delvtech/hyperdrive-appconfig";
67
import { OpenShort } from "@delvtech/hyperdrive-js";
@@ -24,6 +25,7 @@ import { StatusCell } from "src/ui/hyperdrive/longs/StatusCell";
2425
import { MaturesOnCell } from "src/ui/hyperdrive/MaturesOnCell/MaturesOnCell";
2526
import { CloseShortModalButton } from "src/ui/hyperdrive/shorts/CloseShortModalButton/CloseShortModalButton";
2627
import { PositionTableHeading } from "src/ui/portfolio/PositionTableHeading";
28+
import { PoolHasRewardsBanner } from "src/ui/portfolio/rewards/PoolHasRewardsBanner";
2729
import { CurrentShortsValueCell } from "src/ui/portfolio/shorts/OpenShortsTable/CurrentShortsValueCell";
2830
import { ManageShortButton } from "src/ui/portfolio/shorts/OpenShortsTable/ManageShortButton";
2931
import { ShortRateAndSizeCell } from "src/ui/portfolio/shorts/OpenShortsTable/ShortRateAndSizeCell";
@@ -61,6 +63,14 @@ export function OpenShortsTableDesktop({
6163
getSortedRowModel: getSortedRowModel(),
6264
getPaginationRowModel: getPaginationRowModel(),
6365
});
66+
const poolHasRewards = hyperdrives.some((hyperdrive) => {
67+
const rewardConfigs = getOpenShortRewardConfigs({
68+
appConfig,
69+
chainId: hyperdrive.chainId,
70+
hyperdriveAddress: hyperdrive.address,
71+
});
72+
return !!rewardConfigs?.length;
73+
});
6474

6575
if (!account) {
6676
return (
@@ -97,6 +107,7 @@ export function OpenShortsTableDesktop({
97107
hyperdrives[0].name.replace(/\d{1,3}d/, "")
98108
}
99109
/>
110+
{poolHasRewards ? <PoolHasRewardsBanner /> : null}
100111
<div className="daisy-card overflow-x-clip rounded-box bg-gray-750 pt-3">
101112
{/* Modal needs to be rendered outside of the table so that dialog can be used. Otherwise react throws a dom nesting error */}
102113
{tableInstance.getRowModel().rows.map((row) => {

apps/hyperdrive-trading/src/ui/rewards/MilesBanner.tsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,9 @@ export function MilesBanner(): ReactElement | null {
1919
<div className="flex w-full justify-between">
2020
<div className="flex w-full flex-1 items-center justify-center gap-4">
2121
<img src={HyperVueMilesIconUrl} className="size-8 rounded-full" />
22-
<span className="drop-shadow-glow">
23-
You can now earn Miles by{" "}
24-
<strong className="">providing liquidity</strong> or{" "}
25-
<strong className="">opening a short</strong>! Learn more about
26-
the{" "}
22+
<span>
23+
You can now earn Miles by <strong>providing liquidity</strong>{" "}
24+
or <strong>opening a short</strong>! Learn more about the{" "}
2725
<ExternalLink
2826
newTab
2927
href="https://mirror.xyz/0xdB081d7cedeDB2cFb4fff2330D9a31f54A025E38/qVENDIYTfUiZw6QZroXBpNxF8UjTGV8YkVq0lOaTznU"

0 commit comments

Comments
 (0)