import type { PayloadAction } from "@reduxjs/toolkit"; import { createAsyncThunk, createSlice } from "@reduxjs/toolkit"; import type { MarketData } from "../../types"; import type { CurrencyCode} from "../../utils"; import { getMarketData } from "../../utils"; import type { SharedState } from "../store"; export interface MarketState { currency: CurrencyCode; data: Record; } const initialState: MarketState = { currency: 'usd', data: {} }; const updateMarketData = createAsyncThunk('market/updateMarketData', async (_, thunkAPI) => { const state = thunkAPI.getState() as SharedState; return await getMarketData(state.market.currency); }); const marketSlice = createSlice({ name: 'market', initialState, reducers: { setCurrency: (state, action: PayloadAction) => { state.currency = action.payload; }, setMarketData: (state, action: PayloadAction>) => { state.data = action.payload; } }, extraReducers: (builder) => { builder .addCase(updateMarketData.fulfilled, (state, action) => { state.data = action.payload; }) .addCase(updateMarketData.rejected, (_, action) => { console.error(action.error.message); }); } }); export const marketThunks = { updateMarketData }; export const marketActions = marketSlice.actions; export const marketReducer = marketSlice.reducer;