Skip to content

Commit 05e8b49

Browse files
committed
refactor: moved some formatting functions to utils
1 parent 330a6ea commit 05e8b49

File tree

4 files changed

+34
-31
lines changed

4 files changed

+34
-31
lines changed

cspell.json

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"arbitrum",
1313
"autorestart",
1414
"codegen",
15+
"commify",
1516
"commitlint",
1617
"COOLDOWN",
1718
"datetime",

web/src/pages/Courts/CourtDetails/Stats.tsx

+13-20
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,17 @@
11
import React from "react";
22
import styled from "styled-components";
3-
import { formatUnits, formatEther } from "viem";
43
import { useParams } from "react-router-dom";
54
import { useCourtDetails, CourtDetailsQuery } from "queries/useCourtDetails";
6-
import { KLEROS_CONTRACT_ADDRESS, WETH_CONTRACT_ADDRESS } from "src/consts/index";
5+
import { useCoinPrice } from "hooks/useCoinPrice";
6+
import { KLEROS_CONTRACT_ADDRESS, WETH_CONTRACT_ADDRESS } from "consts/index";
7+
import { formatETH, formatPNK, formatUnitsWei, formatUSD, isUndefined } from "utils/index";
78
import StatDisplay, { IStatDisplay } from "components/StatDisplay";
89
import BalanceIcon from "svgs/icons/law-balance.svg";
910
import MinStake from "svgs/icons/min-stake.svg";
10-
import { commify } from "utils/commify";
1111
import VoteStake from "svgs/icons/vote-stake.svg";
1212
import PNKIcon from "svgs/icons/pnk.svg";
1313
import PNKRedistributedIcon from "svgs/icons/redistributed-pnk.svg";
1414
import EthereumIcon from "svgs/icons/ethereum.svg";
15-
import { useCoinPrice } from "hooks/useCoinPrice";
16-
import { isUndefined } from "utils/index";
1715

