From eaae3ff88bdba7199cc72dbea1d9db4b5ec07dfb Mon Sep 17 00:00:00 2001 From: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com> Date: Wed, 19 Jul 2023 01:40:14 +0200 Subject: [PATCH] Better ordering of ACI/E164 numbers --- ts/components/SafetyNumberModal.tsx | 8 ++++++-- ts/components/SafetyNumberViewer.stories.tsx | 7 ++++--- ts/components/SafetyNumberViewer.tsx | 2 +- ts/state/selectors/items.ts | 8 ++++---- ts/types/safetyNumber.ts | 6 +++--- ts/util/safetyNumber.ts | 12 ++++++++---- 6 files changed, 26 insertions(+), 17 deletions(-) diff --git a/ts/components/SafetyNumberModal.tsx b/ts/components/SafetyNumberModal.tsx index 8a65a791d..741179880 100644 --- a/ts/components/SafetyNumberModal.tsx +++ b/ts/components/SafetyNumberModal.tsx @@ -27,7 +27,7 @@ export function SafetyNumberModal({ const { contact, safetyNumberMode } = safetyNumberViewerProps; const [isOnboarding, setIsOnboarding] = useState( - safetyNumberMode === SafetyNumberMode.ACIAndE164 && + safetyNumberMode !== SafetyNumberMode.JustE164 && !hasCompletedSafetyNumberOnboarding ); @@ -40,10 +40,14 @@ export function SafetyNumberModal({ markHasCompletedSafetyNumberOnboarding(); }, [setIsOnboarding, markHasCompletedSafetyNumberOnboarding]); + const missingRequiredE164 = + safetyNumberMode !== SafetyNumberMode.DefaultACIAndMaybeE164 && + !contact.e164; + let title: string | undefined; let content: JSX.Element; let hasXButton = true; - if (isSafetyNumberNotAvailable(contact)) { + if (missingRequiredE164 || isSafetyNumberNotAvailable(contact)) { content = ( = {}): PropsType => ({ contact: overrideProps.contact || contactWithAllData, generateSafetyNumber: action('generate-safety-number'), i18n, - safetyNumberMode: overrideProps.safetyNumberMode ?? SafetyNumberMode.ACI, + safetyNumberMode: + overrideProps.safetyNumberMode ?? SafetyNumberMode.DefaultE164AndThenACI, safetyNumbers: overrideProps.safetyNumbers ?? [ { identifierType: SafetyNumberIdentifierType.ACIIdentifier, @@ -106,7 +107,7 @@ export function SafetyNumberBeforeE164Transition(): JSX.Element { return ( = timestamp - ? SafetyNumberMode.ACI - : SafetyNumberMode.ACIAndE164; + ? SafetyNumberMode.DefaultACIAndMaybeE164 + : SafetyNumberMode.DefaultE164AndThenACI; } ); diff --git a/ts/types/safetyNumber.ts b/ts/types/safetyNumber.ts index af35602a5..de09a37e9 100644 --- a/ts/types/safetyNumber.ts +++ b/ts/types/safetyNumber.ts @@ -2,9 +2,9 @@ // SPDX-License-Identifier: AGPL-3.0-only export enum SafetyNumberMode { - E164 = 'E164', - ACIAndE164 = 'ACIAndE164', - ACI = 'ACI', + JustE164 = 'JustE164', + DefaultE164AndThenACI = 'DefaultE164AndThenACI', + DefaultACIAndMaybeE164 = 'DefaultACIAndMaybeE164', } export enum SafetyNumberIdentifierType { diff --git a/ts/util/safetyNumber.ts b/ts/util/safetyNumber.ts index 94712ca30..5d072efb6 100644 --- a/ts/util/safetyNumber.ts +++ b/ts/util/safetyNumber.ts @@ -56,18 +56,22 @@ export async function generateSafetyNumbers( const theirKey = PublicKey.deserialize(Buffer.from(theirKeyBuffer)); let identifierTypes: ReadonlyArray; - if (mode === SafetyNumberMode.ACIAndE164) { + if (mode === SafetyNumberMode.DefaultE164AndThenACI) { // Important: order matters, legacy safety number should be displayed first. identifierTypes = [ SafetyNumberIdentifierType.E164Identifier, SafetyNumberIdentifierType.ACIIdentifier, ]; // Controlled by 'desktop.safetyNumberAci' - } else if (mode === SafetyNumberMode.E164) { + } else if (mode === SafetyNumberMode.JustE164) { identifierTypes = [SafetyNumberIdentifierType.E164Identifier]; + } else if (mode === SafetyNumberMode.DefaultACIAndMaybeE164) { + identifierTypes = [ + SafetyNumberIdentifierType.ACIIdentifier, + SafetyNumberIdentifierType.E164Identifier, + ]; } else { - assertDev(mode === SafetyNumberMode.ACI, 'Invalid security number mode'); - identifierTypes = [SafetyNumberIdentifierType.ACIIdentifier]; + throw missingCaseError(mode); } return identifierTypes