feat: show description text when making a message request

disabled conversation header functionality
pull/3083/head
William Grant 11 months ago
parent 98f5286df8
commit d6ad37ec38

@ -306,6 +306,7 @@
"messageRequestAcceptedOurs": "You have accepted $name$'s message request", "messageRequestAcceptedOurs": "You have accepted $name$'s message request",
"messageRequestAcceptedOursNoName": "You have accepted the message request", "messageRequestAcceptedOursNoName": "You have accepted the message request",
"messageRequestPending": "Your message request is currently pending", "messageRequestPending": "Your message request is currently pending",
"messageRequestPendingDescription": "You will be able to send voice messages and attachments once the recipient has approved this message request.",
"messageRequests": "Message Requests", "messageRequests": "Message Requests",
"messageRequestsAcceptDescription": "Sending a message to this user will automatically accept their message request and reveal your Account ID.", "messageRequestsAcceptDescription": "Sending a message to this user will automatically accept their message request and reveal your Account ID.",
"messagesHeader": "Conversations", "messagesHeader": "Conversations",

@ -1,6 +1,6 @@
import { useSelector } from 'react-redux'; import { useSelector } from 'react-redux';
import styled from 'styled-components'; import styled from 'styled-components';
import { useIsIncomingRequest } from '../../hooks/useParamSelector'; import { useIsIncomingRequest, useIsOutgoingRequest } from '../../hooks/useParamSelector';
import { import {
approveConvoAndSendResponse, approveConvoAndSendResponse,
declineConversationWithConfirm, declineConversationWithConfirm,
@ -9,7 +9,10 @@ import { getConversationController } from '../../session/conversations';
import { hasSelectedConversationIncomingMessages } from '../../state/selectors/conversations'; import { hasSelectedConversationIncomingMessages } from '../../state/selectors/conversations';
import { useSelectedConversationKey } from '../../state/selectors/selectedConversation'; import { useSelectedConversationKey } from '../../state/selectors/selectedConversation';
import { SessionButton, SessionButtonColor } from '../basic/SessionButton'; import { SessionButton, SessionButtonColor } from '../basic/SessionButton';
import { ConversationRequestExplanation } from './SubtleNotification'; import {
ConversationIncomingRequestExplanation,
ConversationOutgoingRequestExplanation,
} from './SubtleNotification';
const ConversationRequestBanner = styled.div` const ConversationRequestBanner = styled.div`
display: flex; display: flex;
@ -17,7 +20,7 @@ const ConversationRequestBanner = styled.div`
justify-content: center; justify-content: center;
padding: var(--margins-lg); padding: var(--margins-lg);
gap: var(--margins-lg); gap: var(--margins-lg);
background-color: var(--background-secondary-color); text-align: center;
`; `;
const ConversationBannerRow = styled.div` const ConversationBannerRow = styled.div`
@ -77,45 +80,46 @@ export const ConversationMessageRequestButtons = () => {
const hasIncomingMessages = useSelector(hasSelectedConversationIncomingMessages); const hasIncomingMessages = useSelector(hasSelectedConversationIncomingMessages);
const isIncomingRequest = useIsIncomingRequest(selectedConvoId); const isIncomingRequest = useIsIncomingRequest(selectedConvoId);
const isOutgoingRequest = useIsOutgoingRequest(selectedConvoId);
if (!selectedConvoId || !hasIncomingMessages) { if (!selectedConvoId || (!isIncomingRequest && !isOutgoingRequest)) {
return null;
}
if (!isIncomingRequest) {
return null; return null;
} }
return ( return (
<ConversationRequestBanner> <ConversationRequestBanner>
<StyledBlockUserText {isOutgoingRequest && !hasIncomingMessages ? (
onClick={() => { <ConversationOutgoingRequestExplanation />
handleDeclineAndBlockConversationRequest(selectedConvoId, selectedConvoId); ) : (
}} <>
data-testid="decline-and-block-message-request" <StyledBlockUserText
> onClick={() => {
{window.i18n('block')} handleDeclineAndBlockConversationRequest(selectedConvoId, selectedConvoId);
</StyledBlockUserText> }}
data-testid="decline-and-block-message-request"
<ConversationRequestExplanation /> >
{window.i18n('block')}
<ConversationBannerRow> </StyledBlockUserText>
<SessionButton <ConversationIncomingRequestExplanation />
onClick={async () => { <ConversationBannerRow>
await handleAcceptConversationRequest(selectedConvoId); <SessionButton
}} onClick={async () => {
text={window.i18n('accept')} await handleAcceptConversationRequest(selectedConvoId);
dataTestId="accept-message-request" }}
/> text={window.i18n('accept')}
<SessionButton dataTestId="accept-message-request"
buttonColor={SessionButtonColor.Danger} />
text={window.i18n('decline')} <SessionButton
onClick={() => { buttonColor={SessionButtonColor.Danger}
handleDeclineConversationRequest(selectedConvoId, selectedConvoId); text={window.i18n('decline')}
}} onClick={() => {
dataTestId="decline-message-request" handleDeclineConversationRequest(selectedConvoId, selectedConvoId);
/> }}
</ConversationBannerRow> dataTestId="decline-message-request"
/>
</ConversationBannerRow>
</>
)}
</ConversationRequestBanner> </ConversationRequestBanner>
); );
}; };

@ -1,6 +1,6 @@
import { useSelector } from 'react-redux'; import { useSelector } from 'react-redux';
import styled from 'styled-components'; import styled from 'styled-components';
import { useIsIncomingRequest } from '../../hooks/useParamSelector'; import { useIsIncomingRequest, useIsOutgoingRequest } from '../../hooks/useParamSelector';
import { import {
getSelectedHasMessages, getSelectedHasMessages,
hasSelectedConversationIncomingMessages, hasSelectedConversationIncomingMessages,
@ -29,11 +29,33 @@ const TextInner = styled.div`
max-width: 390px; max-width: 390px;
`; `;
/**
* This component is used to display a warning when the user is sending a message request.
*
*/
export const ConversationOutgoingRequestExplanation = () => {
const selectedConversation = useSelectedConversationKey();
const isOutgoingMessageRequest = useIsOutgoingRequest(selectedConversation);
const hasIncomingMessages = useSelector(hasSelectedConversationIncomingMessages);
const showMsgRequestUI = selectedConversation && isOutgoingMessageRequest;
if (!showMsgRequestUI || hasIncomingMessages) {
return null;
}
return (
<Container data-testid={'empty-conversation-control-message'} style={{ padding: 0 }}>
<TextInner>{window.i18n('messageRequestPendingDescription')}</TextInner>
</Container>
);
};
/** /**
* This component is used to display a warning when the user is responding to a message request. * This component is used to display a warning when the user is responding to a message request.
* *
*/ */
export const ConversationRequestExplanation = () => { export const ConversationIncomingRequestExplanation = () => {
const selectedConversation = useSelectedConversationKey(); const selectedConversation = useSelectedConversationKey();
const isIncomingMessageRequest = useIsIncomingRequest(selectedConversation); const isIncomingMessageRequest = useIsIncomingRequest(selectedConversation);

@ -3,6 +3,7 @@ import { isMessageSelectionMode } from '../../../state/selectors/conversations';
import { openRightPanel } from '../../../state/ducks/conversations'; import { openRightPanel } from '../../../state/ducks/conversations';
import { useIsOutgoingRequest } from '../../../hooks/useParamSelector';
import { useSelectedConversationKey } from '../../../state/selectors/selectedConversation'; import { useSelectedConversationKey } from '../../../state/selectors/selectedConversation';
import { Flex } from '../../basic/Flex'; import { Flex } from '../../basic/Flex';
import { AvatarHeader, CallButton } from './ConversationHeaderItems'; import { AvatarHeader, CallButton } from './ConversationHeaderItems';
@ -12,6 +13,8 @@ import { ConversationHeaderTitle } from './ConversationHeaderTitle';
export const ConversationHeaderWithDetails = () => { export const ConversationHeaderWithDetails = () => {
const isSelectionMode = useSelector(isMessageSelectionMode); const isSelectionMode = useSelector(isMessageSelectionMode);
const selectedConvoKey = useSelectedConversationKey(); const selectedConvoKey = useSelectedConversationKey();
const isOutgoingRequest = useIsOutgoingRequest(selectedConvoKey);
const dispatch = useDispatch(); const dispatch = useDispatch();
if (!selectedConvoKey) { if (!selectedConvoKey) {
@ -27,9 +30,9 @@ export const ConversationHeaderWithDetails = () => {
width="100%" width="100%"
flexGrow={1} flexGrow={1}
> >
<ConversationHeaderTitle /> <ConversationHeaderTitle showSubtitle={!isOutgoingRequest} />
{!isSelectionMode && ( {!isOutgoingRequest && !isSelectionMode && (
<Flex <Flex
container={true} container={true}
flexDirection="row" flexDirection="row"

@ -30,7 +30,13 @@ export type SubtitleStringsType = keyof Pick<
'notifications' | 'members' | 'disappearingMessages' 'notifications' | 'members' | 'disappearingMessages'
>; >;
export const ConversationHeaderTitle = () => { type ConversationHeaderTitleProps = {
showSubtitle?: boolean;
};
export const ConversationHeaderTitle = (props: ConversationHeaderTitleProps) => {
const { showSubtitle = true } = props;
const dispatch = useDispatch(); const dispatch = useDispatch();
const convoId = useSelectedConversationKey(); const convoId = useSelectedConversationKey();
const convoName = useSelectedNicknameOrProfileNameOrShortenedPubkey(); const convoName = useSelectedNicknameOrProfileNameOrShortenedPubkey();
@ -163,7 +169,7 @@ export const ConversationHeaderTitle = () => {
{convoName} {convoName}
</span> </span>
)} )}
{subtitleArray.indexOf(visibleSubtitle) > -1 && ( {showSubtitle && subtitleArray.indexOf(visibleSubtitle) > -1 && (
<ConversationHeaderSubtitle <ConversationHeaderSubtitle
currentSubtitle={visibleSubtitle} currentSubtitle={visibleSubtitle}
setCurrentSubtitle={setVisibleSubtitle} setCurrentSubtitle={setVisibleSubtitle}

@ -306,6 +306,7 @@ export type LocalizerKeys =
| 'messageRequestAcceptedOurs' | 'messageRequestAcceptedOurs'
| 'messageRequestAcceptedOursNoName' | 'messageRequestAcceptedOursNoName'
| 'messageRequestPending' | 'messageRequestPending'
| 'messageRequestPendingDescription'
| 'messageRequests' | 'messageRequests'
| 'messageRequestsAcceptDescription' | 'messageRequestsAcceptDescription'
| 'messageWillDisappear' | 'messageWillDisappear'

Loading…
Cancel
Save