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.
		
		
		
		
		
			
		
			
				
	
	
		
			96 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			96 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			TypeScript
		
	
import { createSelector } from '@reduxjs/toolkit';
 | 
						|
import { CallStateType, CallStatusEnum } from '../ducks/call';
 | 
						|
import { ConversationsStateType, ReduxConversationType } from '../ducks/conversations';
 | 
						|
import { StateType } from '../reducer';
 | 
						|
import { getConversations } from './conversations';
 | 
						|
import { getSelectedConversationKey } from './selectedConversation';
 | 
						|
 | 
						|
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
 | 
						|
);
 |