Skip to content

Commit b02b783

Browse files
Damien LACHAUME / PALO-ITAlenar
authored andcommitted
Add link to CExplorer for pool tickers
1 parent 2f8e01d commit b02b783

File tree

3 files changed

+113
-4
lines changed

3 files changed

+113
-4
lines changed
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
import {render, screen} from '@testing-library/react'
2+
import '@testing-library/jest-dom'
3+
import {initStore} from "./helpers";
4+
import {Provider} from "react-redux";
5+
import {poolsSlice} from "../src/store/poolsSlice";
6+
import PoolTicker from "../src/components/PoolTicker";
7+
import {getCExplorerUrlForPool} from "../src/utils";
8+
9+
function renderPoolTickerComponent(aggregator, partyId, default_state = undefined) {
10+
const store = initStore(default_state);
11+
return [
12+
render(
13+
<Provider store={store}>
14+
<PoolTicker aggregator={aggregator} partyId={partyId}/>
15+
</Provider>
16+
),
17+
store
18+
];
19+
}
20+
21+
describe('PoolTicker', () => {
22+
it('Pool ticker not on the three main network doesn\'t show link to cexplorer', () => {
23+
const partyId = "pool1zmtm8yef33z2n7x4nn0kvv9xpzjuj7725p9y9m5t960g5qy51ua";
24+
const poolTicker = "[MITHRIL] Mithril Signer";
25+
renderPoolTickerComponent(
26+
"myaggregator",
27+
partyId,
28+
{
29+
pools: {
30+
...poolsSlice.getInitialState(),
31+
list: [
32+
{
33+
aggregator: "myaggregator",
34+
network: "devnet",
35+
pools: [{
36+
"party_id": partyId,
37+
"pool_ticker": poolTicker,
38+
"has_registered": true,
39+
}],
40+
}],
41+
},
42+
});
43+
44+
expect(screen.getByText(poolTicker));
45+
expect(screen.queryByRole('link')).toBe(null);
46+
});
47+
48+
it.each(["mainnet", "preprod", "preview"])
49+
('Pool ticker on %s network link to cexplorer', (network) => {
50+
const partyId = "pool1zmtm8yef33z2n7x4nn0kvv9xpzjuj7725p9y9m5t960g5qy51ua";
51+
const poolTicker = "[MITHRIL] Mithril Signer";
52+
renderPoolTickerComponent(
53+
"myaggregator",
54+
partyId,
55+
{
56+
pools: {
57+
...poolsSlice.getInitialState(),
58+
list: [
59+
{
60+
aggregator: "myaggregator",
61+
network: network,
62+
pools: [{
63+
"party_id": partyId,
64+
"pool_ticker": poolTicker,
65+
"has_registered": true,
66+
}],
67+
}],
68+
},
69+
});
70+
71+
expect(screen.getByText(poolTicker));
72+
expect(screen.getByRole('link')).toHaveAttribute('href', getCExplorerUrlForPool(network, partyId));
73+
});
74+
});
Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,23 @@
1-
import React from "react";
1+
import React, {useEffect, useState} from "react";
22
import {useSelector} from "react-redux";
33
import {getPool} from "../store/poolsSlice";
4+
import {getCExplorerUrlForPool} from "../utils";
45

56
export default function PoolTicker({aggregator, partyId, ...props}) {
6-
const poolTicker = useSelector((state) => getPool(state, aggregator, partyId).pool_ticker);
7+
const pool = useSelector((state) => getPool(state, aggregator, partyId));
8+
const [url, setUrl] = useState(undefined);
79

8-
return <>{poolTicker}</>;
9-
}
10+
useEffect(() => {
11+
if (pool?.network) {
12+
setUrl(getCExplorerUrlForPool(pool.network, pool.party_id));
13+
} else {
14+
setUrl(undefined);
15+
}
16+
}, [pool.party_id, pool.network])
1017

18+
return (url !== undefined)
19+
? <a href={url} target="_blank" className="link-dark link-underline-light">
20+
<span>{pool.pool_ticker}</span>
21+
</a>
22+
: <span>{pool.pool_ticker}</span>;
23+
}

mithril-explorer/src/utils.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,27 @@ function setChartJsDefaults(chartJs) {
9191
chartJs.defaults.elements.bar.borderWidth = 1;
9292
}
9393

94+
function getCExplorerUrlForPool(network, partyId) {
95+
const urlWithoutNetwork = `cexplorer.io/pool/${partyId}`;
96+
let url = undefined;
97+
98+
switch (network) {
99+
case 'mainnet':
100+
url = `https://${urlWithoutNetwork}`;
101+
break;
102+
case 'preprod':
103+
url = `https://preprod.${urlWithoutNetwork}`;
104+
break;
105+
case 'preview':
106+
url = `https://preview.${urlWithoutNetwork}`;
107+
break;
108+
default:
109+
break;
110+
}
111+
112+
return url;
113+
}
114+
94115
module.exports = {
95116
checkUrl,
96117
formatStake,
@@ -99,4 +120,5 @@ module.exports = {
99120
formatCurrency,
100121
formatBytes,
101122
formatPartyId,
123+
getCExplorerUrlForPool,
102124
}

0 commit comments

Comments
 (0)