Skip to content

✨ Refactor and Improve all incentives #2308

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 48 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
b20946d
fix: implement incentives for supply/borrow infos
MartinGbz Jan 7, 2025
48158e4
feat: add all incentives in the whole app
MartinGbz Jan 7, 2025
5c41e27
fix: displayBlack issue on infos
MartinGbz Jan 7, 2025
00d439b
fix: issue on supply/borrow modal
MartinGbz Jan 7, 2025
054cfe1
fix: display issue
MartinGbz Jan 7, 2025
822fe8c
fix: debt switch
MartinGbz Jan 7, 2025
296de8d
fix: issue lmIncentivesCheck
MartinGbz Jan 8, 2025
4251320
fix: aprs check inside the IncentivesButton component
MartinGbz Jan 8, 2025
25a1cf0
fix: variableDebtTokenAddress undefined
MartinGbz Jan 8, 2025
f23fe84
fix: issue debtSwitch rewards apr
MartinGbz Jan 8, 2025
40293d5
fix: issue supply/borrow modal ignit program
MartinGbz Jan 8, 2025
dac9094
refactor: hasIncentivesCheck
MartinGbz Jan 8, 2025
f400537
fix: set norAprExternalIncentivesTooltips with reward aprs, and remov…
MartinGbz Jan 8, 2025
f531844
Merge branch 'main' into fix/implement-incentives-to-remaining-compon…
MartinGbz Feb 10, 2025
030b2a4
feat: improve multiple apy UX
MartinGbz Feb 14, 2025
97893a3
fix: detail incentives line component
MartinGbz Feb 17, 2025
c2210f6
fix: rewards mesages
MartinGbz Feb 17, 2025
62a04c4
fix: incentives card style
MartinGbz Feb 17, 2025
1e12934
fix: issue on zksync ignite incentives
MartinGbz Feb 18, 2025
a02d9aa
fix: detail incentives
MartinGbz Feb 18, 2025
943311e
chore: refactor code locations + names
MartinGbz Feb 18, 2025
34e3a08
Merge branch 'main' into fix/implement-incentives-to-remaining-compon…
MartinGbz Mar 5, 2025
5e3af0d
fix: ethena and sonic tooltips
MartinGbz Mar 5, 2025
100452b
fix: external no number tooltips
MartinGbz Mar 5, 2025
139e86c
fix: gho borrow incentives implementation
MartinGbz Mar 5, 2025
eaabecb
chore: rename IncentivesCard to RateAndIncentivesBox
MartinGbz Mar 5, 2025
d72c794
chore: rename IncentivesBox to IncentivesCard
MartinGbz Mar 5, 2025
5a7b071
chore: move getSimpleExternalIncentivesTooltipConfig
MartinGbz Mar 5, 2025
6eb695e
chore: refactor simple external incentive
MartinGbz Mar 5, 2025
1041260
feat: implement new PointsIncentives component/hook
MartinGbz Mar 5, 2025
a778160
fix: separate simple external incentives from the other incenives (to…
MartinGbz Mar 6, 2025
7b30dac
Merge branch 'main' into fix/implement-incentives-to-remaining-compon…
MartinGbz Mar 6, 2025
154afb4
fix: remmove old usage
MartinGbz Mar 6, 2025
235d0e1
feat: display separately simple external incentives
MartinGbz Mar 6, 2025
d11088b
chore: refactor code
MartinGbz Mar 6, 2025
ca760d4
fix: also seperate points incentives from the aprs incentives
MartinGbz Mar 6, 2025
32b75d7
fix: display condition issue
MartinGbz Mar 6, 2025
446632b
fix: kernel icon margin
MartinGbz Mar 6, 2025
fb6f910
fix: forum post link on sonic usdc merit
MartinGbz Mar 6, 2025
20e6973
chore: remove comments
MartinGbz Mar 6, 2025
b1de80d
chore: remove ethena and sonic outdated buttons
MartinGbz Mar 6, 2025
704c565
fix: left margin issue on supply/borrow infos
MartinGbz Mar 6, 2025
7ea56b7
chore: remove logs
MartinGbz Mar 6, 2025
92d5cd5
Merge branch 'main' into fix/implement-incentives-to-remaining-compon…
MartinGbz Mar 6, 2025
b96fb73
fix: etherfi points
MartinGbz Mar 6, 2025
3972da6
chore: refactor/centralized incentives files/components
MartinGbz Mar 6, 2025
606ec33
fix: gho incentives
MartinGbz Mar 7, 2025
3f60354
chore: use aave address book for sonic addresses
MartinGbz Mar 7, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -151,5 +151,6 @@
"budget": null,
"budgetPercentIncreaseRed": 20,
"showDetails": true
}
},
"packageManager": "[email protected]+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
}
File renamed without changes
29 changes: 0 additions & 29 deletions src/components/incentives/EthenaIncentivesTooltipContent.tsx

This file was deleted.

