import { createSelector } from '@reduxjs/toolkit'; import { CallStateType, CallStatusEnum } from '../ducks/call'; import { ConversationsStateType, ReduxConversationType } from '../ducks/conversations'; import { StateType } from '../reducer'; import { getConversations, getSelectedConversationKey } from './conversations'; const getCallState = (state: StateType): CallStateType => state.call; // --- INCOMING CALLS export const getHasIncomingCallFrom = (state: StateType) => { return state.call.ongoingWith && state.call.ongoingCallStatus === 'incoming' ? state.call.ongoingWith : undefined; }; export const getHasIncomingCall = (state: StateType) => !!getHasIncomingCallFrom(state); // --- ONGOING CALLS export const getHasOngoingCallWith = createSelector( getConversations, getCallState, (convos: ConversationsStateType, callState: CallStateType): ReduxConversationType | undefined => { if ( callState.ongoingWith && (callState.ongoingCallStatus === 'connecting' || callState.ongoingCallStatus === 'offering' || callState.ongoingCallStatus === 'ongoing') ) { return convos.conversationLookup[callState.ongoingWith] || undefined; } return undefined; } ); export const getHasOngoingCall = createSelector( getHasOngoingCallWith, (withConvo: ReduxConversationType | undefined): boolean => !!withConvo ); export const getHasOngoingCallWithPubkey = createSelector( getHasOngoingCallWith, (withConvo: ReduxConversationType | undefined): string | undefined => withConvo?.id ); export const getHasOngoingCallWithFocusedConvo = createSelector( getHasOngoingCallWithPubkey, getSelectedConversationKey, (withPubkey, selectedPubkey) => { return withPubkey && withPubkey === selectedPubkey; } ); const getCallStateWithFocusedConvo = (state: StateType): CallStatusEnum => { const selected = state.conversations.selectedConversation; const ongoingWith = state.call.ongoingWith; if (selected && ongoingWith && selected === ongoingWith) { return state.call.ongoingCallStatus; } return undefined; }; export const getCallWithFocusedConvoIsOffering = createSelector( getCallStateWithFocusedConvo, (callState: CallStatusEnum): boolean => { return callState === 'offering'; } ); export const getCallWithFocusedConvosIsConnecting = createSelector( getCallStateWithFocusedConvo, (callState: CallStatusEnum): boolean => { return callState === 'connecting'; } ); export const getCallWithFocusedConvosIsConnected = createSelector( getCallStateWithFocusedConvo, (callState: CallStatusEnum): boolean => { return callState === 'ongoing'; } ); export const getHasOngoingCallWithNonFocusedConvo = createSelector( getHasOngoingCallWithPubkey, getSelectedConversationKey, (withPubkey, selectedPubkey) => { return withPubkey && withPubkey !== selectedPubkey; } ); export const getCallIsInFullScreen = createSelector( getCallState, (callState): boolean => callState.callIsInFullScreen );