All files / src/redux store.ts

83.33% Statements 10/12
87.5% Branches 7/8
100% Functions 2/2
83.33% Lines 10/12

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105                                                                        540x   540x                                                                 540x 8339x             8339x           1x     8339x     540x   540x     540x                
import { configureStore } from "@reduxjs/toolkit";
import { enableMapSet } from "immer";
// src/redux/rootReducer.ts
import { combineReducers } from "@reduxjs/toolkit";
import NiceModal from "@ebay/nice-modal-react";
import appReducer from "./slices/app";
import verificationReducer from "./slices/auth/verification";
import transactionsReducer from "./slices/transactions";
import customersReducer from "./slices/customers";
import fundraisersReducer from "./slices/fundraisers";
import sweepstakesReducer from "./slices/sweepstakes";
import merchantsReducer from "./slices/enterprise/merchants";
import enterprisesSlice from "./slices/acquirer/enterprises";
import acquirerSettingsReducer from "./slices/acquirer/acquirerSettings";
import cartReducer from "./slices/cart";
import AuthReducer from "./slices/auth/auth";
import enterpriseSettingsReducer from "./slices/enterprise/enterpriseSettings";
import accountsReducer, { setSelectedAccount } from "./slices/auth/accounts";
import searchReducer from "./slices/search";
import checkoutReducer from "./slices/checkout";
import productReducer from "./slices/products";
import analyticsReducer from "./slices/analytics";
import transactionRiskProfile from "./slices/acquirer/transactionRiskProfile";
import conversationsReducer from "./slices/conversations";
import accessControlReducer from "./slices/accessControl/accessControl";
import merchantPreviewReducer from "./slices/merchantPreview";
import unreadConversationSignReducer from "./slices/unreadConversationSign";
import tableFiltersReducer from "./slices/tableFilters";
import merchantFiltersReducer from "./slices/merchantFilters";
import changelogReducer from "./slices/changelog";
import filterReducer from "./slices/dynamicFilterSlice";
import uploadProgressSlice from "./slices/uploadProgressSlice";
import sortReducer from "./slices/sort";
import onboardingWizardReducer from "./slices/onboardingWizard";
import { cleanupAsyncExports } from "@hooks/transactions/useAsyncTransactionExport";
 
enableMapSet();
 
const combinedReducers = combineReducers({
  app: appReducer,
  verification: verificationReducer,
  transactions: transactionsReducer,
  customers: customersReducer,
  fundraisers: fundraisersReducer,
  sweepstakes: sweepstakesReducer,
  merchants: merchantsReducer,
  enterprises: enterprisesSlice,
  auth: AuthReducer,
  acquirerSettings: acquirerSettingsReducer,
  enterpriseSettings: enterpriseSettingsReducer,
  accounts: accountsReducer,
  cart: cartReducer,
  search: searchReducer,
  sort: sortReducer,
  filter: filterReducer,
  checkout: checkoutReducer,
  product: productReducer,
  modals: NiceModal.reducer as any,
  analytics: analyticsReducer,
  transactionRiskProfile: transactionRiskProfile,
  conversations: conversationsReducer,
  accessControl: accessControlReducer,
  merchantPreview: merchantPreviewReducer,
  unreadConversationSign: unreadConversationSignReducer,
  tableFilters: tableFiltersReducer,
  merchantFilters: merchantFiltersReducer,
  changelog: changelogReducer,
  uploadProgress: uploadProgressSlice,
  onboardingWizard: onboardingWizardReducer,
});
 
export const rootReducer: typeof combinedReducers = (state, action) => {
  Iif (action.type === "LOGOUT") {
    // Clean up async exports when user logs out
    cleanupAsyncExports();
    return combinedReducers(undefined, action);
  }
 
  // Clean up async exports when user switches account
  if (
    setSelectedAccount.match(action) &&
    state?.accounts?.selectedAccount?.id &&
    action.payload?.id &&
    state.accounts.selectedAccount.id !== action.payload.id
  ) {
    cleanupAsyncExports();
  }
 
  return combinedReducers(state, action);
};
 
const ENVIRONMENT = process.env.VITE_ENVIRONMENT;
 
export const store = configureStore({
  reducer: rootReducer,
  middleware: (getDefaultMiddleware) =>
    getDefaultMiddleware({
      immutableCheck: false,
      serializableCheck: false,
    }),
  devTools: ENVIRONMENT !== "production",
});
 
export type AppDispatch = typeof store.dispatch;