File tree Expand file tree Collapse file tree 3 files changed +36
-0
lines changed Expand file tree Collapse file tree 3 files changed +36
-0
lines changed Original file line number Diff line number Diff line change @@ -11,6 +11,7 @@ import SnapshotsList from '../components/Artifacts/SnapshotsList';
11
11
import MithrilStakeDistributionsList from "../components/Artifacts/MithrilStakeDistributionsList" ;
12
12
import { aggregatorSearchParam } from "../constants" ;
13
13
import { selectAggregator , selectedAggregator as currentlySelectedAggregator } from "../store/settingsSlice" ;
14
+ import { updatePoolsForAggregator } from "../store/poolsSlice" ;
14
15
15
16
// Disable SSR for the following components since they use data from the store that are not
16
17
// available server sides (because those data can be read from the local storage).
@@ -26,6 +27,7 @@ export default function Explorer() {
26
27
const [ isUpdatingAggregatorInUrl , setIsUpdatingAggregatorInUrl ] = useState ( false ) ;
27
28
const selectedAggregator = useSelector ( currentlySelectedAggregator ) ;
28
29
30
+
29
31
// Update the aggregator in the url query
30
32
useEffect ( ( ) => {
31
33
const aggregatorInUrl = searchParams . get ( aggregatorSearchParam ) ;
@@ -37,6 +39,8 @@ export default function Explorer() {
37
39
setIsUpdatingAggregatorInUrl ( true ) ;
38
40
router . push ( "?" + params . toString ( ) , undefined , { shallow : true } ) ;
39
41
}
42
+
43
+ dispatch ( updatePoolsForAggregator ( selectedAggregator ) ) ;
40
44
} , [ selectedAggregator ] ) ;
41
45
42
46
// Allow navigation to work (previous, next)
Original file line number Diff line number Diff line change
1
+ import { createAsyncThunk , createSlice } from "@reduxjs/toolkit" ;
2
+ import { selectedAggregator } from "./settingsSlice" ;
3
+
4
+ export const poolsSlice = createSlice ( {
5
+ name : 'pools' ,
6
+ initialState : { } ,
7
+ reducers : { } ,
8
+ 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
+ } ;
14
+ } )
15
+ } ) ;
16
+
17
+ export const updatePoolsForAggregator = createAsyncThunk ( 'pools/updateForAggregator' , aggregator => {
18
+ return fetch ( `${ aggregator } /signers/tickers` )
19
+ . then ( response => response . status === 200 ? response . json ( ) : { } )
20
+ . then ( data => {
21
+ return {
22
+ aggregator : aggregator ,
23
+ date : Date . now ( ) ,
24
+ network : data . network ,
25
+ pools : data . signers ,
26
+ } ;
27
+ } ) ;
28
+ } ) ;
29
+
30
+ export default poolsSlice . reducer ;
Original file line number Diff line number Diff line change 1
1
import { configureStore } from "@reduxjs/toolkit" ;
2
+ import { poolsSlice } from "./poolsSlice" ;
2
3
import { initialState as settingsInitialState , settingsSlice } from "./settingsSlice" ;
3
4
import default_available_aggregators from "../aggregators-list" ;
4
5
import { checkUrl } from "../utils" ;
@@ -65,6 +66,7 @@ export function initStoreFromLocalStorage(initialAggregator) {
65
66
export const storeBuilder = ( initialAggregator ) => configureStore ( {
66
67
reducer : {
67
68
settings : settingsSlice . reducer ,
69
+ pools : poolsSlice . reducer ,
68
70
} ,
69
71
preloadedState : initStoreFromLocalStorage ( initialAggregator ) ,
70
72
} ) ;
You can’t perform that action at this time.
0 commit comments