session-desktop/ts/state/selectors/call.ts

104 lines
3.0 KiB
TypeScript

import { createSelector } from 'reselect';
import { CallStateType } from '../ducks/call';
import { ConversationsStateType, ReduxConversationType } from '../ducks/conversations';
import { StateType } from '../reducer';
import { getConversations, getSelectedConversationKey } from './conversations';
export const getCallState = (state: StateType): CallStateType => state.call;
// --- INCOMING CALLS
export const getHasIncomingCallFrom = createSelector(getCallState, (state: CallStateType):
| string
| undefined => {
return state.ongoingWith && state.ongoingCallStatus === 'incoming'
? state.ongoingWith
: undefined;
});
export const getHasIncomingCall = createSelector(
getHasIncomingCallFrom,
(withConvo: string | undefined): boolean => !!withConvo
);
// --- 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;
}
);
export const getHasOngoingCallWithFocusedConvoIsOffering = createSelector(
getCallState,
getSelectedConversationKey,
(callState: CallStateType, selectedConvoPubkey?: string): boolean => {
if (
!selectedConvoPubkey ||
!callState.ongoingWith ||
callState.ongoingCallStatus !== 'offering' ||
selectedConvoPubkey !== callState.ongoingWith
) {
return false;
}
return true;
}
);
export const getHasOngoingCallWithFocusedConvosIsConnecting = createSelector(
getCallState,
getSelectedConversationKey,
(callState: CallStateType, selectedConvoPubkey?: string): boolean => {
if (
!selectedConvoPubkey ||
!callState.ongoingWith ||
callState.ongoingCallStatus !== 'connecting' ||
selectedConvoPubkey !== callState.ongoingWith
) {
return false;
}
return true;
}
);
export const getHasOngoingCallWithNonFocusedConvo = createSelector(
getHasOngoingCallWithPubkey,
getSelectedConversationKey,
(withPubkey, selectedPubkey) => {
return withPubkey && withPubkey !== selectedPubkey;
}
);
export const getCallIsInFullScreen = createSelector(
getCallState,
(callState): boolean => callState.callIsInFullScreen
);