diff --git a/packages/app/src/common/components/Badge.tsx b/packages/app/src/common/components/Badge.tsx new file mode 100644 index 00000000..0a42a911 --- /dev/null +++ b/packages/app/src/common/components/Badge.tsx @@ -0,0 +1,23 @@ +import clx from "classnames"; +import { type ReactNode, type FC } from "react"; + +interface Props { + children?: ReactNode | undefined; + color?: "primary" | "secondary" | "danger" | "ticket"; +} + +const Badge: FC = ({ children, color = "secondary" }) => { + const classNames = clx( + "inline-flex gap-1 bg-gray-200 rounded-full px-3 py-1 text-sm font-semibold text-gray-700 mr-2 mb-2", + { + "bg-danger text-white": color === "danger", + "bg-green text-white": color === "primary", + "bg-gray-200 text-gray-700": color === "secondary", + "bg-ticket text-black": color === "ticket", + } + ); + + return {children}; +}; + +export { Badge }; diff --git a/packages/app/src/common/components/index.ts b/packages/app/src/common/components/index.ts index 57e9aff8..7200e4a0 100644 --- a/packages/app/src/common/components/index.ts +++ b/packages/app/src/common/components/index.ts @@ -1,4 +1,5 @@ export * from "./AmountInput"; +export * from "./Badge"; export * from "./Button"; export * from "./CarbonRecovered"; export * from "./DetailsBox"; diff --git a/packages/app/src/locking/LockingApp.tsx b/packages/app/src/locking/LockingApp.tsx index 2a6b5071..c57c6a40 100644 --- a/packages/app/src/locking/LockingApp.tsx +++ b/packages/app/src/locking/LockingApp.tsx @@ -1,10 +1,8 @@ import clx from "classnames"; import { toSol, type Details } from "@sunrisestake/client"; import React, { - type FC, forwardRef, type ForwardRefRenderFunction, - type PropsWithChildren, useEffect, useMemo, useState, @@ -12,6 +10,7 @@ import React, { import { Link, useLocation, useNavigate } from "react-router-dom"; import { + Badge, Button, LockForm, Panel, @@ -31,7 +30,7 @@ import { toFixedWithPrecision, ZERO, } from "../common/utils"; -import { ImpactNFT } from "./ImpactNFT"; +import { ImpactNFT } from "./components/ImpactNFT"; import { IoChevronUpOutline } from "react-icons/io5"; import { DynamicTree } from "../common/components/tree/DynamicTree"; import { useForest } from "../common/context/forestContext"; @@ -60,12 +59,6 @@ const canBeUnlocked = (details: Details | undefined): boolean => { ); }; -const LockDetailTag: FC = ({ children }) => ( - - {children} - -); - const _LockingApp: ForwardRefRenderFunction< HTMLDivElement, { className?: string; active?: boolean } & React.HTMLAttributes @@ -166,7 +159,7 @@ const _LockingApp: ForwardRefRenderFunction< const lockText = hasLockedBalance(details) ? "Your Impact NFT is proof of your stake. It grows as your stake matures. Return regularly to upgrade your NFT to the next level." - : "Your Impact NFT is proof of your stake. It grows as your stake matures. Re-lock your gSOL to grow it to the next level."; + : "Your Impact NFT is proof of your stake. It grows as your stake matures. Lock your gSOL to grow it to the next level."; return (
-
Your Impact NFT
+
+ Level: ? + Upgradeable? +
+
Your Impact NFT

{lockText}

- + Locked -{" "} {toFixedWithPrecision( toSol(details.lockDetails?.amountLocked ?? ZERO) )}{" "} gSOL {tooltips.lockCarbon} - - + + Yield accrued -{" "} {toFixedWithPrecision( toSol(details.lockDetails?.yield ?? ZERO), @@ -226,8 +223,8 @@ const _LockingApp: ForwardRefRenderFunction< )}{" "} gSOL {tooltips.lockYield} - - + + Equivalent carbon price -{" "} {toFixedWithPrecision( solToCarbon(toSol(details.lockDetails?.yield ?? ZERO)), @@ -235,7 +232,7 @@ const _LockingApp: ForwardRefRenderFunction< )}{" "} tCO₂E {tooltips.lockCarbon} - + {/* */} {/* Next level at -{" "} */} {/* TODO */} diff --git a/packages/app/src/locking/ImpactNFT.tsx b/packages/app/src/locking/components/ImpactNFT.tsx similarity index 87% rename from packages/app/src/locking/ImpactNFT.tsx rename to packages/app/src/locking/components/ImpactNFT.tsx index 63a824d1..56d327ee 100644 --- a/packages/app/src/locking/ImpactNFT.tsx +++ b/packages/app/src/locking/components/ImpactNFT.tsx @@ -1,7 +1,7 @@ import { type FC } from "react"; import { type Details } from "@sunrisestake/client"; -import { useNFT } from "./hooks/useNFT"; -import { Spinner } from "../common/components"; +import { useNFT } from "../hooks/useNFT"; +import { Spinner } from "../../common/components"; export const ImpactNFT: FC<{ details: Details["impactNFTDetails"] }> = ({ details,