30 changes: 0 additions & 30 deletions src/components/incentives/EtherfiIncentivesTooltipContent.tsx

This file was deleted.

14 changes: 12 additions & 2 deletions src/components/incentives/GhoIncentivesCard.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
import { ProtocolAction } from '@aave/contract-helpers';
import { AaveV3Ethereum } from '@bgd-labs/aave-address-book';
import { Trans } from '@lingui/macro';
import { Box, Tooltip, Typography, TypographyProps } from '@mui/material';
import { useAppDataContext } from 'src/hooks/app-data-provider/useAppDataProvider';
import { CustomMarket } from 'src/ui-config/marketsConfig';

import { PopperComponent } from '../ContentWithTooltip';
import GhoBorrowApyRange from '../GhoBorrowApyRange';
import { FormattedNumber } from '../primitives/FormattedNumber';
import { Link } from '../primitives/Link';
import { NoData } from '../primitives/NoData';
import { TokenIcon } from '../primitives/TokenIcon';
import { EthenaIncentivesButton } from './IncentivesButton';
import { IncentivesCard } from './RateAndIncentivesBox';

export interface GhoIncentivesCardProps {
value: string | number;
Expand Down Expand Up @@ -107,6 +109,7 @@ export const GhoIncentivesCard = ({
<Box
sx={() => ({
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
})}
>
Expand All @@ -128,12 +131,19 @@ export const GhoIncentivesCard = ({
data-cy={'apy'}
/>
)}
<IncentivesCard
symbol={'GHO'}
incentives={[]}
address={AaveV3Ethereum.ASSETS.GHO.V_TOKEN}
market={CustomMarket.proto_mainnet_v3}
protocolAction={ProtocolAction.borrow}
displayBlank={false}
/>
</Box>
</Tooltip>
) : (
<NoData variant="secondary14" color="text.secondary" />
)}
<EthenaIncentivesButton rewardedAsset={AaveV3Ethereum.ASSETS.GHO.V_TOKEN} />
</Box>
);
};
149 changes: 74 additions & 75 deletions src/components/incentives/IncentivesButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,28 @@ import { ReserveIncentiveResponse } from '@aave/math-utils/dist/esm/formatters/i
import { DotsHorizontalIcon } from '@heroicons/react/solid';
import { Box, SvgIcon, Typography } from '@mui/material';
import { useState } from 'react';
import { useEthenaIncentives } from 'src/hooks/useEthenaIncentives';
import { useEtherfiIncentives } from 'src/hooks/useEtherfiIncentives';
import { useMeritIncentives } from 'src/hooks/useMeritIncentives';
import { useSonicIncentives } from 'src/hooks/useSonicIncentives';
import { usePointsIncentives } from 'src/hooks/usePointsIncentives';
import { useSimpleExternalIncentives } from 'src/hooks/useSimpleExternalIncentives';
import { useZkSyncIgniteIncentives } from 'src/hooks/useZkSyncIgniteIncentives';
import { useRootStore } from 'src/store/root';
import { DASHBOARD } from 'src/utils/mixPanelEvents';

import { ContentWithTooltip } from '../ContentWithTooltip';
import { FormattedNumber } from '../primitives/FormattedNumber';
import { TokenIcon } from '../primitives/TokenIcon';
import { EthenaAirdropTooltipContent } from './EthenaIncentivesTooltipContent';
import { EtherFiAirdropTooltipContent } from './EtherfiIncentivesTooltipContent';
import { getSymbolMap, IncentivesTooltipContent } from './IncentivesTooltipContent';
import { MeritIncentivesTooltipContent } from './MeritIncentivesTooltipContent';
import { SonicAirdropTooltipContent } from './SonicIncentivesTooltipContent';
import {
EthenaAirdropTooltipContent,
EtherFiAirdropTooltipContent,
SonicAirdropTooltipContent,
} from './PointsIncentivesTooltipContent';
import {
KernelAirdropTooltip,
SpkAirdropTooltip,
SuperFestTooltip,
} from './SimpleExternalIncentivesTooltip';
import { ZkSyncIgniteIncentivesTooltipContent } from './ZkSyncIgniteIncentivesTooltipContent';

