UNPKG

react-native-unit-components

Version:

Unit React Native components

116 lines (95 loc) 3.7 kB
/* 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;