Files
dydx-v4-web/src/state/appMiddleware.ts
T
2023-09-08 13:52:13 -07:00

45 lines
1.2 KiB
TypeScript

import type { PayloadAction } from '@reduxjs/toolkit';
import { AbacusApiStatus } from '@/constants/abacus';
import { DialogTypes } from '@/constants/dialogs';
import { setApiState, setSelectedNetwork } from '@/state/app';
import { resetPerpetualsState } from '@/state/perpetuals';
import abacusStateManager from '@/lib/abacus';
import { openDialog } from './dialogs';
import { getActiveDialog } from './dialogsSelectors';
export default (store: any) => (next: any) => async (action: PayloadAction<any>) => {
next(action);
const { type, payload } = action;
switch (type) {
case setSelectedNetwork.type: {
store.dispatch(resetPerpetualsState());
abacusStateManager.switchNetwork(payload);
break;
}
case setApiState.type: {
const { status } = payload ?? {};
const { type: activeDialogType } = getActiveDialog(store.getState()) ?? {};
if (status !== AbacusApiStatus.NORMAL && activeDialogType !== DialogTypes.ExchangeOffline) {
store.dispatch(
openDialog({
type: DialogTypes.ExchangeOffline,
dialogProps: { preventClose: import.meta.env.MODE === 'production' },
})
);
}
break;
}
default: {
break;
}
}
};