1816
const StyledCard = styled.div`
1917
width: auto;
@@ -36,18 +34,16 @@ const stats: IStat[] = [
3634
{
3735
title: "Min Stake",
3836
coinId: 0,
39-
getText: (data) => commify(formatUnits(data?.minStake, 18)),
40-
getSubtext: (data, coinPrice) =>
41-
(parseInt(formatUnits(data?.minStake, 18)) * (coinPrice ?? 0)).toFixed(2).toString() + "$",
37+
getText: (data) => formatPNK(data?.minStake),
38+
getSubtext: (data, coinPrice) => formatUSD(Number(formatUnitsWei(data?.minStake)) * (coinPrice ?? 0)),
4239
color: "purple",
4340
icon: MinStake,
4441
},
4542
{
4643
title: "Vote Stake",
4744
coinId: 0,
48-
getText: (data) => commify(formatUnits(data?.minStake, 18)),
49-
getSubtext: (data, coinPrice) =>
50-
(parseInt(formatUnits(data?.minStake, 18)) * (coinPrice ?? 0)).toFixed(2).toString() + "$",
45+
getText: (data) => formatPNK(data?.minStake),
46+
getSubtext: (data, coinPrice) => formatUSD(Number(formatUnitsWei(data?.minStake)) * (coinPrice ?? 0)),
5147
color: "purple",
5248
icon: VoteStake,
5349
},
@@ -61,9 +57,8 @@ const stats: IStat[] = [
6157
{
6258
title: "PNK Staked",
6359
coinId: 0,
64-
getText: (data) => commify(Number(formatUnits(data?.stake, 18)).toFixed(0)),
65-
getSubtext: (data, coinPrice) =>
66-
(parseInt(formatUnits(data?.stake, 18)) * (coinPrice ?? 0)).toFixed(2).toString() + "$",
60+
getText: (data) => formatPNK(data?.stake),
61+
getSubtext: (data, coinPrice) => formatUSD(Number(formatUnitsWei(data?.stake)) * (coinPrice ?? 0)),
6762
color: "purple",
6863
icon: PNKIcon,
6964
},
@@ -84,18 +79,16 @@ const stats: IStat[] = [
8479
{
8580
title: "ETH paid to Jurors",
8681
coinId: 1,
87-
getText: (data) => commify(Number(formatEther(BigInt(data?.paidETH))).toFixed(4)),
88-
getSubtext: (data, coinPrice) =>
89-
(Number(formatUnits(data?.paidETH, 18)) * (coinPrice ?? 0)).toFixed(2).toString() + "$",
82+
getText: (data) => formatETH(data?.paidETH),
83+
getSubtext: (data, coinPrice) => formatUSD(Number(formatUnitsWei(data?.paidETH)) * (coinPrice ?? 0)),
9084
color: "blue",
9185
icon: EthereumIcon,
9286
},
9387
{
9488
title: "PNK redistributed",
9589
coinId: 0,
96-
getText: (data) => commify(Number(formatUnits(data?.paidPNK, 18)).toFixed(0)),
97-
getSubtext: (data, coinPrice) =>
98-
(parseInt(formatUnits(data?.paidPNK, 18)) * (coinPrice ?? 0)).toFixed(2).toString() + "$",
90+
getText: (data) => formatPNK(data?.paidPNK, 18),
91+
getSubtext: (data, coinPrice) => formatUSD(Number(formatUnitsWei(data?.paidPNK)) * (coinPrice ?? 0)),
9992
color: "purple",
10093
icon: PNKRedistributedIcon,
10194
},

web/src/pages/Home/CourtOverview/Stats.tsx

+7-11
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import React from "react";
22
import styled from "styled-components";
3-
import { formatEther, formatUnits } from "viem";
43
import { Card } from "@kleros/ui-components-library";
54
import StatDisplay, { IStatDisplay } from "components/StatDisplay";
65
import PNKIcon from "svgs/icons/pnk.svg";
@@ -9,8 +8,7 @@ import PNKRedistributedIcon from "svgs/icons/redistributed-pnk.svg";
98
import JurorIcon from "svgs/icons/user.svg";
109
import BalanceIcon from "svgs/icons/law-balance.svg";
1110
import { KLEROS_CONTRACT_ADDRESS, WETH_CONTRACT_ADDRESS } from "src/consts/index";
12-
import { commify } from "utils/commify";
13-
import { isUndefined } from "utils/index";
11+
import { formatETH, formatPNK, formatUnitsWei, formatUSD, isUndefined } from "utils/index";
1412
import { useHomePageContext, HomePageQuery, HomePageQueryDataPoints } from "hooks/useHomePageContext";
1513
import { useCoinPrice } from "hooks/useCoinPrice";
1614

@@ -39,29 +37,27 @@ const stats: IStat[] = [
3937
{
4038
title: "PNK staked",
4139
coinId: 0,
42-
getText: (counters) => commify(Number(formatUnits(getLastOrZero(counters, "stakedPNK"), 18)).toFixed(0)),
40+
getText: (counters) => formatPNK(getLastOrZero(counters, "stakedPNK")),
4341
getSubtext: (counters, coinPrice) =>
44-
(parseInt(formatUnits(getLastOrZero(counters, "stakedPNK"), 18)) * (coinPrice ?? 0)).toFixed(2).toString() + "$",
42+
formatUSD(Number(formatUnitsWei(getLastOrZero(counters, "stakedPNK"))) * (coinPrice ?? 0)),
4543
color: "purple",
4644
icon: PNKIcon,
4745
},
4846
{
4947
title: "ETH Paid to jurors",
5048
coinId: 1,
51-
getText: (counters) => commify(Number(formatEther(getLastOrZero(counters, "paidETH"))).toFixed(4)),
49+
getText: (counters) => formatETH(getLastOrZero(counters, "paidETH")),
5250
getSubtext: (counters, coinPrice) =>
53-
(Number(formatUnits(getLastOrZero(counters, "paidETH"), 18)) * (coinPrice ?? 0)).toFixed(2).toString() + "$",
51+
formatUSD(Number(formatUnitsWei(getLastOrZero(counters, "paidETH"))) * (coinPrice ?? 0)),
5452
color: "blue",
5553
icon: EthereumIcon,
5654
},
5755
{
5856
title: "PNK redistributed",
5957
coinId: 0,
60-
getText: (counters) => commify(Number(formatUnits(getLastOrZero(counters, "redistributedPNK"), 18)).toFixed(0)),
58+
getText: (counters) => formatPNK(getLastOrZero(counters, "redistributedPNK")),
6159
getSubtext: (counters, coinPrice) =>
62-
(parseInt(formatUnits(getLastOrZero(counters, "redistributedPNK"), 18)) * (coinPrice ?? 0))
63-
.toFixed(2)
64-
.toString() + "$",
60+
formatUSD(Number(formatUnitsWei(getLastOrZero(counters, "redistributedPNK"))) * (coinPrice ?? 0)),
6561
color: "purple",
6662
icon: PNKRedistributedIcon,
6763
},

web/src/utils/index.ts

+13
Original file line numberDiff line numberDiff line change
@@ -1 +1,14 @@
1+
import { formatEther, formatUnits } from "viem";
2+
import { commify } from "./commify";
3+
14
export const isUndefined = (maybeObject: any): maybeObject is undefined => typeof maybeObject === "undefined";
5+
6+
export const formatUnitsWei = (value: bigint) => formatUnits(value, 18);
7+
8+
export const formatPNK = (value: bigint, fractionDigits = 0) =>
9+
commify(Number(formatUnitsWei(value)).toFixed(fractionDigits));
10+
11+
export const formatETH = (value: bigint, fractionDigits = 4) =>
12+
commify(Number(formatEther(value)).toFixed(fractionDigits));
13+
14+
export const formatUSD = (value: number, fractionDigits = 2) => "$" + commify(Number(value).toFixed(fractionDigits));

0 commit comments

Comments
 (0)