UNPKG

react-native-unit-components

Version:

Unit React Native components

129 lines (106 loc) 4.14 kB
/* eslint-disable @typescript-eslint/no-explicit-any */ import { createSlice, PayloadAction } from '@reduxjs/toolkit'; import type { RootState } from '../store'; import type { UNAccount, UNCard } from '../types/shared'; import type { ActivityFiltersChangedEvent } from '../messages/webMessages/activityMessage'; import type { MultiFactorAuthenticationFinishedEvent, RequestRefreshEvent } from '../messages/webMessages/unitComponentsMessages'; import type { BottomSheetNativeMessage } from '../messages/nativeMessages/bottomSheetMessage'; import type { CardCreatedEvent, CardMessage } from '../messages/webMessages/cardMessage'; import type { AccountMessage } from '../messages/webMessages/accountMessage'; import type { ActivityMessage } from '../messages/webMessages/activityMessage'; import type { UnitComponentsMessage } from '../messages/webMessages/unitComponentsMessages'; import type { MultipleCardsFiltersChangedEvent, 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'; import { UNCounterparty } from '../types/shared/counterparty.types'; type EmptyObj = Record<PropertyKey, never>; type MultipleCardsCardClickedEventState = { key: MultipleCardsMessage.UNIT_MULTIPLE_CARDS_CARD_CLICKED, data: UNCard } type CardStatusChangedEventState = { key: CardMessage.CARD_STATUS_CHANGED, data: UNCard } type CardActivatedEventState = { key: CardMessage.CARD_ACTIVATED, data: UNCard } type AccountChangedEventState = { key: AccountMessage.UNIT_ACCOUNT_CHANGED, data: UNAccount } type ActivityFiltersChangedEventState = { key: ActivityMessage.UNIT_ACTIVITY_FILTERS_CHANGED data: ActivityFiltersChangedEvent } type MultipleCardsFiltersChangedEventState = { key: MultipleCardsMessage.UNIT_MULTIPLE_CARDS_FILTERS_CHANGED data: MultipleCardsFiltersChangedEvent } type CardCreatedEventState = { key: CardMessage.CARD_CREATED data: CardCreatedEvent } type RequestCloseBottomSheetFlowEventState = { key: UnitComponentsMessage.UNIT_REQUEST_CLOSE_FLOW, data: EmptyObj } type RequestRenderingBottomSheetEventState = { key: BottomSheetNativeMessage.REQUEST_RENDERING, data: BottomSheetRenderingMessage } type RequestRefreshEventState = { key: UnitComponentsMessage.UNIT_REQUEST_REFRESH, data: RequestRefreshEvent } type MultiFactorAuthFinishedEventState = { key: UnitComponentsMessage.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: UNCounterparty } //currently left state suffixes to avoid the duplication of the event names type SharedEvent = | CardStatusChangedEventState | CardActivatedEventState | CardCreatedEventState | AccountChangedEventState | ActivityFiltersChangedEventState | MultipleCardsCardClickedEventState | MultipleCardsFiltersChangedEventState | 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;