fix: rename useConversationInteractionState to useConversationInteractionPropsById

extracted useLastMessageFromConvo to param selectors and renamed to useLastMessage, moved InteractionItem into MessageItem
pull/2789/head
William Grant 2 years ago
parent 96fcbf1345
commit 45ed2d5c05

@ -14,7 +14,7 @@ import {
ConversationInteractionType, ConversationInteractionType,
updateConversationInteractionState, updateConversationInteractionState,
} from '../../interactions/conversationInteractions'; } from '../../interactions/conversationInteractions';
import { useConversationInteractionState } from '../../hooks/useParamSelector'; import { useConversationInteractionPropsById } from '../../hooks/useParamSelector';
// NOTE could be other confirmation statuses and types in future // NOTE could be other confirmation statuses and types in future
export type ConfirmationStatus = ConversationInteractionStatus | undefined; export type ConfirmationStatus = ConversationInteractionStatus | undefined;
@ -71,7 +71,7 @@ export const SessionConfirm = (props: SessionConfirmDialogProps) => {
conversationId, conversationId,
} = props; } = props;
const interactionProps = useConversationInteractionState(conversationId); const interactionProps = useConversationInteractionPropsById(conversationId);
const [isLoading, setIsLoading] = useState(false); const [isLoading, setIsLoading] = useState(false);

@ -15,7 +15,6 @@ import { updateUserDetailsModal } from '../../../state/ducks/modalDialog';
import _, { isNil } from 'lodash'; import _, { isNil } from 'lodash';
import { import {
useAvatarPath, useAvatarPath,
useConversationInteractionState,
useConversationUsername, useConversationUsername,
useHasUnread, useHasUnread,
useIsBlocked, useIsBlocked,
@ -28,7 +27,6 @@ import { MemoConversationListItemContextMenu } from '../../menu/ConversationList
import { ContextConversationProvider, useConvoIdFromContext } from './ConvoIdContext'; import { ContextConversationProvider, useConvoIdFromContext } from './ConvoIdContext';
import { ConversationListItemHeaderItem } from './HeaderItem'; import { ConversationListItemHeaderItem } from './HeaderItem';
import { MessageItem } from './MessageItem'; import { MessageItem } from './MessageItem';
import { InteractionItem } from './InteractionItem';
// tslint:disable-next-line: no-empty-interface // tslint:disable-next-line: no-empty-interface
export type ConversationListItemProps = Pick<ReduxConversationType, 'id'>; export type ConversationListItemProps = Pick<ReduxConversationType, 'id'>;
@ -82,7 +80,6 @@ const ConversationListItem = (props: Props) => {
let isBlocked = useIsBlocked(conversationId); let isBlocked = useIsBlocked(conversationId);
const isSearch = useSelector(isSearching); const isSearch = useSelector(isSearching);
const selectedConvo = useSelectedConversationKey(); const selectedConvo = useSelectedConversationKey();
const interactionProps = useConversationInteractionState(conversationId);
const isSelectedConvo = conversationId === selectedConvo && !isNil(selectedConvo); const isSelectedConvo = conversationId === selectedConvo && !isNil(selectedConvo);
@ -132,7 +129,7 @@ const ConversationListItem = (props: Props) => {
<AvatarItem /> <AvatarItem />
<div className="module-conversation-list-item__content"> <div className="module-conversation-list-item__content">
<ConversationListItemHeaderItem /> <ConversationListItemHeaderItem />
{interactionProps ? <InteractionItem {...interactionProps} /> : <MessageItem />} <MessageItem />
</div> </div>
</div> </div>
<Portal> <Portal>

@ -3,10 +3,11 @@ import { isEmpty } from 'lodash';
import React from 'react'; import React from 'react';
import { useSelector } from 'react-redux'; import { useSelector } from 'react-redux';
import { import {
useConversationPropsById, useConversationInteractionPropsById,
useHasUnread, useHasUnread,
useIsPrivate, useIsPrivate,
useIsTyping, useIsTyping,
useLastMessage,
} from '../../../hooks/useParamSelector'; } from '../../../hooks/useParamSelector';
import { isSearching } from '../../../state/selectors/search'; import { isSearching } from '../../../state/selectors/search';
import { getIsMessageRequestOverlayShown } from '../../../state/selectors/section'; import { getIsMessageRequestOverlayShown } from '../../../state/selectors/section';
@ -14,18 +15,11 @@ import { TypingAnimation } from '../../conversation/TypingAnimation';
import { MessageBody } from '../../conversation/message/message-content/MessageBody'; import { MessageBody } from '../../conversation/message/message-content/MessageBody';
import { OutgoingMessageStatus } from '../../conversation/message/message-content/OutgoingMessageStatus'; import { OutgoingMessageStatus } from '../../conversation/message/message-content/OutgoingMessageStatus';
import { useConvoIdFromContext } from './ConvoIdContext'; import { useConvoIdFromContext } from './ConvoIdContext';
import { InteractionItem } from './InteractionItem';
function useLastMessageFromConvo(convoId: string) {
const convoProps = useConversationPropsById(convoId);
if (!convoProps) {
return null;
}
return convoProps.lastMessage;
}
export const MessageItem = () => { export const MessageItem = () => {
const conversationId = useConvoIdFromContext(); const conversationId = useConvoIdFromContext();
const lastMessage = useLastMessageFromConvo(conversationId); const lastMessage = useLastMessage(conversationId);
const isGroup = !useIsPrivate(conversationId); const isGroup = !useIsPrivate(conversationId);
const hasUnread = useHasUnread(conversationId); const hasUnread = useHasUnread(conversationId);
@ -34,6 +28,12 @@ export const MessageItem = () => {
const isSearchingMode = useSelector(isSearching); const isSearchingMode = useSelector(isSearching);
const interactionProps = useConversationInteractionPropsById(conversationId);
if (!isConvoTyping && interactionProps) {
return <InteractionItem {...interactionProps} />;
}
if (!lastMessage && !isConvoTyping) { if (!lastMessage && !isConvoTyping) {
return null; return null;
} }

@ -269,7 +269,15 @@ export function useIsTyping(conversationId?: string): boolean {
return useConversationPropsById(conversationId)?.isTyping || false; return useConversationPropsById(conversationId)?.isTyping || false;
} }
export function useConversationInteractionState( export function useLastMessage(convoId: string) {
const convoProps = useConversationPropsById(convoId);
if (!convoProps) {
return null;
}
return convoProps.lastMessage;
}
export function useConversationInteractionPropsById(
conversationId?: string conversationId?: string
): ConversationInteractionProps | null { ): ConversationInteractionProps | null {
if (!conversationId) { if (!conversationId) {
@ -277,19 +285,13 @@ export function useConversationInteractionState(
} }
const convoProps = useConversationPropsById(conversationId); const convoProps = useConversationPropsById(conversationId);
if (!convoProps) {
if (!convoProps || !convoProps.interactionType || !convoProps.interactionStatus) {
return null; return null;
} }
const interactionType = convoProps.interactionType; const interactionType = convoProps.interactionType;
const interactionStatus = convoProps.interactionStatus; const interactionStatus = convoProps.interactionStatus;
if (!interactionType || !interactionStatus) {
window.log.warn(
`useConversationInteractionState() missing interactionType or interactionStatus`
);
return null;
}
return { conversationId, interactionType, interactionStatus }; return { conversationId, interactionType, interactionStatus };
} }

Loading…
Cancel
Save