Untitled

 avatar
unknown
plain_text
20 days ago
3.8 kB
0
Indexable
import { persistStore, persistReducer, createMigrate } from 'redux-persist';
import createSagaMiddleware from 'redux-saga';
import reducers from './reducers';
import rootSaga from './saga';
import { createTransform } from 'redux-persist';
import { TYPE_PRICE_PNL } from 'app/screens/futures_onus/constants/type';
import { TYPE_SORT_ASSETS } from 'app/screens/futures_onus_select_assets/utils';
import { mmkvStoragePersist } from 'app/store/local';
import { configureStore } from '@reduxjs/toolkit';

const sagaMiddleware = createSagaMiddleware();

let persistedReducer = null;

const versionMigrations = 44;

const migrations = {
  0: state => {
    // migration clear out device state
    return {
      ...state,
    };
  },
  [versionMigrations]: state => {
    // migration to keep only device state
    return {
      ...state,
      setting_futures: {
        ...state.setting_futures,
        type: 'pro',
        typeChart: 'original',
        confirmPosition: false, //xác nhận mở vị thế
        confirmCloseAll: false, //xác nhận đóng tất cả
        pushNotiLiquidation: true, //thông báo liquidation
        isGuideLite: true,
        typePricePnl: TYPE_PRICE_PNL.BEST_PRICE,
        showPnlWithFee: false,
        indexCategory: 0,
        valueSort: TYPE_SORT_ASSETS.PAIR_VOLUME_UP,
        showTooltipFutures: false,
      },
    };
  },
};

const SetTransform = createTransform(
  // transform state on its way to being serialized and persisted.
  (inboundState, key) => {
    if (key === 'invest') {
      return {
        keywordsRecent: inboundState.keywordsRecent,
        setting: inboundState.setting,
        watchlist: [],
        staking: null,
        creditLine: null,
      };
    }
    return inboundState;
    // convert mySet to an Array.
  },
  // transform state being rehydrated
  (outboundState, key) => {
    // convert mySet back to a Set.
    return outboundState;
  },
  // define which reducers this transform gets called for.
  {
    whitelist: [
      'auth',
      'locale',
      'localDevices',
      'setting',
      'secretKeyByUsers',
      'usersRegister',
      'config',
      'invest',
      'setting_chart',
      'chart_futures',
      'token_futures',
      'usersPaymentMethod',
      'setting_futures',
      'exchange_info',
      'symbol_focus',
      'user_futures',
      'userPaymentSelected',
      'bankToBuyVndc',
      'dataForVipLevel',
      'exchange_info_spot',
      'user_spot',
      'chart_spot',
      'setting_spot',
      'showUpRate',
      'listDevice',
      'pairConfigExchangeAMM',
    ],
  },
);

persistedReducer = persistReducer(
  {
    key: 'root',
    storage: mmkvStoragePersist,
    version: versionMigrations,
    whitelist: [
      'auth',
      'locale',
      'theme',
      'localDevices',
      'setting',
      'secretKeyByUsers',
      'usersRegister',
      'config',
      'invest',
      'contactsRecent',
      'setting_chart',
      'chart_futures',
      'token_futures',
      'usersPaymentMethod',
      'setting_futures',
      'exchange_info',
      'symbol_focus',
      'user_futures',
      'userPaymentSelected',
      'bankToBuyVndc',
      'dataForVipLevel',
      'exchange_info_spot',
      'user_spot',
      'chart_spot',
      'setting_spot',
      'showUpRate',
      'listDevice',
      'pairConfigExchangeAMM',
    ],
    transforms: [SetTransform],
    blacklist: ['requests'],
    migrate: createMigrate(migrations),
  },
  reducers,
);

export const store = configureStore({
  reducer: persistedReducer,
  middleware: getDefaultMiddleware =>
    getDefaultMiddleware({
      serializableCheck: false, // Tắt kiểm tra serializable nếu redux-persist gây lỗi
    }).concat(sagaMiddleware),
});

sagaMiddleware.run(rootSaga);

export const persistor = persistStore(store);
Editor is loading...
Leave a Comment