interface IncentivesButtonProps {
Expand All @@ -28,7 +34,7 @@ interface IncentivesButtonProps {
displayBlank?: boolean;
}

const BlankIncentives = () => {
export const BlankIncentives = () => {
return (
<Box
sx={{
Expand Down Expand Up @@ -98,75 +104,80 @@ export const ZkIgniteIncentivesButton = (params: {
);
};

export const EthenaIncentivesButton = ({ rewardedAsset }: { rewardedAsset?: string }) => {
const [open, setOpen] = useState(false);
const points = useEthenaIncentives(rewardedAsset);

if (!points) {
return null;
}

return (
<ContentWithTooltip
tooltipContent={<EthenaAirdropTooltipContent points={points} />}
withoutHover
setOpen={setOpen}
open={open}
>
<ContentEthenaButton points={points} />
</ContentWithTooltip>
);
};

export const EtherfiIncentivesButton = (params: {
symbol: string;
export const SimpleExternalIncentiveTooltip = (params: {
market: string;
protocolAction?: ProtocolAction;
rewardedAsset?: string;
}) => {
const [open, setOpen] = useState(false);
const { market, protocolAction, symbol } = params;
const multiplier = useEtherfiIncentives(market, symbol, protocolAction);

if (!multiplier) {
return null;
}
const simpleExternalIncentivesTooltips = useSimpleExternalIncentives(params);

return (
<ContentWithTooltip
tooltipContent={<EtherFiAirdropTooltipContent multiplier={multiplier} />}
withoutHover
setOpen={setOpen}
open={open}
>
<ContentEtherfiButton multiplier={multiplier} />
</ContentWithTooltip>
<>
{simpleExternalIncentivesTooltips.superFestRewards && <SuperFestTooltip />}
{simpleExternalIncentivesTooltips.spkAirdrop && <SpkAirdropTooltip />}
{simpleExternalIncentivesTooltips.kernelPoints && <KernelAirdropTooltip />}
</>
);
};

export const SonicIncentivesButton = ({ rewardedAsset }: { rewardedAsset?: string }) => {
export const PointsIncentiveButton = (params: { market: string; rewardedAsset?: string }) => {
const [open, setOpen] = useState(false);
const points = useSonicIncentives(rewardedAsset);

if (!points) {
return null;
}
const pointsIncentivesTooltips = usePointsIncentives(params);

return (
<ContentWithTooltip
tooltipContent={<SonicAirdropTooltipContent points={points} />}
withoutHover
setOpen={setOpen}
open={open}
>
<ContentSonicButton points={points} />
</ContentWithTooltip>
<>
{pointsIncentivesTooltips.ethenaPoints && (
<ContentWithTooltip
tooltipContent={
<EthenaAirdropTooltipContent points={pointsIncentivesTooltips.ethenaPoints} />
}
withoutHover
setOpen={setOpen}
open={open}
>
<ContentPoints
value={pointsIncentivesTooltips.ethenaPoints}
iconSrc={'/icons/other/ethena.svg'}
/>
</ContentWithTooltip>
)}
{pointsIncentivesTooltips.sonicPoints && (
<ContentWithTooltip
tooltipContent={
<SonicAirdropTooltipContent points={pointsIncentivesTooltips.sonicPoints} />
}
withoutHover
setOpen={setOpen}
open={open}
>
<ContentPoints
value={pointsIncentivesTooltips.sonicPoints}
iconSrc={'/icons/networks/sonic.svg'}
/>
</ContentWithTooltip>
)}
{pointsIncentivesTooltips.etherfiPoints && (
<ContentWithTooltip
tooltipContent={
<EtherFiAirdropTooltipContent multiplier={pointsIncentivesTooltips.etherfiPoints} />
}
withoutHover
setOpen={setOpen}
open={open}
>
<ContentPoints
value={pointsIncentivesTooltips.etherfiPoints}
iconSrc={'/icons/other/etherfi.svg'}
/>
</ContentWithTooltip>
)}
</>
);
};

export const IncentivesButton = ({ incentives, symbol, displayBlank }: IncentivesButtonProps) => {
export const LmIncentivesButton = ({ incentives, symbol, displayBlank }: IncentivesButtonProps) => {
const [open, setOpen] = useState(false);

if (!(incentives && incentives.length > 0)) {
if (!(incentives && incentives.filter((i) => i.incentiveAPR !== '0').length > 0)) {
if (displayBlank) {
return <BlankIncentives />;
} else {
Expand Down Expand Up @@ -209,7 +220,7 @@ export const IncentivesButton = ({ incentives, symbol, displayBlank }: Incentive
);
};

const Content = ({
export const Content = ({
incentives,
incentivesNetAPR,
displayBlank,
Expand Down Expand Up @@ -343,7 +354,7 @@ const Content = ({
);
};

const ContentButton = ({ value, iconSrc }: { value: number; iconSrc: string }) => {
const ContentPoints = ({ value, iconSrc }: { value: number; iconSrc: string }) => {
const [open, setOpen] = useState(false);
const trackEvent = useRootStore((store) => store.trackEvent);

Expand Down Expand Up @@ -380,15 +391,3 @@ const ContentButton = ({ value, iconSrc }: { value: number; iconSrc: string }) =
</Box>
);
};

const ContentEthenaButton = ({ points }: { points: number }) => (
<ContentButton value={points} iconSrc="/icons/other/ethena.svg" />
);

const ContentEtherfiButton = ({ multiplier }: { multiplier: number }) => (
<ContentButton value={multiplier} iconSrc="/icons/other/ether.fi.svg" />
);

const ContentSonicButton = ({ points }: { points: number }) => (
<ContentButton value={points} iconSrc="/icons/networks/sonic.svg" />
);
Loading