Skip to content

Commit

Permalink
feat(suite-native): add trading slice to mobile
Browse files Browse the repository at this point in the history
  • Loading branch information
vytick committed Feb 19, 2025
1 parent 8586a18 commit 15b92da
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 0 deletions.
1 change: 1 addition & 0 deletions suite-common/trading/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ export * from './regional';
export * from './utils';
export * from './constants';
export * from './reducers/tradingReducer';
export type { TradingBuyState } from './reducers/buyReducer';
export * from './middlewares/tradingMiddleware';
export * from './actions/tradingActions';
export * from './actions/buyActions';
Expand Down
1 change: 1 addition & 0 deletions suite-native/module-trading/src/index.ts
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
export * from './navigation/TradingStackNavigator';
export * from './tradingSlice';
60 changes: 60 additions & 0 deletions suite-native/module-trading/src/tradingSlice.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import { PayloadAction } from '@reduxjs/toolkit';

import { createSliceWithExtraDeps, createWeakMapSelector } from '@suite-common/redux-utils';
import {
TradingBuyState as CommonTradingBuyState,
TradingState as CommonTradingState,
initialState as commonInitialState,
prepareTradingReducer,
} from '@suite-common/trading';

import { ReceiveAccount } from './types';

export interface TradingBuyState extends CommonTradingBuyState {
selectedReceiveAccount: ReceiveAccount | undefined;
}

interface TradingState extends CommonTradingState {
buy: TradingBuyState;
}

export type TradeRootState = {
wallet: {
trading: TradingState;
};
};

export const initialState: TradingState = {
...commonInitialState,
buy: { ...commonInitialState.buy, selectedReceiveAccount: undefined },
};

export const tradingSlice = createSliceWithExtraDeps({
name: 'trading',
initialState,
reducers: {
setBuySelectedReceiveAccount: (
state,
{ payload }: PayloadAction<{ selectedReceiveAccount: ReceiveAccount }>,
) => {
state.buy.selectedReceiveAccount = payload.selectedReceiveAccount;
},
},
extraReducers: (builder, extra) => {
const commonTradingFormReducer = prepareTradingReducer(extra);
builder
// In case that this reducer does not match the action, try to handle it by suite-common tradingReducer.
.addDefaultCase((state, action) => {
commonTradingFormReducer(state, action);
});
},
});

export const { setBuySelectedReceiveAccount } = tradingSlice.actions;

export const createMemoizedSelector = createWeakMapSelector.withTypes<TradeRootState>();

export const selectTradingBuy = (state: TradeRootState) => state.wallet.trading.buy;

export const selectBuySelectedReceiveAccount = (state: TradeRootState) =>
selectTradingBuy(state).selectedReceiveAccount;
3 changes: 3 additions & 0 deletions suite-native/state/src/reducers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import { featureFlagsPersistedKeys, featureFlagsReducer } from '@suite-native/fe
import { nativeFirmwareReducer } from '@suite-native/firmware';
import { graphPersistTransform, graphReducer } from '@suite-native/graph';
import { sendFormSlice } from '@suite-native/module-send';
import { tradingSlice } from '@suite-native/module-trading';
import { appSettingsPersistWhitelist, appSettingsReducer } from '@suite-native/settings';
import {
deriveAccountTypeFromPaymentType,
Expand Down Expand Up @@ -59,6 +60,7 @@ const deviceReducer = prepareDeviceReducer(extraDependencies);
const discoveryReducer = prepareDiscoveryReducer(extraDependencies);
const tokenDefinitionsReducer = prepareTokenDefinitionsReducer(extraDependencies);
const sendFormReducer = sendFormSlice.prepareReducer(extraDependencies);
const tradingReducer = tradingSlice.prepareReducer(extraDependencies);
const stakeReducer = prepareStakeReducer(extraDependencies);
const firmwareReducer = prepareFirmwareReducer(extraDependencies);

Expand All @@ -82,6 +84,7 @@ export const prepareRootReducers = async () => {
send: sendFormReducer,
fees: feesReducer,
stake: stakeReducer,
trading: tradingReducer
});

const walletPersistedReducer = await preparePersistReducer({
Expand Down
2 changes: 2 additions & 0 deletions suite-native/state/src/store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { Middleware, StoreEnhancer, configureStore } from '@reduxjs/toolkit';
import devToolsEnhancer from 'redux-devtools-expo-dev-plugin';
import { logger } from 'redux-logger';

import { tradingMiddleware } from '@suite-common/trading';
import { prepareFiatRatesMiddleware } from '@suite-common/wallet-core';
import { blockchainMiddleware } from '@suite-native/blockchain';
import { prepareButtonRequestMiddleware, prepareDeviceMiddleware } from '@suite-native/device';
Expand All @@ -25,6 +26,7 @@ const middlewares: Middleware[] = [
prepareButtonRequestMiddleware(extraDependencies),
prepareDiscoveryMiddleware(extraDependencies),
sendFormMiddleware,
tradingMiddleware,
];

const enhancers: Array<StoreEnhancer<any, any>> = [];
Expand Down

0 comments on commit 15b92da

Please sign in to comment.