From 1ecbfa0334fc5143078029c903fb654bbd28a08b Mon Sep 17 00:00:00 2001 From: yash-signal Date: Tue, 18 Mar 2025 12:35:09 -0500 Subject: [PATCH] Message Request UI Improvements (#9938) --- _locales/en/messages.json | 88 ++++++- .../error-triangle-fill-compact-bold.svg | 1 + .../v3/group/group-questionmark-compact.svg | 8 + images/icons/v3/help/help-light.svg | 1 + images/icons/v3/invite/invite.svg | 1 + .../v3/person/person-questionmark-compact.svg | 6 + .../v3/person/person-questionmark-light.svg | 6 + images/safety-tips/safety-tip-business.png | Bin 16923 -> 0 bytes images/safety-tips/safety-tip-business.webp | Bin 0 -> 7324 bytes images/safety-tips/safety-tip-crypto.png | Bin 22673 -> 0 bytes images/safety-tips/safety-tip-crypto.webp | Bin 0 -> 10808 bytes images/safety-tips/safety-tip-fake.webp | Bin 0 -> 11198 bytes images/safety-tips/safety-tip-links.png | Bin 12865 -> 0 bytes images/safety-tips/safety-tip-links.webp | Bin 0 -> 6838 bytes images/safety-tips/safety-tip-vague.png | Bin 10804 -> 0 bytes images/safety-tips/safety-tip-vague.webp | Bin 0 -> 4606 bytes stylesheets/components/AboutContactModal.scss | 23 +- .../components/ConversationDetails.scss | 190 +++++--------- stylesheets/components/ConversationHero.scss | 241 +++++++++++------- .../components/ProfileNameWarningModal.scss | 51 ++++ stylesheets/manifest.scss | 1 + ts/components/CompositionArea.tsx | 3 + ts/components/DialogUpdate.tsx | 6 +- ts/components/GlobalModalContainer.tsx | 10 + ts/components/SafetyTipsModal.tsx | 14 +- .../AboutContactModal.stories.tsx | 12 + .../conversation/AboutContactModal.tsx | 40 ++- .../ChatSessionRefreshedNotification.tsx | 10 +- .../ContactSpoofingReviewDialog.tsx | 1 + .../conversation/ConversationHero.stories.tsx | 42 +++ .../conversation/ConversationHero.tsx | 230 +++++++++++------ .../conversation/MessageRequestActions.tsx | 13 +- .../MessageRequestActionsConfirmation.tsx | 25 ++ .../ProfileNameWarningModal.stories.tsx | 30 +++ .../conversation/ProfileNameWarningModal.tsx | 70 +++++ .../conversation/Timeline.stories.tsx | 1 + .../ConversationDetails.tsx | 77 ++++++ .../ConversationDetailsIcon.tsx | 4 + ts/models/conversations.ts | 1 + ts/state/ducks/globalModals.ts | 34 +++ ts/state/smart/AboutContactModal.tsx | 22 ++ ts/state/smart/CompositionArea.tsx | 1 + ts/state/smart/GlobalModalContainer.tsx | 12 + ts/state/smart/HeroRow.tsx | 47 +++- ts/state/smart/ProfileNameWarningModal.tsx | 34 +++ ts/test-mock/helpers.ts | 16 +- .../messaging/unknown_contact_test.ts | 3 +- ts/test-mock/pnp/accept_gv2_invite_test.ts | 10 +- ts/test-mock/pnp/pni_signature_test.ts | 6 +- ts/test-mock/rate-limit/viewed_test.ts | 29 +-- ts/test-mock/storage/message_request_test.ts | 5 + ts/util/getLocalizedUrl.ts | 26 ++ 52 files changed, 1099 insertions(+), 352 deletions(-) create mode 100644 images/icons/v3/error/error-triangle-fill-compact-bold.svg create mode 100644 images/icons/v3/group/group-questionmark-compact.svg create mode 100644 images/icons/v3/help/help-light.svg create mode 100644 images/icons/v3/invite/invite.svg create mode 100644 images/icons/v3/person/person-questionmark-compact.svg create mode 100644 images/icons/v3/person/person-questionmark-light.svg delete mode 100644 images/safety-tips/safety-tip-business.png create mode 100644 images/safety-tips/safety-tip-business.webp delete mode 100644 images/safety-tips/safety-tip-crypto.png create mode 100644 images/safety-tips/safety-tip-crypto.webp create mode 100644 images/safety-tips/safety-tip-fake.webp delete mode 100644 images/safety-tips/safety-tip-links.png create mode 100644 images/safety-tips/safety-tip-links.webp delete mode 100644 images/safety-tips/safety-tip-vague.png create mode 100644 images/safety-tips/safety-tip-vague.webp create mode 100644 stylesheets/components/ProfileNameWarningModal.scss create mode 100644 ts/components/conversation/ProfileNameWarningModal.stories.tsx create mode 100644 ts/components/conversation/ProfileNameWarningModal.tsx create mode 100644 ts/state/smart/ProfileNameWarningModal.tsx create mode 100644 ts/util/getLocalizedUrl.ts diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 59e13f5dec..372b863f6f 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -2419,6 +2419,22 @@ "messageformat": "Message", "description": "In conversation details, label for button to switch to the conversation view in order to draft a message in that converation" }, + "icu:ConversationDetails--help-section": { + "messageformat": "Help", + "description": "Title of the help section in the conversation details screen" + }, + "icu:ConversationDetails--support-center": { + "messageformat": "Support Center", + "description": "Label for the support center link in conversation details" + }, + "icu:ConversationDetails--contact-us": { + "messageformat": "Contact us", + "description": "Label for the contact us link in conversation details" + }, + "icu:ConversationDetails--donate": { + "messageformat": "Donate to Signal", + "description": "Label for the donation link in conversation details" + }, "icu:SafetyNumberNotification__viewSafetyNumber": { "messageformat": "View Safety Number", "description": "In conversation, safety number change notification, label for button to view safety number, opens safety number modal" @@ -3635,6 +3651,14 @@ "messageformat": "Be careful when accepting message requests from people you don’t know. Watch out for:", "description": "Description of the safety tips modal" }, + "icu:SafetyTipsModal__TipTitle--Fake": { + "messageformat": "Fake names and accounts", + "description": "Title of the fake name safety tip" + }, + "icu:SafetyTipsModal__TipDescription--Fake": { + "messageformat": "Signal will never contact you for your registration code or PIN. Be cautious of requests that impersonate others. Profile names are chosen by their account holder and aren't verified.", + "description": "Description of the fake name safety tip" + }, "icu:SafetyTipsModal__TipTitle--Crypto": { "messageformat": "Crypto or money scams", "description": "Title of the crypto safety tip" @@ -3811,6 +3835,14 @@ "messageformat": "Accept", "description": "Shown as a button to let the user accept a message request" }, + "icu:MessageRequests--accept-confirm-title": { + "messageformat": "Accept Request?", + "description": "Title of confirmation dialog shown before accepting a message request" + }, + "icu:MessageRequests--accept-confirm-body": { + "messageformat": "Review requests carefully. Profile names are chosen by their account owner and aren't verified.", + "description": "Body text of confirmation dialog shown before accepting a message request" + }, "icu:MessageRequests--continue": { "messageformat": "Continue", "description": "Shown as a button to share your profile, necessary to continue messaging in a conversation" @@ -3827,6 +3859,26 @@ "messageformat": "{count, plural, one {# member} other {# members}}", "description": "Specifies the number of members in a group conversation" }, + "icu:ConversationHero--review-carefully": { + "messageformat": "Review carefully", + "description": "Label shown in conversation hero to advise users to review the conversation carefully" + }, + "icu:ConversationHero--group-names": { + "messageformat": "Group names are not verified", + "description": "Label for group names in the name verification warning in conversation hero" + }, + "icu:ConversationHero--profile-names": { + "messageformat": "Profile names are not verified", + "description": "Label for profile names in the name verification warning in conversation hero" + }, + "icu:ConversationHero--signal-official-chat": { + "messageformat": "This is the official and only chat from Signal", + "description": "Text indicating that this is the official Signal conversation" + }, + "icu:ConversationHero--release-notes": { + "messageformat": "Keep up to date with news and release notes.", + "description": "Text explaining the purpose of the Signal official conversation" + }, "icu:member-of-1-group": { "messageformat": "Member of {group}", "description": "Shown in the conversation hero to indicate this user is a member of a mutual group" @@ -5823,10 +5875,6 @@ "messageformat": "Use this link to join a Signal call: {url}", "description": "Draft message text for sharing a call link" }, - "icu:MessageRequestWarning__learn-more": { - "messageformat": "Learn more", - "description": "Shown on the message request warning. Clicking this button will open a dialog with more information" - }, "icu:MessageRequestWarning__safety-tips": { "messageformat": "Safety Tips", "description": "Shown on the message request warning. Clicking this button will open a dialog with safety tips" @@ -8077,6 +8125,38 @@ "messageformat": "To change this setting, set “Who can see my number” to “Nobody”.", "description": "A toast displayed when user clicks disabled option in settings window" }, + "icu:ProfileNameWarningModal__description--direct": { + "messageformat": "Profile names on Signal are chosen by their account holder:", + "description": "Description of how profile names work in the profile name warning modal for direct conversations" + }, + "icu:ProfileNameWarningModal__list--item1--direct": { + "messageformat": "Profile names aren't verified", + "description": "First list item in profile name warning modal for direct conversations" + }, + "icu:ProfileNameWarningModal__list--item2--direct": { + "messageformat": "Be cautious of accounts that impersonate others", + "description": "Second list item in profile name warning modal for direct conversations" + }, + "icu:ProfileNameWarningModal__list--item3--direct": { + "messageformat": "Don't share personal information with people you don't know", + "description": "Third list item in profile name warning modal for direct conversations" + }, + "icu:ProfileNameWarningModal__description--group": { + "messageformat": "Group names are chosen by members of the group.", + "description": "Description of how group names work in the profile name warning modal for group conversations" + }, + "icu:ProfileNameWarningModal__list--item1--group": { + "messageformat": "Be cautious of groups that impersonate organizations and businesses", + "description": "First list item in profile name warning modal for group conversations" + }, + "icu:ProfileNameWarningModal__list--item2--group": { + "messageformat": "Profile names of members in groups are not verified", + "description": "Second list item in profile name warning modal for group conversations" + }, + "icu:ProfileNameWarningModal__list--item3--group": { + "messageformat": "Don't share personal information with people you don't know", + "description": "Third list item in profile name warning modal for group conversations" + }, "icu:WhatsNew__modal-title": { "messageformat": "What's New", "description": "Title for the whats new modal" diff --git a/images/icons/v3/error/error-triangle-fill-compact-bold.svg b/images/icons/v3/error/error-triangle-fill-compact-bold.svg new file mode 100644 index 0000000000..81036d1fea --- /dev/null +++ b/images/icons/v3/error/error-triangle-fill-compact-bold.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/v3/group/group-questionmark-compact.svg b/images/icons/v3/group/group-questionmark-compact.svg new file mode 100644 index 0000000000..3ae627af56 --- /dev/null +++ b/images/icons/v3/group/group-questionmark-compact.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/images/icons/v3/help/help-light.svg b/images/icons/v3/help/help-light.svg new file mode 100644 index 0000000000..a5f73c334f --- /dev/null +++ b/images/icons/v3/help/help-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/v3/invite/invite.svg b/images/icons/v3/invite/invite.svg new file mode 100644 index 0000000000..be289305cd --- /dev/null +++ b/images/icons/v3/invite/invite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/v3/person/person-questionmark-compact.svg b/images/icons/v3/person/person-questionmark-compact.svg new file mode 100644 index 0000000000..3609b4ddfb --- /dev/null +++ b/images/icons/v3/person/person-questionmark-compact.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/images/icons/v3/person/person-questionmark-light.svg b/images/icons/v3/person/person-questionmark-light.svg new file mode 100644 index 0000000000..3228751d06 --- /dev/null +++ b/images/icons/v3/person/person-questionmark-light.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/images/safety-tips/safety-tip-business.png b/images/safety-tips/safety-tip-business.png deleted file mode 100644 index 5e6254b6d337893c39e6fe6b5e0acaa4452b9135..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16923 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 diff --git a/images/safety-tips/safety-tip-business.webp b/images/safety-tips/safety-tip-business.webp new file mode 100644 index 0000000000000000000000000000000000000000..d163e2fe184479da2e72e2ee57886a8788503e25 GIT binary patch literal 7324 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 literal 0 HcmV?d00001 diff --git a/images/safety-tips/safety-tip-crypto.png b/images/safety-tips/safety-tip-crypto.png deleted file mode 100644 index 4209a052b3c4962429aba121086814d1b80b4492..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22673 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�~(gpx9raoeHoy|Ge|M7z% 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 literal 0 HcmV?d00001 diff --git a/images/safety-tips/safety-tip-fake.webp b/images/safety-tips/safety-tip-fake.webp new file mode 100644 index 0000000000000000000000000000000000000000..6179e5345f35e765e38761be83dc67dc1d4f3fcb GIT binary patch literal 11198 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 a|JXo&yjlH7NGc}gT3{%EPXMXE&Hn@Ba_h4I literal 0 HcmV?d00001 diff --git a/images/safety-tips/safety-tip-links.png b/images/safety-tips/safety-tip-links.png deleted file mode 100644 index 44ae839630faa55195559295daeb353b91fb0e9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12865 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 P&2J!R8nGulyq){2&gE6 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 diff --git a/images/safety-tips/safety-tip-vague.webp b/images/safety-tips/safety-tip-vague.webp new file mode 100644 index 0000000000000000000000000000000000000000..830ca29aa12a2986a9ccc4310ceaeb752a7ced02 GIT binary patch literal 4606 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 cancelRecording: () => unknown; completeRecording: ( conversationId: string, @@ -350,6 +351,7 @@ export const CompositionArea = memo(function CompositionArea({ // SMS-only contacts isSmsOnlyOrUnregistered, isFetchingUUID, + sharedGroupNames, renderSmartCompositionRecording, renderSmartCompositionRecordingDraft, // Selected messages @@ -893,6 +895,7 @@ export const CompositionArea = memo(function CompositionArea({ isBlocked={isBlocked} isHidden={isHidden} isReported={isReported} + sharedGroupNames={sharedGroupNames} acceptConversation={acceptConversation} reportSpam={reportSpam} blockAndReportSpam={blockAndReportSpam} diff --git a/ts/components/DialogUpdate.tsx b/ts/components/DialogUpdate.tsx index f6632b3d2f..ad50a7e25c 100644 --- a/ts/components/DialogUpdate.tsx +++ b/ts/components/DialogUpdate.tsx @@ -11,12 +11,16 @@ import { I18n } from './I18n'; import { LeftPaneDialog } from './LeftPaneDialog'; import type { WidthBreakpoint } from './_util'; import { formatFileSize } from '../util/formatFileSize'; +import { getLocalizedUrl } from '../util/getLocalizedUrl'; function contactSupportLink(parts: ReactNode): JSX.Element { + const localizedSupportLink = getLocalizedUrl( + 'https://support.signal.org/hc/LOCALE/requests/new?desktop' + ); return ( diff --git a/ts/components/GlobalModalContainer.tsx b/ts/components/GlobalModalContainer.tsx index 45bb2dc9e4..d3c5b41903 100644 --- a/ts/components/GlobalModalContainer.tsx +++ b/ts/components/GlobalModalContainer.tsx @@ -133,6 +133,9 @@ export type PropsType = { // UsernameOnboarding usernameOnboardingState: UsernameOnboardingState; renderUsernameOnboarding: () => JSX.Element; + isProfileNameWarningModalVisible: boolean; + profileNameWarningModalConversationType?: string; + renderProfileNameWarningModal: () => JSX.Element; }; export function GlobalModalContainer({ @@ -220,6 +223,9 @@ export function GlobalModalContainer({ // UsernameOnboarding usernameOnboardingState, renderUsernameOnboarding, + // ProfileNameWarningModal + isProfileNameWarningModalVisible, + renderProfileNameWarningModal, }: PropsType): JSX.Element | null { // We want the following dialogs to show in this order: // 1. Errors @@ -296,6 +302,10 @@ export function GlobalModalContainer({ return renderProfileEditor(); } + if (isProfileNameWarningModalVisible) { + return renderProfileNameWarningModal(); + } + if (isShortcutGuideModalVisible) { return renderShortcutGuideModal(); } diff --git a/ts/components/SafetyTipsModal.tsx b/ts/components/SafetyTipsModal.tsx index 0f798db5a5..04a6b8f39c 100644 --- a/ts/components/SafetyTipsModal.tsx +++ b/ts/components/SafetyTipsModal.tsx @@ -19,29 +19,35 @@ export function SafetyTipsModal({ }: SafetyTipsModalProps): JSX.Element { const pages = useMemo(() => { return [ + { + key: 'fake', + title: i18n('icu:SafetyTipsModal__TipTitle--Fake'), + description: i18n('icu:SafetyTipsModal__TipDescription--Fake'), + imageUrl: 'images/safety-tips/safety-tip-fake.webp', + }, { key: 'crypto', title: i18n('icu:SafetyTipsModal__TipTitle--Crypto'), description: i18n('icu:SafetyTipsModal__TipDescription--Crypto'), - imageUrl: 'images/safety-tips/safety-tip-crypto.png', + imageUrl: 'images/safety-tips/safety-tip-crypto.webp', }, { key: 'vague', title: i18n('icu:SafetyTipsModal__TipTitle--Vague'), description: i18n('icu:SafetyTipsModal__TipDescription--Vague'), - imageUrl: 'images/safety-tips/safety-tip-vague.png', + imageUrl: 'images/safety-tips/safety-tip-vague.webp', }, { key: 'links', title: i18n('icu:SafetyTipsModal__TipTitle--Links'), description: i18n('icu:SafetyTipsModal__TipDescription--Links'), - imageUrl: 'images/safety-tips/safety-tip-links.png', + imageUrl: 'images/safety-tips/safety-tip-links.webp', }, { key: 'business', title: i18n('icu:SafetyTipsModal__TipTitle--Business'), description: i18n('icu:SafetyTipsModal__TipDescription--Business'), - imageUrl: 'images/safety-tips/safety-tip-business.png', + imageUrl: 'images/safety-tips/safety-tip-business.webp', }, ]; }, [i18n]); diff --git a/ts/components/conversation/AboutContactModal.stories.tsx b/ts/components/conversation/AboutContactModal.stories.tsx index ef3f747518..930f5ae405 100644 --- a/ts/components/conversation/AboutContactModal.stories.tsx +++ b/ts/components/conversation/AboutContactModal.stories.tsx @@ -66,9 +66,11 @@ export default { onOpenNotePreviewModal: action('onOpenNotePreviewModal'), toggleSignalConnectionsModal: action('toggleSignalConnections'), toggleSafetyNumberModal: action('toggleSafetyNumberModal'), + toggleProfileNameWarningModal: action('toggleProfileNameWarningModal'), updateSharedGroups: action('updateSharedGroups'), unblurAvatar: action('unblurAvatar'), conversation, + fromOrAddedByTrustedContact: false, isSignalConnection: false, }, } satisfies ComponentMeta; @@ -124,3 +126,13 @@ export function WithSharedGroups(args: PropsType): JSX.Element { /> ); } + +export function DirectFromTrustedContact(args: PropsType): JSX.Element { + return ( + + ); +} diff --git a/ts/components/conversation/AboutContactModal.tsx b/ts/components/conversation/AboutContactModal.tsx index 1cdc329c24..4a8eeaf39c 100644 --- a/ts/components/conversation/AboutContactModal.tsx +++ b/ts/components/conversation/AboutContactModal.tsx @@ -1,7 +1,7 @@ // Copyright 2024 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only -import React, { useCallback, useEffect } from 'react'; +import React, { type ReactNode, useCallback, useEffect } from 'react'; import type { ConversationType } from '../../state/ducks/conversations'; import type { LocalizerType } from '../../types/Util'; import { isInSystemContacts } from '../../util/isInSystemContacts'; @@ -26,9 +26,11 @@ export type PropsType = Readonly<{ onClose: () => void; onOpenNotePreviewModal: () => void; conversation: ConversationType; + fromOrAddedByTrustedContact?: boolean; isSignalConnection: boolean; toggleSignalConnectionsModal: () => void; toggleSafetyNumberModal: (id: string) => void; + toggleProfileNameWarningModal: () => void; updateSharedGroups: (id: string) => void; unblurAvatar: (conversationId: string) => void; }>; @@ -36,9 +38,11 @@ export type PropsType = Readonly<{ export function AboutContactModal({ i18n, conversation, + fromOrAddedByTrustedContact, isSignalConnection, toggleSignalConnectionsModal, toggleSafetyNumberModal, + toggleProfileNameWarningModal, updateSharedGroups, unblurAvatar, onClose, @@ -77,6 +81,14 @@ export function AboutContactModal({ [toggleSafetyNumberModal, conversation.id] ); + const onProfileNameWarningClick = useCallback( + (ev: React.MouseEvent) => { + ev.preventDefault(); + toggleProfileNameWarningModal(); + }, + [toggleProfileNameWarningModal] + ); + let statusRow: JSX.Element | undefined; if (isMe) { @@ -185,6 +197,32 @@ export function AboutContactModal({ )} + {!isMe && !fromOrAddedByTrustedContact ? ( +
+ + +
+ ) : null} + {!isMe && conversation.isVerified ? (
diff --git a/ts/components/conversation/ChatSessionRefreshedNotification.tsx b/ts/components/conversation/ChatSessionRefreshedNotification.tsx index fb79253b59..d0f91e5f68 100644 --- a/ts/components/conversation/ChatSessionRefreshedNotification.tsx +++ b/ts/components/conversation/ChatSessionRefreshedNotification.tsx @@ -10,7 +10,7 @@ import { Button, ButtonSize, ButtonVariant } from '../Button'; import { SystemMessage } from './SystemMessage'; import { ChatSessionRefreshedDialog } from './ChatSessionRefreshedDialog'; import { openLinkInWebBrowser } from '../../util/openLinkInWebBrowser'; -import { mapToSupportLocale } from '../../util/mapToSupportLocale'; +import { getLocalizedUrl } from '../../util/getLocalizedUrl'; type PropsHousekeepingType = { i18n: LocalizerType; @@ -34,11 +34,9 @@ export function ChatSessionRefreshedNotification( const wrappedContactSupport = useCallback(() => { setIsDialogOpen(false); - const baseUrl = - 'https://support.signal.org/hc/LOCALE/requests/new?desktop&chat_refreshed'; - const locale = window.SignalContext.getResolvedMessagesLocale(); - const supportLocale = mapToSupportLocale(locale); - const url = baseUrl.replace('LOCALE', supportLocale); + const url = getLocalizedUrl( + 'https://support.signal.org/hc/LOCALE/requests/new?desktop&chat_refreshed' + ); openLinkInWebBrowser(url); }, [setIsDialogOpen]); diff --git a/ts/components/conversation/ContactSpoofingReviewDialog.tsx b/ts/components/conversation/ContactSpoofingReviewDialog.tsx index 4921cd1e91..16ce5ad7f5 100644 --- a/ts/components/conversation/ContactSpoofingReviewDialog.tsx +++ b/ts/components/conversation/ContactSpoofingReviewDialog.tsx @@ -147,6 +147,7 @@ export function ContactSpoofingReviewDialog(props: PropsType): JSX.Element { case MessageRequestState.reportingAndMaybeBlocking: case MessageRequestState.acceptedOptions: case MessageRequestState.unblocking: + case MessageRequestState.accepting: assertDev( false, `Got unexpected MessageRequestState.${MessageRequestState[messageRequestState]} state. Clearing confiration state` diff --git a/ts/components/conversation/ConversationHero.stories.tsx b/ts/components/conversation/ConversationHero.stories.tsx index 5a90e1fbd0..b1ad80691c 100644 --- a/ts/components/conversation/ConversationHero.stories.tsx +++ b/ts/components/conversation/ConversationHero.stories.tsx @@ -19,12 +19,16 @@ export default { component: ConversationHero, args: { conversationType: 'direct', + fromOrAddedByTrustedContact: true, i18n, + isDirectConvoAndHasNickname: false, theme: ThemeType.light, unblurAvatar: action('unblurAvatar'), updateSharedGroups: action('updateSharedGroups'), viewUserStories: action('viewUserStories'), toggleAboutContactModal: action('toggleAboutContactModal'), + toggleProfileNameWarningModal: action('toggleProfileNameWarningModal'), + openConversationDetails: action('openConversationDetails'), }, } satisfies Meta; @@ -73,6 +77,12 @@ DirectNoGroupsJustProfile.args = { phoneNumber: casual.phone, }; +export const SignalConversation = Template.bind({}); +SignalConversation.args = { + isSignalConversation: true, + phoneNumber: casual.phone, +}; + export const DirectNoGroupsJustPhoneNumber = Template.bind({}); DirectNoGroupsJustPhoneNumber.args = { phoneNumber: casual.phone, @@ -146,6 +156,15 @@ GroupNoName.args = { title: '', }; +export const GroupNotAccepted = Template.bind({}); +GroupNotAccepted.args = { + conversationType: 'group', + groupDescription: casual.sentence, + membersCount: casual.integer(20, 100), + title: casual.title, + acceptedMessageRequest: false, +}; + export const NoteToSelf = Template.bind({}); NoteToSelf.args = { isMe: true, @@ -160,3 +179,26 @@ export const ReadStories = Template.bind({}); ReadStories.args = { hasStories: HasStories.Read, }; + +export const DirectNotFromTrustedContact = Template.bind({}); +DirectNotFromTrustedContact.args = { + conversationType: 'direct', + title: casual.full_name, + fromOrAddedByTrustedContact: false, +}; + +export const DirectWithNickname = Template.bind({}); +DirectWithNickname.args = { + conversationType: 'direct', + title: casual.full_name, + fromOrAddedByTrustedContact: false, + isDirectConvoAndHasNickname: true, +}; + +export const GroupNotFromTrustedContact = Template.bind({}); +GroupNotFromTrustedContact.args = { + conversationType: 'group', + title: casual.title, + membersCount: casual.integer(5, 20), + fromOrAddedByTrustedContact: false, +}; diff --git a/ts/components/conversation/ConversationHero.tsx b/ts/components/conversation/ConversationHero.tsx index b36131bfa5..0989c44d4c 100644 --- a/ts/components/conversation/ConversationHero.tsx +++ b/ts/components/conversation/ConversationHero.tsx @@ -1,7 +1,8 @@ // Copyright 2020 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only -import React, { useEffect, useState } from 'react'; +import React, { type ReactNode, useEffect, useState } from 'react'; +import classNames from 'classnames'; import type { Props as AvatarProps } from '../Avatar'; import { Avatar, AvatarSize, AvatarBlur } from '../Avatar'; import { ContactName } from './ContactName'; @@ -12,22 +13,24 @@ import type { LocalizerType, ThemeType } from '../../types/Util'; import type { HasStories } from '../../types/Stories'; import type { ViewUserStoriesActionCreatorType } from '../../state/ducks/stories'; import { StoryViewModeType } from '../../types/Stories'; -import { ConfirmationDialog } from '../ConfirmationDialog'; import { shouldBlurAvatar } from '../../util/shouldBlurAvatar'; -import { openLinkInWebBrowser } from '../../util/openLinkInWebBrowser'; import { Button, ButtonVariant } from '../Button'; import { SafetyTipsModal } from '../SafetyTipsModal'; +import { I18n } from '../I18n'; export type Props = { about?: string; acceptedMessageRequest?: boolean; + fromOrAddedByTrustedContact?: boolean; groupDescription?: string; hasStories?: HasStories; id: string; i18n: LocalizerType; + isDirectConvoAndHasNickname?: boolean; isMe: boolean; isSignalConversation?: boolean; membersCount?: number; + openConversationDetails?: () => unknown; phoneNumber?: string; sharedGroupNames?: ReadonlyArray; unblurAvatar: (conversationId: string) => void; @@ -36,30 +39,39 @@ export type Props = { theme: ThemeType; viewUserStories: ViewUserStoriesActionCreatorType; toggleAboutContactModal: (conversationId: string) => unknown; + toggleProfileNameWarningModal: (conversationType?: string) => unknown; } & Omit; -const renderMembershipRow = ({ +const renderExtraInformation = ({ acceptedMessageRequest, conversationType, + fromOrAddedByTrustedContact, i18n, + isDirectConvoAndHasNickname, isMe, - onClickMessageRequestWarning, + membersCount, + onClickProfileNameWarning, onToggleSafetyTips, + openConversationDetails, phoneNumber, sharedGroupNames, }: Pick< Props, | 'acceptedMessageRequest' | 'conversationType' + | 'fromOrAddedByTrustedContact' | 'i18n' + | 'isDirectConvoAndHasNickname' | 'isMe' + | 'membersCount' + | 'openConversationDetails' | 'phoneNumber' > & Required> & { - onClickMessageRequestWarning: () => void; + onClickProfileNameWarning: () => void; onToggleSafetyTips: (showSafetyTips: boolean) => void; }) => { - if (conversationType !== 'direct') { + if (conversationType !== 'direct' && conversationType !== 'group') { return null; } @@ -71,7 +83,7 @@ const renderMembershipRow = ({ ); } - const safetyTipsButton = ( + const safetyTipsButton = !acceptedMessageRequest ? (
- ); + ) : null; - if (sharedGroupNames.length > 0) { - return ( -
+ const shouldShowReviewCarefully = + !acceptedMessageRequest && + (conversationType === 'group' || sharedGroupNames.length <= 1); + + const reviewCarefullyLabel = shouldShowReviewCarefully ? ( +
+ + {i18n('icu:ConversationHero--review-carefully')} +
+ ) : null; + + const sharedGroupsLabel = + conversationType === 'direct' ? ( +
- {safetyTipsButton}
- ); + ) : null; + + const nameNotVerifiedLabel = + !fromOrAddedByTrustedContact && !isDirectConvoAndHasNickname ? ( +
+ + ( + + ), + }} + i18n={i18n} + id={ + conversationType === 'group' + ? 'icu:ConversationHero--group-names' + : 'icu:ConversationHero--profile-names' + } + /> +
+ ) : null; + + const membersCountLabel = + conversationType === 'group' && membersCount != null ? ( +
+ + +
+ ) : null; + + if ( + conversationType === 'direct' && + sharedGroupNames.length === 0 && + acceptedMessageRequest && + phoneNumber + ) { + return null; } - if (acceptedMessageRequest) { - if (phoneNumber) { - return null; - } - return ( -
- {i18n('icu:no-groups-in-common')} - {safetyTipsButton} -
- ); + + // Check if we should show anything at all + const shouldShowAnything = + Boolean(reviewCarefullyLabel) || + Boolean(nameNotVerifiedLabel) || + Boolean(sharedGroupsLabel) || + Boolean(safetyTipsButton) || + Boolean(membersCountLabel); + + if (!shouldShowAnything) { + return null; } return (
-
- - {i18n('icu:no-groups-in-common-warning')} -   - -
+ {reviewCarefullyLabel} + {nameNotVerifiedLabel} + {sharedGroupsLabel} + {membersCountLabel} {safetyTipsButton}
); }; +function ReleaseNotesExtraInformation({ + i18n, +}: { + i18n: LocalizerType; +}): JSX.Element { + return ( +
+
+ + {i18n('icu:ConversationHero--signal-official-chat')} +
+
+ + {i18n('icu:ConversationHero--release-notes')} +
+
+ ); +} + export function ConversationHero({ i18n, about, @@ -140,10 +234,13 @@ export function ConversationHero({ badge, color, conversationType, + fromOrAddedByTrustedContact, groupDescription, hasStories, id, + isDirectConvoAndHasNickname, isMe, + openConversationDetails, isSignalConversation, membersCount, sharedGroupNames = [], @@ -156,13 +253,9 @@ export function ConversationHero({ updateSharedGroups, viewUserStories, toggleAboutContactModal, + toggleProfileNameWarningModal, }: Props): JSX.Element { const [isShowingSafetyTips, setIsShowingSafetyTips] = useState(false); - const [isShowingMessageRequestWarning, setIsShowingMessageRequestWarning] = - useState(false); - const closeMessageRequestWarning = () => { - setIsShowingMessageRequestWarning(false); - }; useEffect(() => { // Kick off the expensive hydration of the current sharedGroupNames @@ -215,7 +308,6 @@ export function ConversationHero({ ); } - /* eslint-disable no-nested-ternary */ return ( <>
@@ -248,55 +340,36 @@ export function ConversationHero({
)} - {!isMe ? ( + {!isMe && groupDescription ? (
- {groupDescription ? ( - - ) : membersCount != null ? ( - i18n('icu:ConversationHero--members', { count: membersCount }) - ) : null} +
) : null} {!isSignalConversation && - renderMembershipRow({ + renderExtraInformation({ acceptedMessageRequest, conversationType, + fromOrAddedByTrustedContact, i18n, + isDirectConvoAndHasNickname, isMe, - onClickMessageRequestWarning() { - setIsShowingMessageRequestWarning(true); + membersCount, + onClickProfileNameWarning() { + toggleProfileNameWarningModal(conversationType); }, onToggleSafetyTips(showSafetyTips: boolean) { setIsShowingSafetyTips(showSafetyTips); }, + openConversationDetails, phoneNumber, sharedGroupNames, })} + {isSignalConversation && }
- {isShowingMessageRequestWarning && ( - { - openLinkInWebBrowser( - 'https://support.signal.org/hc/articles/360007459591' - ); - closeMessageRequestWarning(); - }, - }, - ]} - > - {i18n('icu:MessageRequestWarning__dialog__details')} - - )} {isShowingSafetyTips && ( ); - /* eslint-enable no-nested-ternary */ } diff --git a/ts/components/conversation/MessageRequestActions.tsx b/ts/components/conversation/MessageRequestActions.tsx index 2a5191bb01..974b826ea6 100644 --- a/ts/components/conversation/MessageRequestActions.tsx +++ b/ts/components/conversation/MessageRequestActions.tsx @@ -16,6 +16,7 @@ import { strictAssert } from '../../util/assert'; export type Props = { i18n: LocalizerType; isHidden: boolean | null; + sharedGroupNames?: ReadonlyArray; } & Omit< MessageRequestActionsConfirmationProps, 'i18n' | 'state' | 'onChangeState' @@ -30,6 +31,7 @@ export function MessageRequestActions({ isBlocked, isHidden, isReported, + sharedGroupNames = [], acceptConversation, blockAndReportSpam, blockConversation, @@ -153,7 +155,16 @@ export function MessageRequestActions({ )} {!isBlocked ? (
+ {isSignalConversation && ( + <> + + + } + label={i18n('icu:ConversationHero--signal-official-chat')} + /> + + } + label={i18n('icu:ConversationHero--release-notes')} + /> + + + + + } + label={i18n('icu:ConversationDetails--support-center')} + onClick={() => { + openLinkInWebBrowser( + getLocalizedUrl('https://support.signal.org/hc/LOCALE') + ); + }} + /> + + } + label={i18n('icu:contactUs')} + onClick={() => { + openLinkInWebBrowser( + getLocalizedUrl( + 'https://support.signal.org/hc/LOCALE/requests/new?desktop' + ) + ); + }} + /> + + } + label={i18n('icu:BadgeDialog__become-a-sustainer-button')} + onClick={() => setModalState(ModalState.BecomeSustainer)} + /> + + + )} + {callHistoryGroup && ( ; +export type ToggleProfileNameWarningModalActionType = ReadonlyDeep<{ + type: typeof TOGGLE_PROFILE_NAME_WARNING_MODAL; + payload?: { + conversationType: string; + }; +}>; + type ToggleSafetyNumberModalActionType = ReadonlyDeep<{ type: typeof TOGGLE_SAFETY_NUMBER_MODAL; payload: string | undefined; @@ -474,6 +485,7 @@ export type GlobalModalsActionType = ReadonlyDeep< | ToggleNotePreviewModalActionType | ToggleProfileEditorActionType | ToggleProfileEditorErrorActionType + | ToggleProfileNameWarningModalActionType | ToggleSafetyNumberModalActionType | ToggleSignalConnectionsModalActionType | ToggleUsernameOnboardingActionType @@ -523,6 +535,7 @@ export const actions = { toggleNotePreviewModal, toggleProfileEditor, toggleProfileEditorHasError, + toggleProfileNameWarningModal, toggleSafetyNumberModal, toggleSignalConnectionsModal, toggleUsernameOnboarding, @@ -844,6 +857,15 @@ function toggleProfileEditorHasError(): ToggleProfileEditorErrorActionType { return { type: TOGGLE_PROFILE_EDITOR_ERROR }; } +function toggleProfileNameWarningModal( + conversationType?: string +): ToggleProfileNameWarningModalActionType { + return { + type: TOGGLE_PROFILE_NAME_WARNING_MODAL, + payload: conversationType ? { conversationType } : undefined, + }; +} + function toggleSafetyNumberModal( safetyNumberModalContactId?: string ): ToggleSafetyNumberModalActionType { @@ -1170,6 +1192,8 @@ export function getEmptyState(): GlobalModalsStateType { confirmLeaveCallModalState: null, editNicknameAndNoteModalProps: null, isProfileEditorVisible: false, + isProfileNameWarningModalVisible: false, + profileNameWarningModalConversationType: undefined, isShortcutGuideModalVisible: false, isSignalConnectionsVisible: false, isStoriesSettingsVisible: false, @@ -1222,6 +1246,16 @@ export function reducer( profileEditorHasError: !state.profileEditorHasError, }; } + if (action.type === TOGGLE_PROFILE_NAME_WARNING_MODAL) { + return { + ...state, + isProfileNameWarningModalVisible: !state.isProfileNameWarningModalVisible, + profileNameWarningModalConversationType: + state.isProfileNameWarningModalVisible + ? undefined + : action.payload?.conversationType, + }; + } if (action.type === SHOW_WHATS_NEW_MODAL) { return { diff --git a/ts/state/smart/AboutContactModal.tsx b/ts/state/smart/AboutContactModal.tsx index 90beb3cc77..cc4731f897 100644 --- a/ts/state/smart/AboutContactModal.tsx +++ b/ts/state/smart/AboutContactModal.tsx @@ -7,9 +7,28 @@ import { isSignalConnection } from '../../util/getSignalConnections'; import { getIntl } from '../selectors/user'; import { getGlobalModalsState } from '../selectors/globalModals'; import { getConversationSelector } from '../selectors/conversations'; +import type { ConversationType } from '../ducks/conversations'; import { useConversationsActions } from '../ducks/conversations'; import { useGlobalModalActions } from '../ducks/globalModals'; import { strictAssert } from '../../util/assert'; +import { getAddedByForOurPendingInvitation } from '../../util/getAddedByForOurPendingInvitation'; + +function isFromOrAddedByTrustedContact( + conversation: ConversationType +): boolean { + if (conversation.type === 'direct') { + return Boolean(conversation.name) || Boolean(conversation.profileSharing); + } + + const addedByConv = getAddedByForOurPendingInvitation(conversation); + if (!addedByConv) { + return false; + } + + return Boolean( + addedByConv.isMe || addedByConv.name || addedByConv.profileSharing + ); +} export const SmartAboutContactModal = memo(function SmartAboutContactModal() { const i18n = useSelector(getIntl); @@ -27,6 +46,7 @@ export const SmartAboutContactModal = memo(function SmartAboutContactModal() { toggleSignalConnectionsModal, toggleSafetyNumberModal, toggleNotePreviewModal, + toggleProfileNameWarningModal, } = useGlobalModalActions(); const handleOpenNotePreviewModal = useCallback(() => { @@ -47,8 +67,10 @@ export const SmartAboutContactModal = memo(function SmartAboutContactModal() { toggleSignalConnectionsModal={toggleSignalConnectionsModal} toggleSafetyNumberModal={toggleSafetyNumberModal} isSignalConnection={isSignalConnection(conversation)} + fromOrAddedByTrustedContact={isFromOrAddedByTrustedContact(conversation)} onClose={toggleAboutContactModal} onOpenNotePreviewModal={handleOpenNotePreviewModal} + toggleProfileNameWarningModal={toggleProfileNameWarningModal} /> ); }); diff --git a/ts/state/smart/CompositionArea.tsx b/ts/state/smart/CompositionArea.tsx index 9a7f323158..4119a1f537 100644 --- a/ts/state/smart/CompositionArea.tsx +++ b/ts/state/smart/CompositionArea.tsx @@ -336,6 +336,7 @@ export const SmartCompositionArea = memo(function SmartCompositionArea({ blockConversation={blockConversation} reportSpam={reportSpam} deleteConversation={deleteConversation} + sharedGroupNames={conversation.sharedGroupNames} // Signal Conversation isSignalConversation={isSignalConversation(conversation)} isMuted={isConversationMuted(conversation)} diff --git a/ts/state/smart/GlobalModalContainer.tsx b/ts/state/smart/GlobalModalContainer.tsx index 7b73ec7f72..c5cffb55ab 100644 --- a/ts/state/smart/GlobalModalContainer.tsx +++ b/ts/state/smart/GlobalModalContainer.tsx @@ -31,6 +31,7 @@ import { SmartCallLinkAddNameModal } from './CallLinkAddNameModal'; import { SmartConfirmLeaveCallModal } from './ConfirmLeaveCallModal'; import { SmartCallLinkPendingParticipantModal } from './CallLinkPendingParticipantModal'; import { SmartAttachmentNotAvailableModal } from './AttachmentNotAvailableModal'; +import { SmartProfileNameWarningModal } from './ProfileNameWarningModal'; function renderCallLinkAddNameModal(): JSX.Element { return ; @@ -60,6 +61,10 @@ function renderProfileEditor(): JSX.Element { return ; } +function renderProfileNameWarningModal(): JSX.Element { + return ; +} + function renderUsernameOnboarding(): JSX.Element { return ; } @@ -130,6 +135,8 @@ export const SmartGlobalModalContainer = memo( messageRequestActionsConfirmationProps, notePreviewModalProps, isProfileEditorVisible, + isProfileNameWarningModalVisible, + profileNameWarningModalConversationType, isShortcutGuideModalVisible, isSignalConnectionsVisible, isStoriesSettingsVisible, @@ -229,6 +236,7 @@ export const SmartGlobalModalContainer = memo( i18n={i18n} isAboutContactModalVisible={aboutContactModalContactId != null} isProfileEditorVisible={isProfileEditorVisible} + isProfileNameWarningModalVisible={isProfileNameWarningModalVisible} isShortcutGuideModalVisible={isShortcutGuideModalVisible} isSignalConnectionsVisible={isSignalConnectionsVisible} isStoriesSettingsVisible={isStoriesSettingsVisible} @@ -253,6 +261,7 @@ export const SmartGlobalModalContainer = memo( } renderNotePreviewModal={renderNotePreviewModal} renderProfileEditor={renderProfileEditor} + renderProfileNameWarningModal={renderProfileNameWarningModal} renderUsernameOnboarding={renderUsernameOnboarding} renderSafetyNumber={renderSafetyNumber} renderSendAnywayDialog={renderSendAnywayDialog} @@ -267,6 +276,9 @@ export const SmartGlobalModalContainer = memo( toggleSignalConnectionsModal={toggleSignalConnectionsModal} userNotFoundModalState={userNotFoundModalState} usernameOnboardingState={usernameOnboardingState} + profileNameWarningModalConversationType={ + profileNameWarningModalConversationType + } /> ); } diff --git a/ts/state/smart/HeroRow.tsx b/ts/state/smart/HeroRow.tsx index 6803a568b3..1fa3e1e751 100644 --- a/ts/state/smart/HeroRow.tsx +++ b/ts/state/smart/HeroRow.tsx @@ -1,21 +1,43 @@ // Copyright 2020 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only -import React, { memo } from 'react'; +import React, { memo, useCallback } from 'react'; import { useSelector } from 'react-redux'; +import { PanelType } from '../../types/Panels'; import { ConversationHero } from '../../components/conversation/ConversationHero'; import { getPreferredBadgeSelector } from '../selectors/badges'; import { getIntl, getTheme } from '../selectors/user'; import { getHasStoriesSelector } from '../selectors/stories2'; import { isSignalConversation } from '../../util/isSignalConversation'; import { getConversationSelector } from '../selectors/conversations'; -import { useConversationsActions } from '../ducks/conversations'; +import { + type ConversationType, + useConversationsActions, +} from '../ducks/conversations'; import { useGlobalModalActions } from '../ducks/globalModals'; import { useStoriesActions } from '../ducks/stories'; +import { getAddedByForOurPendingInvitation } from '../../util/getAddedByForOurPendingInvitation'; type SmartHeroRowProps = Readonly<{ id: string; }>; +function isFromOrAddedByTrustedContact( + conversation: ConversationType +): boolean { + if (conversation.type === 'direct') { + return Boolean(conversation.name) || Boolean(conversation.profileSharing); + } + + const addedByConv = getAddedByForOurPendingInvitation(conversation); + if (!addedByConv) { + return false; + } + + return Boolean( + addedByConv.isMe || addedByConv.name || addedByConv.profileSharing + ); +} + export const SmartHeroRow = memo(function SmartHeroRow({ id, }: SmartHeroRowProps) { @@ -31,8 +53,15 @@ export const SmartHeroRow = memo(function SmartHeroRow({ const badge = getPreferredBadge(conversation.badges); const hasStories = hasStoriesSelector(id); const isSignalConversationValue = isSignalConversation(conversation); - const { unblurAvatar, updateSharedGroups } = useConversationsActions(); - const { toggleAboutContactModal } = useGlobalModalActions(); + const fromOrAddedByTrustedContact = + isFromOrAddedByTrustedContact(conversation); + const { pushPanelForConversation, unblurAvatar, updateSharedGroups } = + useConversationsActions(); + const { toggleAboutContactModal, toggleProfileNameWarningModal } = + useGlobalModalActions(); + const openConversationDetails = useCallback(() => { + pushPanelForConversation({ type: PanelType.ConversationDetails }); + }, [pushPanelForConversation]); const { viewUserStories } = useStoriesActions(); const { about, @@ -41,6 +70,8 @@ export const SmartHeroRow = memo(function SmartHeroRow({ groupDescription, isMe, membersCount, + nicknameGivenName, + nicknameFamilyName, phoneNumber, profileName, sharedGroupNames, @@ -48,6 +79,10 @@ export const SmartHeroRow = memo(function SmartHeroRow({ type, unblurredAvatarUrl, } = conversation; + + const isDirectConvoAndHasNickname = + type === 'direct' && Boolean(nicknameGivenName || nicknameFamilyName); + return ( + ); + } +); diff --git a/ts/test-mock/helpers.ts b/ts/test-mock/helpers.ts index f46f3e8d6c..bef40cff15 100644 --- a/ts/test-mock/helpers.ts +++ b/ts/test-mock/helpers.ts @@ -281,10 +281,22 @@ export async function pinContact( await phone.setStorageState(state); } -export function acceptConversation(page: Page): Promise { - return page +export async function acceptConversation(page: Page): Promise { + await page .locator('.module-message-request-actions button >> "Accept"') .click(); + + const confirmationButton = page + .locator('.MessageRequestActionsConfirmation') + .getByRole('button', { name: 'Accept' }); + + await confirmationButton.waitFor({ + timeout: 500, + }); + + if (await confirmationButton.isVisible()) { + await confirmationButton.click(); + } } export function getTimeline(page: Page): Locator { diff --git a/ts/test-mock/messaging/unknown_contact_test.ts b/ts/test-mock/messaging/unknown_contact_test.ts index 629b38565b..76c8dfe730 100644 --- a/ts/test-mock/messaging/unknown_contact_test.ts +++ b/ts/test-mock/messaging/unknown_contact_test.ts @@ -10,6 +10,7 @@ import assert from 'assert'; import * as durations from '../../util/durations'; import type { App } from '../playwright'; import { Bootstrap } from '../bootstrap'; +import { acceptConversation } from '../helpers'; export const debug = createDebug('mock:test:edit'); @@ -68,7 +69,7 @@ describe('unknown contacts', function (this: Mocha.Suite) { debug('accepting message request'); await page.getByText('message you and share your name').waitFor(); - await page.getByRole('button', { name: 'Accept' }).click(); + await acceptConversation(page); await page.getByText('message you and share your name').waitFor({ state: 'detached', }); diff --git a/ts/test-mock/pnp/accept_gv2_invite_test.ts b/ts/test-mock/pnp/accept_gv2_invite_test.ts index 5496a98c06..44c6b18d5d 100644 --- a/ts/test-mock/pnp/accept_gv2_invite_test.ts +++ b/ts/test-mock/pnp/accept_gv2_invite_test.ts @@ -13,7 +13,7 @@ import { } from '../../util/libphonenumberInstance'; import { Bootstrap } from '../bootstrap'; import type { App } from '../bootstrap'; -import { expectSystemMessages } from '../helpers'; +import { acceptConversation, expectSystemMessages } from '../helpers'; export const debug = createDebug('mock:test:gv2'); @@ -103,9 +103,7 @@ describe('pnp/accept gv2 invite', function (this: Mocha.Suite) { const conversationStack = window.locator('.Inbox__conversation-stack'); debug('Accepting'); - await conversationStack - .locator('.module-message-request-actions button >> "Accept"') - .click(); + await acceptConversation(window); group = await phone.waitForGroupUpdate(group); assert.strictEqual(group.revision, 2); @@ -256,9 +254,7 @@ describe('pnp/accept gv2 invite', function (this: Mocha.Suite) { .waitFor(); debug('Accepting'); - await conversationStack - .locator('.module-message-request-actions button >> "Accept"') - .click(); + await acceptConversation(window); debug('Checking final notification'); await window diff --git a/ts/test-mock/pnp/pni_signature_test.ts b/ts/test-mock/pnp/pni_signature_test.ts index efe913547d..2f457b5c67 100644 --- a/ts/test-mock/pnp/pni_signature_test.ts +++ b/ts/test-mock/pnp/pni_signature_test.ts @@ -24,6 +24,7 @@ import { } from '../../types/Receipt'; import { sleep } from '../../util/sleep'; import { + acceptConversation, expectSystemMessages, typeIntoInput, waitForEnabledComposer, @@ -85,7 +86,6 @@ describe('pnp/PNI Signature', function (this: Mocha.Suite) { const window = await app.getWindow(); const leftPane = window.locator('#LeftPane'); - const conversationStack = window.locator('.Inbox__conversation-stack'); debug('creating a stranger'); const stranger = await server.createPrimaryDevice({ @@ -137,9 +137,7 @@ describe('pnp/PNI Signature', function (this: Mocha.Suite) { .click(); debug('Accept conversation from a stranger'); - await conversationStack - .locator('.module-message-request-actions button >> "Accept"') - .click(); + await acceptConversation(window); debug('Wait for a pniSignatureMessage'); { diff --git a/ts/test-mock/rate-limit/viewed_test.ts b/ts/test-mock/rate-limit/viewed_test.ts index e1b667fb0e..a81b07a941 100644 --- a/ts/test-mock/rate-limit/viewed_test.ts +++ b/ts/test-mock/rate-limit/viewed_test.ts @@ -10,7 +10,11 @@ import { Bootstrap } from '../bootstrap'; import type { App } from '../bootstrap'; import { ReceiptType } from '../../types/Receipt'; import { toUntaggedPni } from '../../types/ServiceId'; -import { typeIntoInput, waitForEnabledComposer } from '../helpers'; +import { + acceptConversation, + typeIntoInput, + waitForEnabledComposer, +} from '../helpers'; export const debug = createDebug('mock:test:challenge:receipts'); @@ -106,7 +110,6 @@ describe('challenge/receipts', function (this: Mocha.Suite) { const window = await app.getWindow(); const leftPane = window.locator('#LeftPane'); - const conversationStack = window.locator('.Inbox__conversation-stack'); debug(`Opening conversation with contact (${contact.toContact().aci})`); await leftPane @@ -114,9 +117,7 @@ describe('challenge/receipts', function (this: Mocha.Suite) { .click(); debug('Accept conversation from contact - does not trigger captcha!'); - await conversationStack - .locator('.module-message-request-actions button >> "Accept"') - .click(); + await acceptConversation(window); debug('Sending a message back to user - will trigger captcha!'); { @@ -164,7 +165,6 @@ describe('challenge/receipts', function (this: Mocha.Suite) { const window = await app.getWindow(); const leftPane = window.locator('#LeftPane'); - const conversationStack = window.locator('.Inbox__conversation-stack'); debug('Sending a message from ContactA'); const timestampA = bootstrap.getTimestamp(); @@ -178,9 +178,7 @@ describe('challenge/receipts', function (this: Mocha.Suite) { .click(); debug('Accept conversation from ContactA - does not trigger captcha!'); - await conversationStack - .locator('.module-message-request-actions button >> "Accept"') - .click(); + await acceptConversation(window); debug('Sending a message from ContactB'); const timestampB = bootstrap.getTimestamp(); @@ -194,9 +192,7 @@ describe('challenge/receipts', function (this: Mocha.Suite) { .click(); debug('Accept conversation from ContactB - does not trigger captcha!'); - await conversationStack - .locator('.module-message-request-actions button >> "Accept"') - .click(); + await acceptConversation(window); debug('Sending a message back to ContactB - will trigger captcha!'); { @@ -276,7 +272,6 @@ describe('challenge/receipts', function (this: Mocha.Suite) { const window = await app.getWindow(); const leftPane = window.locator('#LeftPane'); - const conversationStack = window.locator('.Inbox__conversation-stack'); debug(`Opening conversation with contact (${contact.toContact().aci})`); await leftPane @@ -284,9 +279,7 @@ describe('challenge/receipts', function (this: Mocha.Suite) { .click(); debug('Accept conversation from contact - does not trigger captcha!'); - await conversationStack - .locator('.module-message-request-actions button >> "Accept"') - .click(); + await acceptConversation(window); debug('Sending a message back to user - will trigger captcha!'); { @@ -355,9 +348,7 @@ describe('challenge/receipts', function (this: Mocha.Suite) { .click(); debug('Accept conversation from Contact B - does not trigger captcha!'); - await conversationStack - .locator('.module-message-request-actions button >> "Accept"') - .click(); + await acceptConversation(window); debug( 'Sending to Contact B - we should not pop captcha because we are waiting!' diff --git a/ts/test-mock/storage/message_request_test.ts b/ts/test-mock/storage/message_request_test.ts index 5415072e4e..2c36861485 100644 --- a/ts/test-mock/storage/message_request_test.ts +++ b/ts/test-mock/storage/message_request_test.ts @@ -81,6 +81,11 @@ describe('storage service', function (this: Mocha.Suite) { .locator('.module-message-request-actions button >> "Accept"') .click(); + await window + .locator('.MessageRequestActionsConfirmation') + .getByRole('button', { name: 'Accept' }) + .click(); + debug('Verify that storage state was updated'); { const nextState = await phone.waitForStorageState({ diff --git a/ts/util/getLocalizedUrl.ts b/ts/util/getLocalizedUrl.ts new file mode 100644 index 0000000000..6c2c6771fa --- /dev/null +++ b/ts/util/getLocalizedUrl.ts @@ -0,0 +1,26 @@ +// Copyright 2025 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +import { mapToSupportLocale } from './mapToSupportLocale'; + +/** + * Ensures the provided string contains "LOCALE". + * If not, produces a readable TypeScript error. + */ +type RequiresLocale = T extends `${string}LOCALE${string}` + ? T + : `Error: The URL must contain "LOCALE" but got "${T}"`; + +/** + * Replaces "LOCALE" in a URL with the appropriate localized support locale. + * + * @param url The URL string containing "LOCALE" to be replaced + * @returns The URL with "LOCALE" replaced with the appropriate locale + */ +export function getLocalizedUrl( + url: RequiresLocale +): string { + const locale = window.SignalContext.getResolvedMessagesLocale(); + const supportLocale = mapToSupportLocale(locale); + return url.replace('LOCALE', supportLocale); +}