react-native-unit-components
Version:
Unit React Native components
116 lines (95 loc) • 3.7 kB
text/typescript
/* eslint-disable @typescript-eslint/no-explicit-any */
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
import type { RootState } from '../store';
import type { UNAccountData, UNCardData, UNPayeeCounterparty } from '../types/shared';
import type { ActivityFiltersChangedEvent } from '../messages/webMessages/activityMessage';
import type { MultiFactorAuthenticationFinishedEvent, RequestRefreshEvent } from '../messages/webMessages/unitMessages';
import type { BottomSheetNativeMessage } from '../messages/nativeMessages/bottomSheetMessage';
import type { CardMessage } from '../messages/webMessages/cardMessage';
import type { AccountMessage } from '../messages/webMessages/accountMessage';
import type { ActivityMessage } from '../messages/webMessages/activityMessage';
import type { UnitMessage } from '../messages/webMessages/unitMessages';
import type { MultipleCardsMessage } from '../messages/webMessages/multipleCardsMessage';
import { BottomSheetRenderingMessage } from '../messages/nativeMessages/bottomSheetMessage';
import { PageMessage } from '../messages/webMessages/pageMessage';
import { OpenPlaidEvent, PlaidMessage } from '../messages/webMessages/plaidMessages';
import { PayeeManagementMessage } from '../messages/webMessages/payeeManagementMessage';
type EmptyObj = Record<PropertyKey, never>;
type MultipleCardsCardClickedEventState = {
key: MultipleCardsMessage.UNIT_MULTIPLE_CARDS_CARD_CLICKED,
data: UNCardData
}
type CardStatusChangedEventState = {
key: CardMessage.CARD_STATUS_CHANGED,
data: UNCardData
}
type CardActivatedEventState = {
key: CardMessage.CARD_ACTIVATED,
data: UNCardData
}
type AccountChangedEventState = {
key: AccountMessage.UNIT_ACCOUNT_CHANGED,
data: UNAccountData
}
type ActivityFiltersChangedEventState = {
key: ActivityMessage.UNIT_ACTIVITY_FILTERS_CHANGED
data: ActivityFiltersChangedEvent
}
type RequestCloseBottomSheetFlowEventState = {
key: UnitMessage.UNIT_REQUEST_CLOSE_FLOW,
data: EmptyObj
}
type RequestRenderingBottomSheetEventState = {
key: BottomSheetNativeMessage.REQUEST_RENDERING,
data: BottomSheetRenderingMessage
}
type RequestRefreshEventState = {
key: UnitMessage.UNIT_REQUEST_REFRESH,
data: RequestRefreshEvent
}
type MultiFactorAuthFinishedEventState = {
key: UnitMessage.UNIT_MULTI_FACTOR_AUTH_FINISHED,
data: MultiFactorAuthenticationFinishedEvent
}
type ComponentHeightEventState = {
key: PageMessage.PAGE_HEIGHT
data: number | string
}
type OpenPlaidEventState = {
key: PlaidMessage.UNIT_OPEN_PLAID,
data: OpenPlaidEvent
}
type PayeeCounterpartyDeletedEventState = {
key: PayeeManagementMessage.UNIT_COUNTERPARTY_DELETED,
data: UNPayeeCounterparty
}
//currently left state suffixes to avoid the duplication of the event names
type SharedEvent =
| CardStatusChangedEventState
| CardActivatedEventState
| MultipleCardsCardClickedEventState
| AccountChangedEventState
| ActivityFiltersChangedEventState
| RequestCloseBottomSheetFlowEventState
| RequestRenderingBottomSheetEventState
| RequestRefreshEventState
| MultiFactorAuthFinishedEventState
| OpenPlaidEventState
| ComponentHeightEventState
| PayeeCounterpartyDeletedEventState
type SharedEventsState = {
event?: SharedEvent
}
const initialState: SharedEventsState = {};
const SharedEventsSlice = createSlice({
name: 'SharedEvents',
initialState: initialState,
reducers: {
setEvent(state, action: PayloadAction<SharedEvent>) {
state.event = action.payload;
},
},
});
export const { setEvent } = SharedEventsSlice.actions;
export const selectSharedEvents = (state: RootState) => state.sharedEvents;
export default SharedEventsSlice.reducer;