Skip to content

Commit 2f8e01d

Browse files
Damien LACHAUME / PALO-ITAlenar
authored andcommitted
Fix GetPoolTicker performance
1 parent 55300d8 commit 2f8e01d

File tree

2 files changed

+37
-13
lines changed

2 files changed

+37
-13
lines changed

mithril-explorer/__tests__/store.test.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
} from "../src/store/settingsSlice";
99
import default_available_aggregators from "../src/aggregators-list";
1010
import {initStore} from "./helpers";
11+
import {poolsSlice} from "../src/store/poolsSlice";
1112

1213
describe('Store Initialization', () => {
1314
it('init with settings initialState without local storage', () => {
@@ -19,6 +20,7 @@ describe('Store Initialization', () => {
1920
it('init with local storage saved state', () => {
2021
let aggregators = [...default_available_aggregators, "https://aggregator.test"];
2122
let expected = {
23+
pools: poolsSlice.getInitialState(),
2224
settings: {
2325
...settingsSlice.getInitialState(),
2426
selectedAggregator: aggregators.at(aggregators.length - 1),
@@ -36,6 +38,7 @@ describe('Store Initialization', () => {
3638
const initialAggregator = default_available_aggregators.at(1);
3739
let aggregators = [...default_available_aggregators, "https://aggregator.test"];
3840
let expected = {
41+
pools: poolsSlice.getInitialState(),
3942
settings: {
4043
...settingsSlice.getInitialState(),
4144
selectedAggregator: aggregators.at(aggregators.length - 1),
Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,23 @@
1-
import {createAsyncThunk, createSlice} from "@reduxjs/toolkit";
2-
import {selectedAggregator} from "./settingsSlice";
1+
import {createAsyncThunk, createSelector, createSlice} from "@reduxjs/toolkit";
32

43
export const poolsSlice = createSlice({
54
name: 'pools',
6-
initialState: {},
5+
initialState: { list: [] },
76
reducers: {},
87
extraReducers: builder => builder.addCase(updatePoolsForAggregator.fulfilled, (state, action) => {
9-
state[action.payload.aggregator] = {
10-
date: action.payload.date,
11-
network: action.payload.network,
12-
pools: action.payload.pools,
13-
};
8+
let existing = poolsForAggregator(state, action.payload.aggregator);
9+
10+
if (existing) {
11+
existing.date = action.payload.date;
12+
existing.pools = action.payload.pools;
13+
} else {
14+
state.list.push({
15+
aggregator: action.payload.aggregator,
16+
date: action.payload.date,
17+
network: action.payload.network,
18+
pools: action.payload.pools,
19+
});
20+
}
1421
})
1522
});
1623

@@ -27,12 +34,26 @@ export const updatePoolsForAggregator = createAsyncThunk('pools/updateForAggrega
2734
});
2835
});
2936

30-
export const getPool = (state, aggregator, poolId) => {
31-
const data = state.pools[aggregator];
37+
const poolsForAggregator = (state, aggregator) => {
38+
return state.list.find(poolsData => poolsData.aggregator === aggregator);
39+
};
40+
41+
export const getPool = createSelector([
42+
state => state.pools,
43+
(state, aggregator, poolId) => {
3244
return {
33-
network: data?.network,
34-
...data?.pools.find(pool => pool.party_id === poolId)
45+
aggregator: aggregator,
46+
poolId: poolId
47+
}},
48+
],
49+
(pools, args) => {
50+
const aggregator = poolsForAggregator(pools, args.aggregator);
51+
const data = aggregator?.pools.find(pool => pool.party_id === args.poolId);
52+
53+
return {
54+
network: aggregator?.network,
55+
...data,
3556
};
36-
};
57+
});
3758

3859
export default poolsSlice.reducer;

0 commit comments

Comments
 (0)