1
- import { createAsyncThunk , createSlice } from "@reduxjs/toolkit" ;
2
- import { selectedAggregator } from "./settingsSlice" ;
1
+ import { createAsyncThunk , createSelector , createSlice } from "@reduxjs/toolkit" ;
3
2
4
3
export const poolsSlice = createSlice ( {
5
4
name : 'pools' ,
6
- initialState : { } ,
5
+ initialState : { list : [ ] } ,
7
6
reducers : { } ,
8
7
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
+ }
14
21
} )
15
22
} ) ;
16
23
@@ -27,12 +34,26 @@ export const updatePoolsForAggregator = createAsyncThunk('pools/updateForAggrega
27
34
} ) ;
28
35
} ) ;
29
36
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 ) => {
32
44
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 ,
35
56
} ;
36
- } ;
57
+ } ) ;
37
58
38
59
export default poolsSlice . reducer ;
0 commit comments