You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			95 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			TypeScript
		
	
| import { createSelector } from 'reselect';
 | |
| 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
 | |
| );
 |