From b688b5930ee63fee2d033978c33efc261e9dd1da Mon Sep 17 00:00:00 2001
From: Adam Akbar
Date: Wed, 13 Jul 2022 00:35:31 +0700
Subject: [PATCH 1/6] feat: new product page
---
.../MarketDetailPage/VaultInformationCard.tsx | 1 -
modules/tokenPage/TokenPageContainer.tsx | 4 +-
.../component/ButtonMintOrRedeem.tsx | 31 ++++-
.../component/LeveragedTokenBackingCard.tsx | 124 +++++++++++-------
.../component/LeveragedTokenInfoCard.tsx | 102 --------------
modules/tokenPage/component/MyAssetsCard.tsx | 10 +-
modules/tokenPage/component/PriceInfoCard.tsx | 8 +-
.../component/TokenInformation/InfoItem.tsx | 23 ++++
.../LeveragedTokenInfoCard.tsx | 98 ++++++++++++++
.../TokenInformation/TokenInfoStore.ts | 18 +++
package-lock.json | 64 ++++++++-
package.json | 4 +-
public/assets/icon/tokenPage/worldIcon.svg | 9 ++
styles/globals.css | 12 ++
uikit/card/InformationCard.tsx | 20 +--
15 files changed, 346 insertions(+), 182 deletions(-)
delete mode 100644 modules/tokenPage/component/LeveragedTokenInfoCard.tsx
create mode 100644 modules/tokenPage/component/TokenInformation/InfoItem.tsx
create mode 100644 modules/tokenPage/component/TokenInformation/LeveragedTokenInfoCard.tsx
create mode 100644 modules/tokenPage/component/TokenInformation/TokenInfoStore.ts
create mode 100644 public/assets/icon/tokenPage/worldIcon.svg
diff --git a/components/v1/MarketDetailPage/VaultInformationCard.tsx b/components/v1/MarketDetailPage/VaultInformationCard.tsx
index 027e0896..8f65ac58 100644
--- a/components/v1/MarketDetailPage/VaultInformationCard.tsx
+++ b/components/v1/MarketDetailPage/VaultInformationCard.tsx
@@ -5,7 +5,6 @@ import { Metadata } from "../MarketMetadata";
import { useMarket } from "../swr/useMarket";
import ToastError from "../../../uikit/toasts/Error";
import { DEFAULT_CHAIN, useWalletContext } from "../Wallet";
-import MyAssetCard from "./LeveragedTokenMyAssetCard";
/**
* VaultInformationCardProps is a React Component properties that passed to React Component VaultInformationCard
diff --git a/modules/tokenPage/TokenPageContainer.tsx b/modules/tokenPage/TokenPageContainer.tsx
index 6a5fbd84..f8b31260 100644
--- a/modules/tokenPage/TokenPageContainer.tsx
+++ b/modules/tokenPage/TokenPageContainer.tsx
@@ -11,7 +11,7 @@ import TabsList from "./component/TabsList";
import TabsContentGrid from "./component/TabsContentGrid";
import PriceInfoCard from "./component/PriceInfoCard";
import LeveragedTokenBackingCard from "./component/LeveragedTokenBackingCard";
-import LeveragedTokenInfoCard from "./component/LeveragedTokenInfoCard";
+import LeveragedTokenInfoCard from "./component/TokenInformation/LeveragedTokenInfoCard";
import MyAssetsCard from "./component/MyAssetsCard";
import VaultInfoCard from "./component/VaultInfoCard";
import { Root as TabsRoot } from "@radix-ui/react-tabs";
@@ -44,7 +44,6 @@ const TokenPageContainer: FunctionComponent = ({ chainI
{/* Right Column */}
-
@@ -57,7 +56,6 @@ const TokenPageContainer: FunctionComponent = ({ chainI
{/* RightColumn */}
-
diff --git a/modules/tokenPage/component/ButtonMintOrRedeem.tsx b/modules/tokenPage/component/ButtonMintOrRedeem.tsx
index ae4c2d9b..4b801274 100644
--- a/modules/tokenPage/component/ButtonMintOrRedeem.tsx
+++ b/modules/tokenPage/component/ButtonMintOrRedeem.tsx
@@ -1,4 +1,4 @@
-import type { FunctionComponent } from "react";
+import { FunctionComponent, useEffect, useState } from "react";
import * as Dialog from "@radix-ui/react-dialog";
import * as Tabs from "@radix-ui/react-tabs";
import { Metadata } from "./MarketMetadata";
@@ -6,6 +6,7 @@ import MintDialogContent from "./MintDialogContent";
import RedeemDialogContent from "./RedeemDialogContent";
import ButtonAlternate from "../../../uikit/button/ButtonAlternate";
import { customChains } from "../../../components/v1/Wallet";
+import useKeyboardShortcut from "use-keyboard-shortcut";
/**
* ButtonMintOrRedeemProps is a React Component properties that passed to React Component ButtonMintOrRedeem
@@ -22,13 +23,29 @@ type ButtonMintOrRedeemProps = {
*/
const ButtonMintOrRedeem: FunctionComponent = ({ chainID, address }) => {
const metadata = Metadata[chainID][address];
+ const [isOpen, setIsOpen] = useState(false);
+
+ const { flushHeldKeys } = useKeyboardShortcut(["Shift", "S"], (shortcutKeys) => setIsOpen(true), {
+ overrideSystem: false,
+ ignoreInputFields: false,
+ repeatOnHold: false,
+ });
+
+ useEffect(() => {
+ return () => flushHeldKeys();
+ }, [flushHeldKeys]);
return (
-
-
-
- Mint or Redeem
-
+
+ setIsOpen(true)}>
+
+
+ Swap
+
+
+ Press ↑ + S for quick shortcut
+
+
@@ -44,7 +61,7 @@ const ButtonMintOrRedeem: FunctionComponent = ({ chainI
{metadata.title}
-
+ setIsOpen(false)}>
= ({ chainID, address }) => {
- const provider = getProvider({ chainId: chainID });
+ const provider = useMemo(() => {
+ return getProvider({ chainId: chainID });
+ }, [chainID]);
const metadata = Metadata[chainID][address];
const collateralPerTokenResponse = useCollateralPerLeveragedToken({ token: address, vault: metadata.vaultAddress, provider: provider });
const debtPerTokenResponse = useDebtPerLeveragedToken({ token: address, vault: metadata.vaultAddress, provider: provider });
+ const [uiData, setUiData] = useState({
+ status: "loading",
+ });
- // Data
- const collateral = parseFloat(ethers.utils.formatUnits(collateralPerTokenResponse.data ? collateralPerTokenResponse.data : 0, metadata.collateralDecimals));
- const debt = parseFloat(ethers.utils.formatUnits(debtPerTokenResponse.data ? debtPerTokenResponse.data : 0, metadata.debtDecimals));
+ useEffect(() => {
+ if (metadata) {
+ if (collateralPerTokenResponse.data && debtPerTokenResponse.data) {
+ setUiData({
+ status: "loaded",
+ data: {
+ collateralPerLeveragedToken: parseFloat(ethers.utils.formatUnits(collateralPerTokenResponse.data ? collateralPerTokenResponse.data : 0, metadata.collateralDecimals)),
+ debtPerLeveragedToken: parseFloat(ethers.utils.formatUnits(debtPerTokenResponse.data ? debtPerTokenResponse.data : 0, metadata.debtDecimals)),
+ },
+ });
+ }
+ }
+ }, [collateralPerTokenResponse.data, debtPerTokenResponse.data, metadata]);
- // UI states
- const showLoading = collateralPerTokenResponse.isLoading || debtPerTokenResponse.isLoading ? true : false;
- const showError = collateralPerTokenResponse.error || debtPerTokenResponse.error ? true : false;
- const showData = !showLoading && !showError && collateralPerTokenResponse.data && debtPerTokenResponse.data ? true : false;
+ useEffect(() => {
+ if (collateralPerTokenResponse.error || debtPerTokenResponse.error) {
+ setUiData({
+ status: "error",
+ error: collateralPerTokenResponse?.error?.message || debtPerTokenResponse?.error?.message,
+ });
+ }
+ }, [collateralPerTokenResponse.error, debtPerTokenResponse.error]);
return (
-
-
Backing per {metadata.title}
-
-
-
{metadata.title} represents collaterized debt position and can be redeemed at any time.
-
-
-
-
-
-
{metadata.collateralSymbol}
- {(showLoading || showError) &&
}
- {showData && (
-
- {tokenBalanceFormatter.format(collateral)} {metadata.collateralSymbol}
-
- )}
-
-
-
{metadata.debtSymbol}
- {(showLoading || showError) &&
}
- {showData && (
-
- -{tokenBalanceFormatter.format(debt)} {metadata.debtSymbol}
-
- )}
-
-
+ Backing per {metadata.title}
+ {metadata.title} represents collaterized debt position and can be redeemed at any time.
+ {
+ //TODO: simplify table with custom component and custom logic
+ }
+
+
+
+ Token
+ Allocation
+ Change
+
+
+
+
+
+ {metadata.collateralSymbol}
+
+
+ {uiData.status === "loading" &&
}
+ {uiData.status === "loaded" && {tokenBalanceFormatter.format(uiData.data?.collateralPerLeveragedToken || 0)}
}
+
+ {0}%
+
+
+
+ {metadata.debtSymbol}
+
+
+ {uiData.status === "loading" &&
}
+ {uiData.status === "loaded" && -{tokenBalanceFormatter.format(uiData.data?.debtPerLeveragedToken || 0)}
}
+
+ {0}%
+
+
+
);
};
diff --git a/modules/tokenPage/component/LeveragedTokenInfoCard.tsx b/modules/tokenPage/component/LeveragedTokenInfoCard.tsx
deleted file mode 100644
index f60fe872..00000000
--- a/modules/tokenPage/component/LeveragedTokenInfoCard.tsx
+++ /dev/null
@@ -1,102 +0,0 @@
-import { FunctionComponent, useEffect } from "react";
-import toast from "react-hot-toast";
-import { dollarFormatter } from "../../../utils/formatters";
-import { Metadata } from "../../../components/v1/MarketMetadata";
-import { useMarket } from "../../../components/v1/swr/useMarket";
-import ToastError from "../../../uikit/toasts/Error";
-import { chain as Chains } from "wagmi";
-import { customChains, formatAddress, getEtherscanAddressURL } from "../../../components/v1/Wallet";
-import InformationCard from "../../../uikit/card/InformationCard";
-
-/**
- * LeveragedTokenInfoCardProps is a React Component properties that passed to React Component LeveragedTokenInfoCard
- */
-type LeveragedTokenInfoCardProps = {
- chainID: number;
- address: string;
-};
-
-/**
- * LeveragedTokenInfoCard is just yet another react component
- *
- * @link https://fettblog.eu/typescript-react/components/#functional-components
- */
-const LeveragedTokenInfoCard: FunctionComponent = ({ chainID, address }) => {
- const metadata = Metadata[chainID][address];
-
- // Get the market data
- const marketData = useMarket(chainID, address);
-
- // Toast error if loading is error
- useEffect(() => {
- if (marketData.error) {
- toast.custom((t) => Failed to load information card data, please try to refresh );
- }
- }, [marketData.error]);
-
- // UI States
- const showLoading = marketData.isLoading || marketData.error ? true : false;
- const showData = !showLoading && marketData.data ? true : false;
-
- return (
-
-
-
Information
-
-
-
{metadata.informationText}
-
-
-
-
Market cap
- {showLoading &&
}
- {showData && marketData.data &&
{dollarFormatter.format(marketData.data.leveraged_token_market_cap)}
}
-
-
-
Leverage ratio
- {showLoading &&
}
- {showData && marketData.data &&
{marketData.data.leverage_ratio.toFixed(2) + "x"}
}
-
-
-
Creation & redemption fees
-
0.1%
-
-
-
Management fees
-
FREE
-
-
-
Underlying assets
-
- {metadata.collateralSymbol}, {metadata.debtSymbol}
-
-
- {/* TODO(bayu): Handle case when capacity is maxed out */}
-
-
Capacity
- {showLoading &&
}
- {showData && marketData.data && (
-
- {marketData.data.leveraged_token_total_collateral.toFixed(2) + metadata.collateralSymbol} / {marketData.data.leveraged_token_max_total_collateral > 0 && {marketData.data.leveraged_token_max_total_collateral.toFixed(2) + metadata.collateralSymbol} }
- {marketData.data.leveraged_token_max_total_collateral <= 0 && ∞ }
-
- )}
-
-
- {/* Link to buy on uniswap */}
- {/*
-
- Buy on Uniswap ↗
-
-
*/}
-
-
- );
-};
-
-export default LeveragedTokenInfoCard;
diff --git a/modules/tokenPage/component/MyAssetsCard.tsx b/modules/tokenPage/component/MyAssetsCard.tsx
index 50661bc6..6918918d 100644
--- a/modules/tokenPage/component/MyAssetsCard.tsx
+++ b/modules/tokenPage/component/MyAssetsCard.tsx
@@ -50,18 +50,12 @@ const MyAssetsCard: FunctionComponent = ({ address, isVault =
if (balance > 0) {
return (
-
-
My Asset
-
- await addTokenToMetamask({ token: tokenType.ETHRISE, chainID: chain.chain.id, isVaultToken: isVault })}>
- Add {isVault ? metadata.vaultTitle : metadata.title} to Wallet
-
);
}
diff --git a/modules/tokenPage/component/PriceInfoCard.tsx b/modules/tokenPage/component/PriceInfoCard.tsx
index 0edbc41b..e82facd4 100644
--- a/modules/tokenPage/component/PriceInfoCard.tsx
+++ b/modules/tokenPage/component/PriceInfoCard.tsx
@@ -2,6 +2,7 @@ import { FunctionComponent } from "react";
import LeveragedTokenChart from "./LeveragedTokenChart";
import VaultChart from "./VaultChart";
import MainButton from "./MainButton";
+import MyAssetsCard from "./MyAssetsCard";
/**
* PriceInfoCardProps is a React Component properties that passed to React Component PriceInfoCard
@@ -33,7 +34,12 @@ const PriceInfoCard: FunctionComponent = ({ chainID, title,
{isVault && vaultAddress ? : }
-
+
+
+
+
+
+
);
diff --git a/modules/tokenPage/component/TokenInformation/InfoItem.tsx b/modules/tokenPage/component/TokenInformation/InfoItem.tsx
new file mode 100644
index 00000000..ada58165
--- /dev/null
+++ b/modules/tokenPage/component/TokenInformation/InfoItem.tsx
@@ -0,0 +1,23 @@
+import { useTokenInfoStore } from "./TokenInfoStore";
+
+function ContainerInfoItem({ children }: { children?: React.ReactNode }) {
+ return {children}
;
+}
+
+function ItemTitle({ children }: { children: React.ReactNode }) {
+ return {children}
;
+}
+
+function ItemInfo({ children }: { children: React.ReactNode }) {
+ const { status } = useTokenInfoStore();
+ switch (status) {
+ case "loading":
+ return
;
+ case "loaded":
+ return {children}
;
+ default:
+ return null;
+ }
+}
+
+export { ContainerInfoItem, ItemInfo, ItemTitle };
diff --git a/modules/tokenPage/component/TokenInformation/LeveragedTokenInfoCard.tsx b/modules/tokenPage/component/TokenInformation/LeveragedTokenInfoCard.tsx
new file mode 100644
index 00000000..3ac2a681
--- /dev/null
+++ b/modules/tokenPage/component/TokenInformation/LeveragedTokenInfoCard.tsx
@@ -0,0 +1,98 @@
+import { FunctionComponent, useEffect } from "react";
+import toast from "react-hot-toast";
+import { dollarFormatter } from "../../../../utils/formatters";
+import { Metadata } from "../../../../components/v1/MarketMetadata";
+import { useMarket } from "../../../../components/v1/swr/useMarket";
+import ToastError from "../../../../uikit/toasts/Error";
+import { chain as Chains } from "wagmi";
+import { customChains, formatAddress, getEtherscanAddressURL } from "../../../../components/v1/Wallet";
+import InformationCard, { InformationCardSubTitle, InformationCardTitle } from "../../../../uikit/card/InformationCard";
+import { useTokenInfoStore } from "./TokenInfoStore";
+import { ContainerInfoItem, ItemInfo, ItemTitle } from "./InfoItem";
+
+/**
+ * LeveragedTokenInfoCardProps is a React Component properties that passed to React Component LeveragedTokenInfoCard
+ */
+type LeveragedTokenInfoCardProps = {
+ chainID: number;
+ address: string;
+};
+
+/**
+ * LeveragedTokenInfoCard is just yet another react component
+ *
+ * @link https://fettblog.eu/typescript-react/components/#functional-components
+ */
+const LeveragedTokenInfoCard: FunctionComponent = ({ chainID, address }) => {
+ const metadata = Metadata[chainID][address];
+
+ // Get the market data
+ const { data: marketData, error } = useMarket(chainID, address);
+ const { setData } = useTokenInfoStore();
+
+ // Toast error if loading is error
+ useEffect(() => {
+ if (error) {
+ toast.custom((t) => Failed to load information card data, please try to refresh );
+ }
+ }, [error]);
+
+ useEffect(() => {
+ if (marketData) {
+ setData(marketData);
+ }
+ }, [marketData, setData]);
+
+ return (
+
+ Informations
+ {metadata.informationText}
+
+
+
+ Market cap
+ {dollarFormatter.format(marketData?.leveraged_token_market_cap || 0)}
+
+
+ Underlying assets
+
+ {metadata.collateralSymbol}, {metadata.debtSymbol}
+
+
+
+ Volume
+ ${43.9}M
+
+
+ Trading Fees
+ 0.1%
+
+
+ Management fees
+
+ FREE
+
+
+
+ Capacity (USDC)
+
+
+ {marketData?.leveraged_token_total_collateral.toFixed(2) + metadata.collateralSymbol} / {(marketData?.leveraged_token_max_total_collateral || 0) > 0 && {marketData?.leveraged_token_max_total_collateral.toFixed(2) + metadata.collateralSymbol} }
+ {(marketData?.leveraged_token_max_total_collateral || 0) <= 0 && ∞ }
+
+
+
+
+
+ );
+};
+
+export default LeveragedTokenInfoCard;
diff --git a/modules/tokenPage/component/TokenInformation/TokenInfoStore.ts b/modules/tokenPage/component/TokenInformation/TokenInfoStore.ts
new file mode 100644
index 00000000..107d3e99
--- /dev/null
+++ b/modules/tokenPage/component/TokenInformation/TokenInfoStore.ts
@@ -0,0 +1,18 @@
+import create from "zustand";
+import { Market } from "../../../../components/v1/swr/snapshot";
+
+export type StatusEnum = "loading" | "loaded" | "error";
+
+export type TokenInfoData = {
+ status: StatusEnum;
+ data?: Market;
+ error?: string;
+ setData: (data: Market) => void;
+ setError: (error: string) => void;
+};
+
+export const useTokenInfoStore = create((set) => ({
+ status: "loading",
+ setData: (data: Market) => set((state) => ({ ...state, data, status: "loaded" })),
+ setError: (error: string) => set((state) => ({ ...state, error, status: "error" })),
+}));
diff --git a/package-lock.json b/package-lock.json
index 9f0e09ce..771758bf 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -25,8 +25,10 @@
"react-popper": "^2.2.5",
"recharts": "2.1.8",
"swr": "1.1.2",
+ "use-keyboard-shortcut": "^1.1.4",
"use-persisted-state": "0.3.3",
- "wagmi": "0.2.8"
+ "wagmi": "0.2.8",
+ "zustand": "^4.0.0-rc.1"
},
"devDependencies": {
"@babel/core": "^7.15.5",
@@ -23015,6 +23017,15 @@
}
}
},
+ "node_modules/use-keyboard-shortcut": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/use-keyboard-shortcut/-/use-keyboard-shortcut-1.1.4.tgz",
+ "integrity": "sha512-diFzhVWYkoR9WdHGOxp1EWVr2YUaiQC3vdlT1FbdK25UfPcTb3wlVqgSzvEBdrXh0cg1FW3PCBKzNGMGpslMqg==",
+ "peerDependencies": {
+ "react": ">=16.8",
+ "react-dom": ">=16.8"
+ }
+ },
"node_modules/use-latest": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.0.tgz",
@@ -23074,6 +23085,14 @@
"react": "^16.8.0 || ^17.0.0"
}
},
+ "node_modules/use-sync-external-store": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.1.0.tgz",
+ "integrity": "sha512-SEnieB2FPKEVne66NpXPd1Np4R1lTNKfjuy3XdIoPQKYBAFdzbzSZlSn1KJZUiihQLQC5Znot4SBz1EOTBwQAQ==",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
"node_modules/util": {
"version": "0.11.1",
"resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
@@ -24417,6 +24436,29 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/zustand": {
+ "version": "4.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.0.0-rc.1.tgz",
+ "integrity": "sha512-qgcs7zLqBdHu0PuT3GW4WCIY5SgXdsv30GQMu9Qpp1BA2aS+sNS8l4x0hWuyEhjXkN+701aGWawhKDv6oWJAcw==",
+ "dependencies": {
+ "use-sync-external-store": "1.1.0"
+ },
+ "engines": {
+ "node": ">=12.7.0"
+ },
+ "peerDependencies": {
+ "immer": ">=9.0",
+ "react": ">=16.8"
+ },
+ "peerDependenciesMeta": {
+ "immer": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ }
+ }
+ },
"node_modules/zwitch": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz",
@@ -41818,6 +41860,12 @@
"dev": true,
"requires": {}
},
+ "use-keyboard-shortcut": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/use-keyboard-shortcut/-/use-keyboard-shortcut-1.1.4.tgz",
+ "integrity": "sha512-diFzhVWYkoR9WdHGOxp1EWVr2YUaiQC3vdlT1FbdK25UfPcTb3wlVqgSzvEBdrXh0cg1FW3PCBKzNGMGpslMqg==",
+ "requires": {}
+ },
"use-latest": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.0.tgz",
@@ -41859,6 +41907,12 @@
"object-assign": "^4.1.1"
}
},
+ "use-sync-external-store": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.1.0.tgz",
+ "integrity": "sha512-SEnieB2FPKEVne66NpXPd1Np4R1lTNKfjuy3XdIoPQKYBAFdzbzSZlSn1KJZUiihQLQC5Znot4SBz1EOTBwQAQ==",
+ "requires": {}
+ },
"util": {
"version": "0.11.1",
"resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
@@ -42950,6 +43004,14 @@
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
"dev": true
},
+ "zustand": {
+ "version": "4.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.0.0-rc.1.tgz",
+ "integrity": "sha512-qgcs7zLqBdHu0PuT3GW4WCIY5SgXdsv30GQMu9Qpp1BA2aS+sNS8l4x0hWuyEhjXkN+701aGWawhKDv6oWJAcw==",
+ "requires": {
+ "use-sync-external-store": "1.1.0"
+ }
+ },
"zwitch": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz",
diff --git a/package.json b/package.json
index cbc8e1f8..0611cebe 100644
--- a/package.json
+++ b/package.json
@@ -43,8 +43,10 @@
"react-popper": "^2.2.5",
"recharts": "2.1.8",
"swr": "1.1.2",
+ "use-keyboard-shortcut": "^1.1.4",
"use-persisted-state": "0.3.3",
- "wagmi": "0.2.8"
+ "wagmi": "0.2.8",
+ "zustand": "^4.0.0-rc.1"
},
"devDependencies": {
"@babel/core": "^7.15.5",
diff --git a/public/assets/icon/tokenPage/worldIcon.svg b/public/assets/icon/tokenPage/worldIcon.svg
new file mode 100644
index 00000000..a601393c
--- /dev/null
+++ b/public/assets/icon/tokenPage/worldIcon.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/styles/globals.css b/styles/globals.css
index 5adca884..f9edff73 100644
--- a/styles/globals.css
+++ b/styles/globals.css
@@ -461,3 +461,15 @@ html {
background-position: 0% 50%;
}
}
+
+kbd {
+ color: #707070;
+ border-radius: 4px;
+ background-color: #232323;
+ display: inline-block;
+ font-size: 0.85em;
+ font-weight: 700;
+ line-height: 1;
+ padding: 2px 4px;
+ white-space: nowrap;
+}
diff --git a/uikit/card/InformationCard.tsx b/uikit/card/InformationCard.tsx
index cca2203c..87fd2962 100644
--- a/uikit/card/InformationCard.tsx
+++ b/uikit/card/InformationCard.tsx
@@ -1,20 +1,22 @@
import type { FunctionComponent, ReactNode } from "react";
-/**
- * InformationCardProps is a React Component properties that passed to React Component InformationCard
- */
type InformationCardProps = {
children: ReactNode;
className?: string;
};
-/**
- * InformationCard is just yet another react component
- *
- * @link https://fettblog.eu/typescript-react/components/#functional-components
- */
const InformationCard: FunctionComponent = ({ children, className }) => {
- return {children}
;
+ return {children}
;
};
+const InformationCardTitle = ({ children }: { children: ReactNode }) => {
+ return {children} ;
+};
+
+const InformationCardSubTitle = ({ children }: { children: ReactNode }) => {
+ // TODO: elipsis on overflow
+ return {children}
;
+};
+
+export { InformationCardTitle, InformationCardSubTitle };
export default InformationCard;
From 03bfebc75f3f47931d00da71cd2859db30adf329 Mon Sep 17 00:00:00 2001
From: Adam Akbar
Date: Wed, 13 Jul 2022 10:34:59 +0700
Subject: [PATCH 2/6] fix: change dependencies caused cyclic
---
modules/tokenPage/TokenPageContainer.tsx | 1 -
.../component/ButtonMintOrRedeem.tsx | 25 +++-----
.../component/LeveragedTokenBackingCard.tsx | 3 +-
modules/tokenPage/component/MyAssetsCard.tsx | 2 +-
.../LeveragedTokenInfoCard.tsx | 2 +-
package-lock.json | 60 ++++++++++++++-----
package.json | 3 +-
uikit/card/InformationCard.tsx | 7 ++-
8 files changed, 64 insertions(+), 39 deletions(-)
diff --git a/modules/tokenPage/TokenPageContainer.tsx b/modules/tokenPage/TokenPageContainer.tsx
index f8b31260..599bee98 100644
--- a/modules/tokenPage/TokenPageContainer.tsx
+++ b/modules/tokenPage/TokenPageContainer.tsx
@@ -12,7 +12,6 @@ import TabsContentGrid from "./component/TabsContentGrid";
import PriceInfoCard from "./component/PriceInfoCard";
import LeveragedTokenBackingCard from "./component/LeveragedTokenBackingCard";
import LeveragedTokenInfoCard from "./component/TokenInformation/LeveragedTokenInfoCard";
-import MyAssetsCard from "./component/MyAssetsCard";
import VaultInfoCard from "./component/VaultInfoCard";
import { Root as TabsRoot } from "@radix-ui/react-tabs";
import { FunctionComponent } from "react";
diff --git a/modules/tokenPage/component/ButtonMintOrRedeem.tsx b/modules/tokenPage/component/ButtonMintOrRedeem.tsx
index 4b801274..7d57060f 100644
--- a/modules/tokenPage/component/ButtonMintOrRedeem.tsx
+++ b/modules/tokenPage/component/ButtonMintOrRedeem.tsx
@@ -1,4 +1,4 @@
-import { FunctionComponent, useEffect, useState } from "react";
+import { FunctionComponent, useCallback, useState } from "react";
import * as Dialog from "@radix-ui/react-dialog";
import * as Tabs from "@radix-ui/react-tabs";
import { Metadata } from "./MarketMetadata";
@@ -6,7 +6,7 @@ import MintDialogContent from "./MintDialogContent";
import RedeemDialogContent from "./RedeemDialogContent";
import ButtonAlternate from "../../../uikit/button/ButtonAlternate";
import { customChains } from "../../../components/v1/Wallet";
-import useKeyboardShortcut from "use-keyboard-shortcut";
+import { useHotkeys } from "react-hotkeys-hook";
/**
* ButtonMintOrRedeemProps is a React Component properties that passed to React Component ButtonMintOrRedeem
@@ -21,28 +21,21 @@ type ButtonMintOrRedeemProps = {
*
* @link https://fettblog.eu/typescript-react/components/#functional-components
*/
-const ButtonMintOrRedeem: FunctionComponent = ({ chainID, address }) => {
+function ButtonMintOrRedeem({ chainID, address }: ButtonMintOrRedeemProps) {
const metadata = Metadata[chainID][address];
const [isOpen, setIsOpen] = useState(false);
- const { flushHeldKeys } = useKeyboardShortcut(["Shift", "S"], (shortcutKeys) => setIsOpen(true), {
- overrideSystem: false,
- ignoreInputFields: false,
- repeatOnHold: false,
- });
-
- useEffect(() => {
- return () => flushHeldKeys();
- }, [flushHeldKeys]);
+ useHotkeys("shift+s", () => setIsOpen(true));
+ useHotkeys("esc", () => setIsOpen(false));
return (
- setIsOpen(true)}>
+
-
+ setIsOpen(true)} className="mr-4 flex-1" type={chainID === customChains.bsc.id ? "bsc" : "arb"}>
Swap
-
+
Press ↑ + S for quick shortcut
@@ -95,6 +88,6 @@ const ButtonMintOrRedeem: FunctionComponent = ({ chainI
);
-};
+}
export default ButtonMintOrRedeem;
diff --git a/modules/tokenPage/component/LeveragedTokenBackingCard.tsx b/modules/tokenPage/component/LeveragedTokenBackingCard.tsx
index 9a1d0626..8db9abad 100644
--- a/modules/tokenPage/component/LeveragedTokenBackingCard.tsx
+++ b/modules/tokenPage/component/LeveragedTokenBackingCard.tsx
@@ -5,7 +5,7 @@ import { Metadata } from "../../../components/v1/MarketMetadata";
import { useCollateralPerLeveragedToken } from "../../../components/v1/swr/useCollateralPerLeveragedToken";
import { useDebtPerLeveragedToken } from "../../../components/v1/swr/useDebtPerLeveragedToken";
import { getProvider } from "../../../components/v1/Wallet";
-import InformationCard, { InformationCardSubTitle, InformationCardTitle } from "../../../uikit/card/InformationCard";
+import { InformationCardExtra, InformationCardSubTitle, InformationCardTitle, InformationCard } from "../../../uikit/card/InformationCard";
import { StatusEnum } from "./TokenInformation/TokenInfoStore";
type LeveragedTokenBackingCardProps = {
@@ -94,6 +94,7 @@ const LeveragedTokenBackingCard: FunctionComponent
+ Test
);
};
diff --git a/modules/tokenPage/component/MyAssetsCard.tsx b/modules/tokenPage/component/MyAssetsCard.tsx
index 6918918d..cc83e366 100644
--- a/modules/tokenPage/component/MyAssetsCard.tsx
+++ b/modules/tokenPage/component/MyAssetsCard.tsx
@@ -9,7 +9,7 @@ import { useTokenBalance } from "../../../components/v1/swr/useTokenBalance";
import { useVaultExchangeRate } from "../../../components/v1/swr/useVaultExchangeRate";
import { useWalletContext, getProvider } from "../../../components/v1/Wallet";
import { AssetsItem } from "./AssetsItem";
-import InformationCard from "../../../uikit/card/InformationCard";
+import { InformationCard } from "../../../uikit/card/InformationCard";
/**
* MyAssetsCardProps is a React Component properties that passed to React Component MyAssetsCard
diff --git a/modules/tokenPage/component/TokenInformation/LeveragedTokenInfoCard.tsx b/modules/tokenPage/component/TokenInformation/LeveragedTokenInfoCard.tsx
index 3ac2a681..0cd73fb7 100644
--- a/modules/tokenPage/component/TokenInformation/LeveragedTokenInfoCard.tsx
+++ b/modules/tokenPage/component/TokenInformation/LeveragedTokenInfoCard.tsx
@@ -6,7 +6,7 @@ import { useMarket } from "../../../../components/v1/swr/useMarket";
import ToastError from "../../../../uikit/toasts/Error";
import { chain as Chains } from "wagmi";
import { customChains, formatAddress, getEtherscanAddressURL } from "../../../../components/v1/Wallet";
-import InformationCard, { InformationCardSubTitle, InformationCardTitle } from "../../../../uikit/card/InformationCard";
+import { InformationCardSubTitle, InformationCardTitle, InformationCard } from "../../../../uikit/card/InformationCard";
import { useTokenInfoStore } from "./TokenInfoStore";
import { ContainerInfoItem, ItemInfo, ItemTitle } from "./InfoItem";
diff --git a/package-lock.json b/package-lock.json
index 771758bf..9bbafdba 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -18,14 +18,15 @@
"@radix-ui/react-tabs": "0.1.4",
"ethers": "5.5.4",
"framer-motion": "^6.3.11",
+ "hotkeys-js": "^3.9.4",
"next": "12.0.8",
"react": "^17.0.2",
"react-dom": "^17.0.2",
"react-hot-toast": "2.2.0",
+ "react-hotkeys-hook": "^3.4.6",
"react-popper": "^2.2.5",
"recharts": "2.1.8",
"swr": "1.1.2",
- "use-keyboard-shortcut": "^1.1.4",
"use-persisted-state": "0.3.3",
"wagmi": "0.2.8",
"zustand": "^4.0.0-rc.1"
@@ -14406,6 +14407,11 @@
"integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
"dev": true
},
+ "node_modules/hotkeys-js": {
+ "version": "3.9.4",
+ "resolved": "https://registry.npmjs.org/hotkeys-js/-/hotkeys-js-3.9.4.tgz",
+ "integrity": "sha512-2zuLt85Ta+gIyvs4N88pCYskNrxf1TFv3LR9t5mdAZIX8BcgQQ48F2opUptvHa6m8zsy5v/a0i9mWzTrlNWU0Q=="
+ },
"node_modules/html-entities": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz",
@@ -19189,6 +19195,23 @@
"react-dom": ">=16"
}
},
+ "node_modules/react-hotkeys-hook": {
+ "version": "3.4.6",
+ "resolved": "https://registry.npmjs.org/react-hotkeys-hook/-/react-hotkeys-hook-3.4.6.tgz",
+ "integrity": "sha512-SiGKHnauaAQglRA7qeiW5LTa0KoT2ssv8YGYKZQoM3P9v5JFEHJdXOSFml1N6K86oKQ8dLCLlxqBqGlSJWGmxQ==",
+ "dependencies": {
+ "hotkeys-js": "3.9.3"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.1",
+ "react-dom": ">=16.8.1"
+ }
+ },
+ "node_modules/react-hotkeys-hook/node_modules/hotkeys-js": {
+ "version": "3.9.3",
+ "resolved": "https://registry.npmjs.org/hotkeys-js/-/hotkeys-js-3.9.3.tgz",
+ "integrity": "sha512-s+f0xyvDmf6+DyrFQ2SY+eA7lbvMbjqkqi0I0SpMgnN5tZx7DeH8nsWhkJR4KEq3pxDPHJppDUhdt1rZFW5LeQ=="
+ },
"node_modules/react-inspector": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-5.1.1.tgz",
@@ -23017,15 +23040,6 @@
}
}
},
- "node_modules/use-keyboard-shortcut": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/use-keyboard-shortcut/-/use-keyboard-shortcut-1.1.4.tgz",
- "integrity": "sha512-diFzhVWYkoR9WdHGOxp1EWVr2YUaiQC3vdlT1FbdK25UfPcTb3wlVqgSzvEBdrXh0cg1FW3PCBKzNGMGpslMqg==",
- "peerDependencies": {
- "react": ">=16.8",
- "react-dom": ">=16.8"
- }
- },
"node_modules/use-latest": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.0.tgz",
@@ -35283,6 +35297,11 @@
"integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
"dev": true
},
+ "hotkeys-js": {
+ "version": "3.9.4",
+ "resolved": "https://registry.npmjs.org/hotkeys-js/-/hotkeys-js-3.9.4.tgz",
+ "integrity": "sha512-2zuLt85Ta+gIyvs4N88pCYskNrxf1TFv3LR9t5mdAZIX8BcgQQ48F2opUptvHa6m8zsy5v/a0i9mWzTrlNWU0Q=="
+ },
"html-entities": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz",
@@ -38874,6 +38893,21 @@
"goober": "^2.1.1"
}
},
+ "react-hotkeys-hook": {
+ "version": "3.4.6",
+ "resolved": "https://registry.npmjs.org/react-hotkeys-hook/-/react-hotkeys-hook-3.4.6.tgz",
+ "integrity": "sha512-SiGKHnauaAQglRA7qeiW5LTa0KoT2ssv8YGYKZQoM3P9v5JFEHJdXOSFml1N6K86oKQ8dLCLlxqBqGlSJWGmxQ==",
+ "requires": {
+ "hotkeys-js": "3.9.3"
+ },
+ "dependencies": {
+ "hotkeys-js": {
+ "version": "3.9.3",
+ "resolved": "https://registry.npmjs.org/hotkeys-js/-/hotkeys-js-3.9.3.tgz",
+ "integrity": "sha512-s+f0xyvDmf6+DyrFQ2SY+eA7lbvMbjqkqi0I0SpMgnN5tZx7DeH8nsWhkJR4KEq3pxDPHJppDUhdt1rZFW5LeQ=="
+ }
+ }
+ },
"react-inspector": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-5.1.1.tgz",
@@ -41860,12 +41894,6 @@
"dev": true,
"requires": {}
},
- "use-keyboard-shortcut": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/use-keyboard-shortcut/-/use-keyboard-shortcut-1.1.4.tgz",
- "integrity": "sha512-diFzhVWYkoR9WdHGOxp1EWVr2YUaiQC3vdlT1FbdK25UfPcTb3wlVqgSzvEBdrXh0cg1FW3PCBKzNGMGpslMqg==",
- "requires": {}
- },
"use-latest": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.0.tgz",
diff --git a/package.json b/package.json
index 0611cebe..9e36e72e 100644
--- a/package.json
+++ b/package.json
@@ -36,14 +36,15 @@
"@radix-ui/react-tabs": "0.1.4",
"ethers": "5.5.4",
"framer-motion": "^6.3.11",
+ "hotkeys-js": "^3.9.4",
"next": "12.0.8",
"react": "^17.0.2",
"react-dom": "^17.0.2",
"react-hot-toast": "2.2.0",
+ "react-hotkeys-hook": "^3.4.6",
"react-popper": "^2.2.5",
"recharts": "2.1.8",
"swr": "1.1.2",
- "use-keyboard-shortcut": "^1.1.4",
"use-persisted-state": "0.3.3",
"wagmi": "0.2.8",
"zustand": "^4.0.0-rc.1"
diff --git a/uikit/card/InformationCard.tsx b/uikit/card/InformationCard.tsx
index 87fd2962..b67dcb29 100644
--- a/uikit/card/InformationCard.tsx
+++ b/uikit/card/InformationCard.tsx
@@ -18,5 +18,8 @@ const InformationCardSubTitle = ({ children }: { children: ReactNode }) => {
return {children}
;
};
-export { InformationCardTitle, InformationCardSubTitle };
-export default InformationCard;
+const InformationCardExtra = ({ children, className }: { children: ReactNode; className?: string }) => {
+ return {children}
;
+};
+
+export { InformationCardTitle, InformationCardSubTitle, InformationCardExtra, InformationCard };
From b26a094327b113f3ecada29c17ef9003b3452fd8 Mon Sep 17 00:00:00 2001
From: Adam Akbar
Date: Wed, 13 Jul 2022 13:12:38 +0700
Subject: [PATCH 3/6] add information extra
---
modules/tokenPage/component/LeveragedTokenBackingCard.tsx | 6 +++++-
uikit/card/InformationCard.tsx | 8 ++++++--
2 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/modules/tokenPage/component/LeveragedTokenBackingCard.tsx b/modules/tokenPage/component/LeveragedTokenBackingCard.tsx
index 8db9abad..16f02b6a 100644
--- a/modules/tokenPage/component/LeveragedTokenBackingCard.tsx
+++ b/modules/tokenPage/component/LeveragedTokenBackingCard.tsx
@@ -94,7 +94,11 @@ const LeveragedTokenBackingCard: FunctionComponent
- Test
+
+
+ ✓ Last rebalanced at: 13-01-2022 03:23AM
+
+
);
};
diff --git a/uikit/card/InformationCard.tsx b/uikit/card/InformationCard.tsx
index b67dcb29..ca3e2a2b 100644
--- a/uikit/card/InformationCard.tsx
+++ b/uikit/card/InformationCard.tsx
@@ -15,11 +15,15 @@ const InformationCardTitle = ({ children }: { children: ReactNode }) => {
const InformationCardSubTitle = ({ children }: { children: ReactNode }) => {
// TODO: elipsis on overflow
- return {children}
;
+ return {children}
;
};
const InformationCardExtra = ({ children, className }: { children: ReactNode; className?: string }) => {
- return {children}
;
+ return (
+
+ {children}
+
+ );
};
export { InformationCardTitle, InformationCardSubTitle, InformationCardExtra, InformationCard };
From 18427b0da6175b7765dea6dba5a2b0f12675f254 Mon Sep 17 00:00:00 2001
From: Adam Akbar
Date: Wed, 13 Jul 2022 14:36:07 +0700
Subject: [PATCH 4/6] feat: add calculator component
---
modules/tokenPage/TokenPageContainer.tsx | 2 ++
modules/tokenPage/component/Calculator.tsx | 41 ++++++++++++++++++++++
uikit/Dash.tsx | 23 ++++++++++++
3 files changed, 66 insertions(+)
create mode 100644 modules/tokenPage/component/Calculator.tsx
create mode 100644 uikit/Dash.tsx
diff --git a/modules/tokenPage/TokenPageContainer.tsx b/modules/tokenPage/TokenPageContainer.tsx
index 599bee98..817adb29 100644
--- a/modules/tokenPage/TokenPageContainer.tsx
+++ b/modules/tokenPage/TokenPageContainer.tsx
@@ -15,6 +15,7 @@ import LeveragedTokenInfoCard from "./component/TokenInformation/LeveragedTokenI
import VaultInfoCard from "./component/VaultInfoCard";
import { Root as TabsRoot } from "@radix-ui/react-tabs";
import { FunctionComponent } from "react";
+import { Calculator } from "./component/Calculator";
type TokenPageContainerProps = {
chainID: number;
@@ -44,6 +45,7 @@ const TokenPageContainer: FunctionComponent = ({ chainI
{/* Right Column */}
+
diff --git a/modules/tokenPage/component/Calculator.tsx b/modules/tokenPage/component/Calculator.tsx
new file mode 100644
index 00000000..7795b16d
--- /dev/null
+++ b/modules/tokenPage/component/Calculator.tsx
@@ -0,0 +1,41 @@
+import { InformationCardTitle, InformationCard, InformationCardSubTitle } from "../../../uikit/card/InformationCard";
+import { Dash, TextLeftDash, TextRightDash } from "../../../uikit/Dash";
+
+function Calculator() {
+ return (
+
+ Calulate My Profit
+ Let´s try to simulate how much you´ll get if the ETH price is higher or lower when you invested some ETH
+
+ You Want To Buy
+
+
+
+
+
+
ETH
+
+
Mkt. Price $2,380.23
+
+
+ {
+ // TODO: add slider
+ }
+
+
+
+ Expected Market Price
+ $3,450.34
+
+
+ Est. Net Profit Gain
+ +$2,800.00
+
+
+ );
+}
+
+export { Calculator };
diff --git a/uikit/Dash.tsx b/uikit/Dash.tsx
new file mode 100644
index 00000000..7971d6b7
--- /dev/null
+++ b/uikit/Dash.tsx
@@ -0,0 +1,23 @@
+import React from "react";
+
+function Dash({ children }: { children?: React.ReactNode }) {
+ if (children) {
+ return (
+
+ );
+ }
+ return
;
+}
+
+function TextLeftDash({ children, className }: { children: React.ReactNode; className?: string }) {
+ return {children}
;
+}
+
+function TextRightDash({ children, className }: { children: React.ReactNode; className?: string }) {
+ return {children}
;
+}
+
+export { Dash, TextLeftDash, TextRightDash };
From 5267a133ea8c74981430a520ae4a649b48ecfe4c Mon Sep 17 00:00:00 2001
From: Adam Akbar
Date: Wed, 13 Jul 2022 14:48:09 +0700
Subject: [PATCH 5/6] chore: remove unused package
---
package-lock.json | 11 -----------
package.json | 1 -
2 files changed, 12 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 9bbafdba..48f2db10 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -18,7 +18,6 @@
"@radix-ui/react-tabs": "0.1.4",
"ethers": "5.5.4",
"framer-motion": "^6.3.11",
- "hotkeys-js": "^3.9.4",
"next": "12.0.8",
"react": "^17.0.2",
"react-dom": "^17.0.2",
@@ -14407,11 +14406,6 @@
"integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
"dev": true
},
- "node_modules/hotkeys-js": {
- "version": "3.9.4",
- "resolved": "https://registry.npmjs.org/hotkeys-js/-/hotkeys-js-3.9.4.tgz",
- "integrity": "sha512-2zuLt85Ta+gIyvs4N88pCYskNrxf1TFv3LR9t5mdAZIX8BcgQQ48F2opUptvHa6m8zsy5v/a0i9mWzTrlNWU0Q=="
- },
"node_modules/html-entities": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz",
@@ -35297,11 +35291,6 @@
"integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
"dev": true
},
- "hotkeys-js": {
- "version": "3.9.4",
- "resolved": "https://registry.npmjs.org/hotkeys-js/-/hotkeys-js-3.9.4.tgz",
- "integrity": "sha512-2zuLt85Ta+gIyvs4N88pCYskNrxf1TFv3LR9t5mdAZIX8BcgQQ48F2opUptvHa6m8zsy5v/a0i9mWzTrlNWU0Q=="
- },
"html-entities": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz",
diff --git a/package.json b/package.json
index 9e36e72e..9acda84f 100644
--- a/package.json
+++ b/package.json
@@ -36,7 +36,6 @@
"@radix-ui/react-tabs": "0.1.4",
"ethers": "5.5.4",
"framer-motion": "^6.3.11",
- "hotkeys-js": "^3.9.4",
"next": "12.0.8",
"react": "^17.0.2",
"react-dom": "^17.0.2",
From 2548ce8d9186759bae8adda2b60a8cb88bc1f778 Mon Sep 17 00:00:00 2001
From: Adam Akbar
Date: Wed, 13 Jul 2022 16:34:00 +0700
Subject: [PATCH 6/6] fix: update tailwind css
---
modules/tokenPage/component/LeveragedTokenBackingCard.tsx | 2 +-
uikit/card/InformationCard.tsx | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/modules/tokenPage/component/LeveragedTokenBackingCard.tsx b/modules/tokenPage/component/LeveragedTokenBackingCard.tsx
index 16f02b6a..108c9828 100644
--- a/modules/tokenPage/component/LeveragedTokenBackingCard.tsx
+++ b/modules/tokenPage/component/LeveragedTokenBackingCard.tsx
@@ -87,7 +87,7 @@ const LeveragedTokenBackingCard: FunctionComponent{metadata.debtSymbol}
- {uiData.status === "loading" &&
}
+ {uiData.status === "loading" &&
}
{uiData.status === "loaded" && -{tokenBalanceFormatter.format(uiData.data?.debtPerLeveragedToken || 0)}
}
{0}%
diff --git a/uikit/card/InformationCard.tsx b/uikit/card/InformationCard.tsx
index ca3e2a2b..0a4a149a 100644
--- a/uikit/card/InformationCard.tsx
+++ b/uikit/card/InformationCard.tsx
@@ -20,7 +20,7 @@ const InformationCardSubTitle = ({ children }: { children: ReactNode }) => {
const InformationCardExtra = ({ children, className }: { children: ReactNode; className?: string }) => {
return (
-