From dde91eb240f6e92e9d5e0440d4868769e4aa5b56 Mon Sep 17 00:00:00 2001 From: Finnian Jacobson-Schulte <140328381+finnian0826@users.noreply.github.com> Date: Wed, 20 Mar 2024 17:58:36 -0600 Subject: [PATCH] fix(profile): register new screens for settings, help, invite (#5121) ### Description Registers new screens and modifies headers so can navigate back. ### Test plan Unit tests updated. **Manual tests:** Feature gate false: https://github.com/valora-inc/wallet/assets/140328381/74b676ea-334a-4c49-ae17-f868ac98b776 Feature gate true: https://github.com/valora-inc/wallet/assets/140328381/91ded2a7-d54f-43a8-8f65-a33ac8a3fbaf ### Related issues - Fixes ACT-1132 ### Backwards compatibility ### Network scalability If a new NetworkId and/or Network are added in the future, the changes in this PR will: - N/A --------- Co-authored-by: Tom McGuire Co-authored-by: Satish Ravi --- src/account/Settings.test.tsx | 10 +- src/account/Settings.tsx | 14 +- src/account/Support.test.tsx | 4 +- src/account/Support.tsx | 14 +- src/backup/BackupComplete.tsx | 10 +- src/backup/BackupPhrase.test.tsx | 56 +- src/backup/BackupPhrase.tsx | 11 +- src/backup/BackupQuiz.test.tsx | 54 +- src/backup/BackupQuiz.tsx | 23 +- .../__snapshots__/BackupPhrase.test.tsx.snap | 1960 ++++++++++++++++- .../KeylessBackupProgress.test.tsx | 3 +- src/keylessBackup/KeylessBackupProgress.tsx | 2 +- src/navigator/DrawerNavigator.tsx | 6 +- src/navigator/Navigator.tsx | 10 + src/navigator/ProfileMenu.test.tsx | 19 +- src/navigator/ProfileMenu.tsx | 10 +- src/navigator/Screens.tsx | 3 + src/navigator/types.tsx | 13 +- src/pincode/PincodeSet.test.tsx | 4 +- src/pincode/PincodeSet.tsx | 4 +- test/RootStateSchema.json | 3 + 21 files changed, 2143 insertions(+), 90 deletions(-) diff --git a/src/account/Settings.test.tsx b/src/account/Settings.test.tsx index 6001cdb8517..065964fedc9 100644 --- a/src/account/Settings.test.tsx +++ b/src/account/Settings.test.tsx @@ -469,7 +469,9 @@ describe('Account', () => { }, body: '{"phoneNumber":"+14155550000","clientPlatform":"android","clientVersion":"0.0.1"}', }) - expect(navigate).toHaveBeenLastCalledWith(Screens.BackupPhrase, { navigatedFromSettings: true }) + expect(navigate).toHaveBeenLastCalledWith(Screens.BackupPhrase, { + settingsScreen: Screens.SettingsDrawer, + }) }) it('deletes the account for an unverified account successfully', async () => { @@ -480,7 +482,7 @@ describe('Account', () => { const tree = render( - + ) @@ -488,7 +490,9 @@ describe('Account', () => { fireEvent.press(tree.getByText('deleteAccountWarning.buttonLabel')) await waitFor(() => - expect(navigate).toHaveBeenCalledWith(Screens.BackupPhrase, { navigatedFromSettings: true }) + expect(navigate).toHaveBeenCalledWith(Screens.BackupPhrase, { + settingsScreen: Screens.Settings, + }) ) expect(mockFetch).not.toHaveBeenCalled() }) diff --git a/src/account/Settings.tsx b/src/account/Settings.tsx index 298406fd2e3..c48930179f5 100644 --- a/src/account/Settings.tsx +++ b/src/account/Settings.tsx @@ -86,12 +86,13 @@ import { useRevokeCurrentPhoneNumber } from 'src/verify/hooks' import { selectSessions } from 'src/walletConnect/selectors' import { walletAddressSelector } from 'src/web3/selectors' -type Props = NativeStackScreenProps +type Props = NativeStackScreenProps export const Account = ({ navigation, route }: Props) => { const dispatch = useDispatch() const { t } = useTranslation() const promptConfirmRemovalModal = route.params?.promptConfirmRemovalModal + const isTabNav = route.params?.isTabNav const revokeBottomSheetRef = useRef(null) const deleteAccountBottomSheetRef = useRef(null) @@ -306,7 +307,9 @@ export const Account = ({ navigation, route }: Props) => { const pinIsCorrect = await ensurePincode() if (pinIsCorrect) { ValoraAnalytics.track(SettingsEvents.start_account_removal) - navigate(Screens.BackupPhrase, { navigatedFromSettings: true }) + navigate(Screens.BackupPhrase, { + settingsScreen: isTabNav ? Screens.Settings : Screens.SettingsDrawer, + }) } } catch (error) { Logger.error('SettingsItem@onPress', 'PIN ensure error', error) @@ -435,8 +438,11 @@ export const Account = ({ navigation, route }: Props) => { } return ( - - + + {!isTabNav && } diff --git a/src/account/Support.test.tsx b/src/account/Support.test.tsx index 05da7e0043b..cb4e2a09ca9 100644 --- a/src/account/Support.test.tsx +++ b/src/account/Support.test.tsx @@ -7,12 +7,12 @@ import { FAQ_LINK, FORUM_LINK } from 'src/config' import { navigate } from 'src/navigator/NavigationService' import { Screens } from 'src/navigator/Screens' import { navigateToURI } from 'src/utils/linking' -import { createMockStore } from 'test/utils' +import { createMockStore, getMockStackScreenProps } from 'test/utils' const renderSupport = () => render( - + ) diff --git a/src/account/Support.tsx b/src/account/Support.tsx index 93535480ca9..f5664e76bf3 100644 --- a/src/account/Support.tsx +++ b/src/account/Support.tsx @@ -1,3 +1,4 @@ +import { NativeStackScreenProps } from '@react-navigation/native-stack' import * as React from 'react' import { useTranslation } from 'react-i18next' import { ScrollView, StyleSheet, Text, View } from 'react-native' @@ -7,21 +8,28 @@ import { FAQ_LINK, FORUM_LINK } from 'src/config' import DrawerTopBar from 'src/navigator/DrawerTopBar' import { navigate } from 'src/navigator/NavigationService' import { Screens } from 'src/navigator/Screens' +import { StackParamList } from 'src/navigator/types' import fontStyles from 'src/styles/fonts' import { navigateToURI } from 'src/utils/linking' +type Props = NativeStackScreenProps + const openExternalLink = (link: string) => () => navigateToURI(link) const onPressContact = () => { navigate(Screens.SupportContact) } -const Support = () => { +const Support = ({ navigation, route }: Props) => { const { t } = useTranslation() + const isTabNav = route.params?.isTabNav return ( - - + + {!isTabNav && } {t('help')} diff --git a/src/backup/BackupComplete.tsx b/src/backup/BackupComplete.tsx index 8a6df46cc6f..5a2cfefb3b4 100644 --- a/src/backup/BackupComplete.tsx +++ b/src/backup/BackupComplete.tsx @@ -22,14 +22,18 @@ import fontStyles from 'src/styles/fonts' type Props = NativeStackScreenProps function BackupComplete({ route }: Props) { - const navigatedFromSettings = route.params?.navigatedFromSettings ?? false + const settingsScreen = route.params?.settingsScreen ?? undefined const backupCompleted = useSelector(backupCompletedSelector) const { t } = useTranslation() useEffect(() => { const timer = setTimeout(() => { - if (navigatedFromSettings) { - navigate(Screens.Settings, { promptConfirmRemovalModal: true }) + if (settingsScreen) { + // TODO(ACT-1133): change settingsScreen props to isAccountRemoval boolean to know if we need to go back to settings to show promptConfirmRemovalModal + navigate(settingsScreen === Screens.Settings ? Screens.Settings : Screens.SettingsDrawer, { + promptConfirmRemovalModal: true, + isTabNav: settingsScreen === Screens.Settings, + }) } else if (backupCompleted) { ValoraAnalytics.track(OnboardingEvents.backup_complete) navigateHome() diff --git a/src/backup/BackupPhrase.test.tsx b/src/backup/BackupPhrase.test.tsx index fdc3be2bb95..af2b78fabb7 100644 --- a/src/backup/BackupPhrase.test.tsx +++ b/src/backup/BackupPhrase.test.tsx @@ -7,32 +7,38 @@ import BackupPhrase from 'src/backup/BackupPhrase' import { Screens } from 'src/navigator/Screens' import { createMockStore, getMockStackScreenProps } from 'test/utils' -it('renders correctly with backup not completed', () => { - const tree = render( - - - - ) - expect(tree).toMatchSnapshot() -}) +describe.each([ + { settingsScreen: Screens.SettingsDrawer }, + { settingsScreen: Screens.Settings }, + {}, +])('BackupPhrase (settingsScreen: $settingsScreen)', (routeParams) => { + it('renders correctly with backup not completed', () => { + const tree = render( + + + + ) + expect(tree).toMatchSnapshot() + }) -it('renders correctly with backup completed', () => { - const tree = render( - - - - ) - expect(tree).toMatchSnapshot() -}) + it('renders correctly with backup completed', () => { + const tree = render( + + + + ) + expect(tree).toMatchSnapshot() + }) -it('still renders when mnemonic doesnt show up', () => { - const mockGetGenericPassword = Keychain.getGenericPassword as jest.Mock - mockGetGenericPassword.mockResolvedValue(null) + it('still renders when mnemonic doesnt show up', () => { + const mockGetGenericPassword = Keychain.getGenericPassword as jest.Mock + mockGetGenericPassword.mockResolvedValue(null) - const tree = render( - - - - ) - expect(tree).toMatchSnapshot() + const tree = render( + + + + ) + expect(tree).toMatchSnapshot() + }) }) diff --git a/src/backup/BackupPhrase.tsx b/src/backup/BackupPhrase.tsx index ce1107a8993..76fcd7f5fee 100644 --- a/src/backup/BackupPhrase.tsx +++ b/src/backup/BackupPhrase.tsx @@ -97,23 +97,22 @@ class BackupPhrase extends React.Component { onPressContinue = () => { ValoraAnalytics.track(OnboardingEvents.backup_continue) - navigate(Screens.BackupQuiz, { navigatedFromSettings: this.navigatedFromSettings() }) + navigate(Screens.BackupQuiz, { settingsScreen: this.settingsScreen() }) } - navigatedFromSettings = () => { - return this.props.route.params?.navigatedFromSettings ?? false + settingsScreen = () => { + return this.props.route.params?.settingsScreen ?? undefined } render() { const { t, backupCompleted } = this.props const { mnemonic, isConfirmChecked } = this.state - const navigatedFromSettings = this.navigatedFromSettings() return ( ) : ( @@ -129,7 +128,7 @@ class BackupPhrase extends React.Component { /> {t('backupKeyWarning')} - {(!backupCompleted || navigatedFromSettings) && ( + {(!backupCompleted || this.settingsScreen()) && ( <> { const store = createMockStore() - beforeEach(() => { - // According to the react-native-testing-library docs, if we're using - // fake timers, tests that use async/await will stall. - jest.useRealTimers() - }) - it('renders correctly', async () => { const { getByTestId, toJSON } = render( @@ -37,6 +33,38 @@ describe('BackupQuiz', () => { expect(toJSON()).toMatchSnapshot() }) + it('Cancel navigates correctly when no settingScreen passed', () => { + const { getByText, getByTestId } = render( + + + + ) + + fireEvent.press(getByTestId('CancelButton')) + expect(getByText('cancelDialog.title')).toBeTruthy() + expect(getByText('cancelDialog.body')).toBeTruthy() + }) + + it.each([{ settingsScreen: Screens.SettingsDrawer }, { settingsScreen: Screens.Settings }])( + 'Cancel navigates correctly (settingsScreen: $settingsScreen)', + (routeParams) => { + const { getByTestId } = render( + + + + ) + + fireEvent.press(getByTestId('CancelButton')) + expect(navigate).toBeCalledWith(routeParams.settingsScreen, { + isTabNav: routeParams.settingsScreen === Screens.Settings, + }) + } + ) + describe('when word is pressed', () => { it('removes it from the options adds it to chosen words', async () => { const mockSetBackupCompleted = jest.fn() @@ -72,14 +100,8 @@ describe('BackupQuiz', () => { }) }) - /** - * Note(Rossy): Unfortunately I have to skip this test for now. - * The test must wait for buttons to be ready, and which takes - * in total over 10 seconds for all 24 mnemonic words. Maybe the - * test renderer perf will improve at some point and we can enable this. - */ - // eslint-disable-next-line jest/no-disabled-tests - it.skip('can complete the quiz correctly', async () => { + it('can complete the quiz correctly', async () => { + jest.useFakeTimers() const mockSetBackupCompleted = jest.fn() const { getByText, getByTestId } = render( @@ -96,7 +118,9 @@ describe('BackupQuiz', () => { await waitFor(() => getByText(word)) fireEvent.press(getByText(word)) } + fireEvent.press(getByTestId('QuizSubmit')) + jest.advanceTimersByTime(2000) expect(mockSetBackupCompleted).toHaveBeenCalled() }) }) diff --git a/src/backup/BackupQuiz.tsx b/src/backup/BackupQuiz.tsx index 2a17b842fe7..85ba06f0748 100644 --- a/src/backup/BackupQuiz.tsx +++ b/src/backup/BackupQuiz.tsx @@ -73,15 +73,22 @@ const mapStateToProps = (state: RootState): StateProps => { } export const navOptionsForQuiz = ({ route }: OwnProps) => { - const navigatedFromSettings = route.params?.navigatedFromSettings - const onCancel = () => { - navigate(Screens.Settings) - } + const settingsScreen = route.params?.settingsScreen ?? undefined return { ...emptyHeader, headerLeft: () => { - return navigatedFromSettings ? ( - + return settingsScreen ? ( + + navigate( + settingsScreen === Screens.Settings ? Screens.Settings : Screens.SettingsDrawer, + { + isTabNav: settingsScreen === Screens.Settings, + } + ) + } + style={styles.cancelButton} + /> ) : ( ) @@ -188,8 +195,8 @@ export class BackupQuiz extends React.Component { if (lengthsMatch && contentMatches(userChosenWords, mnemonic)) { Logger.debug(TAG, 'Backup quiz passed') this.props.setBackupCompleted() - const navigatedFromSettings = this.props.route.params?.navigatedFromSettings ?? false - navigate(Screens.BackupComplete, { navigatedFromSettings }) + const settingsScreen = this.props.route.params?.settingsScreen ?? undefined + navigate(Screens.BackupComplete, { settingsScreen }) ValoraAnalytics.track(OnboardingEvents.backup_quiz_complete) } else { Logger.debug(TAG, 'Backup quiz failed, reseting words') diff --git a/src/backup/__snapshots__/BackupPhrase.test.tsx.snap b/src/backup/__snapshots__/BackupPhrase.test.tsx.snap index 3487beb6d87..16368157843 100644 --- a/src/backup/__snapshots__/BackupPhrase.test.tsx.snap +++ b/src/backup/__snapshots__/BackupPhrase.test.tsx.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`renders correctly with backup completed 1`] = ` +exports[`BackupPhrase (settingsScreen: {}) renders correctly with backup completed 1`] = ` `; -exports[`renders correctly with backup not completed 1`] = ` +exports[`BackupPhrase (settingsScreen: {}) renders correctly with backup not completed 1`] = ` `; -exports[`still renders when mnemonic doesnt show up 1`] = ` +exports[`BackupPhrase (settingsScreen: {}) still renders when mnemonic doesnt show up 1`] = ` + + + + + + + cancel + + + + + + + moreInfo + + + + + + + + + + + writeDownKeyExperimental + + + + + + + backupKeyWarning + + + + +`; + +exports[`BackupPhrase (settingsScreen: Settings) renders correctly with backup completed 1`] = ` + + + + + + + cancel + + + + + + + moreInfo + + + + + + + + + + + writeDownKeyExperimental + + + + + + + backupKeyWarning + + + + +`; + +exports[`BackupPhrase (settingsScreen: Settings) renders correctly with backup not completed 1`] = ` + + + + + + + cancel + + + + + + + moreInfo + + + + + + + + + + + writeDownKeyExperimental + + + + + + + backupKeyWarning + + + + + + + savedConfirmation + + + + + + + continue + + + + + +`; + +exports[`BackupPhrase (settingsScreen: Settings) still renders when mnemonic doesnt show up 1`] = ` + + + + + + + cancel + + + + + + + moreInfo + + + + + + + + + + + writeDownKeyExperimental + + + + + + + backupKeyWarning + + + + +`; + +exports[`BackupPhrase (settingsScreen: SettingsDrawer) renders correctly with backup completed 1`] = ` + + + + + + + cancel + + + + + + + moreInfo + + + + + + + + + + + writeDownKeyExperimental + + + + + + + backupKeyWarning + + + + +`; + +exports[`BackupPhrase (settingsScreen: SettingsDrawer) renders correctly with backup not completed 1`] = ` + + + + + + + cancel + + + + + + + moreInfo + + + + + + + + + + + writeDownKeyExperimental + + + + + + + backupKeyWarning + + + + + + + savedConfirmation + + + + + + + continue + + + + + +`; + +exports[`BackupPhrase (settingsScreen: SettingsDrawer) still renders when mnemonic doesnt show up 1`] = ` { expect(getByTestId('KeylessBackupProgress/Later')).toBeTruthy() fireEvent.press(getByTestId('KeylessBackupProgress/Later')) - expect(navigate).toHaveBeenCalledTimes(1) - expect(navigate).toHaveBeenCalledWith(Screens.Settings) + expect(navigateHome).toHaveBeenCalledTimes(1) expect(ValoraAnalytics.track).toHaveBeenCalledTimes(1) expect(ValoraAnalytics.track).toHaveBeenCalledWith( KeylessBackupEvents.cab_progress_failed_later diff --git a/src/keylessBackup/KeylessBackupProgress.tsx b/src/keylessBackup/KeylessBackupProgress.tsx index 19d3e8bd993..c6568c4c101 100644 --- a/src/keylessBackup/KeylessBackupProgress.tsx +++ b/src/keylessBackup/KeylessBackupProgress.tsx @@ -273,7 +273,7 @@ function Setup() { const onPressLater = () => { ValoraAnalytics.track(KeylessBackupEvents.cab_progress_failed_later) - navigate(Screens.Settings) + navigateHome() } switch (keylessBackupStatus) { diff --git a/src/navigator/DrawerNavigator.tsx b/src/navigator/DrawerNavigator.tsx index b956ccd507d..b48b15f6556 100644 --- a/src/navigator/DrawerNavigator.tsx +++ b/src/navigator/DrawerNavigator.tsx @@ -318,7 +318,7 @@ export default function DrawerNavigator({ route }: Props) { /> )} }} /> diff --git a/src/navigator/Navigator.tsx b/src/navigator/Navigator.tsx index 4cee262c835..7c9f495a410 100644 --- a/src/navigator/Navigator.tsx +++ b/src/navigator/Navigator.tsx @@ -12,7 +12,9 @@ import AccounSetupFailureScreen from 'src/account/AccountSetupFailureScreen' import GoldEducation from 'src/account/GoldEducation' import Licenses from 'src/account/Licenses' import Profile from 'src/account/Profile' +import SettingsScreen from 'src/account/Settings' import StoreWipeRecoveryScreen from 'src/account/StoreWipeRecoveryScreen' +import Support from 'src/account/Support' import SupportContact from 'src/account/SupportContact' import AppLoading from 'src/app/AppLoading' import Debug from 'src/app/Debug' @@ -56,6 +58,7 @@ import KycPending from 'src/fiatconnect/kyc/KycPending' import NotificationCenter from 'src/home/NotificationCenter' import { currentLanguageSelector } from 'src/i18n/selectors' import ImportWallet from 'src/import/ImportWallet' +import Invite from 'src/invite/Invite' import JumpstartEnterAmount from 'src/jumpstart/JumpstartEnterAmount' import JumpstartSendConfirmation from 'src/jumpstart/JumpstartSendConfirmation' import JumpstartShareLink from 'src/jumpstart/JumpstartShareLink' @@ -521,6 +524,13 @@ const generalScreens = (Navigator: typeof Stack) => ( component={ProfileMenu} options={ProfileMenu.navigationOptions as NativeStackNavigationOptions} /> + + + ) diff --git a/src/navigator/ProfileMenu.test.tsx b/src/navigator/ProfileMenu.test.tsx index 1fabd133fe3..3b806acbca3 100644 --- a/src/navigator/ProfileMenu.test.tsx +++ b/src/navigator/ProfileMenu.test.tsx @@ -1,8 +1,10 @@ -import { render } from '@testing-library/react-native' +import { fireEvent, render } from '@testing-library/react-native' import * as React from 'react' import 'react-native' import { Provider } from 'react-redux' +import { navigate } from 'src/navigator/NavigationService' import ProfileMenu from 'src/navigator/ProfileMenu' +import { Screens } from 'src/navigator/Screens' import { getDynamicConfigParams } from 'src/statsig' import { NetworkId } from 'src/transactions/types' import MockedNavigator from 'test/MockedNavigator' @@ -122,4 +124,19 @@ describe('ProfileMenu', () => { expect(getByText(expectedText)).toBeTruthy() }) }) + it('menu items navigate to appropriate screens', () => { + const store = createMockStore() + const { getByTestId } = render( + + + + ) + fireEvent.press(getByTestId('ProfileMenu/Invite')) + fireEvent.press(getByTestId('ProfileMenu/Settings')) + fireEvent.press(getByTestId('ProfileMenu/Help')) + expect(navigate).toHaveBeenCalledTimes(3) + expect(navigate).toHaveBeenNthCalledWith(1, Screens.Invite) + expect(navigate).toHaveBeenNthCalledWith(2, Screens.Settings, { isTabNav: true }) + expect(navigate).toHaveBeenNthCalledWith(3, Screens.Support, { isTabNav: true }) + }) }) diff --git a/src/navigator/ProfileMenu.tsx b/src/navigator/ProfileMenu.tsx index c7077cbbbae..dae63e88547 100644 --- a/src/navigator/ProfileMenu.tsx +++ b/src/navigator/ProfileMenu.tsx @@ -65,13 +65,19 @@ export default function ProfileMenu({ route }: Props) { {t('invite')} - navigate(Screens.Settings)}> + navigate(Screens.Settings, { isTabNav: true })} + > {t('settings')} - navigate(Screens.Support)}> + navigate(Screens.Support, { isTabNav: true })} + > {t('help')} diff --git a/src/navigator/Screens.tsx b/src/navigator/Screens.tsx index d4b0091ebb5..bbb9c269bda 100644 --- a/src/navigator/Screens.tsx +++ b/src/navigator/Screens.tsx @@ -36,6 +36,7 @@ export enum Screens { ImportSelect = 'ImportSelect', ImportWallet = 'ImportWallet', Invite = 'Invite', + InviteDrawer = 'InviteDrawer', JumpstartEnterAmount = 'JumpstartEnterAmount', JumpstartSendConfirmation = 'JumpstartSendConfirmation', JumpstartShareLink = 'JumpstartShareLink', @@ -78,11 +79,13 @@ export enum Screens { SendConfirmationModal = 'SendConfirmationModal', SendEnterAmount = 'SendEnterAmount', Settings = 'Settings', + SettingsDrawer = 'SettingsDrawer', SignInWithEmail = 'SignInWithEmail', Simplex = 'Simplex', Spend = 'Spend', StoreWipeRecoveryScreen = 'StoreWipeRecoveryScreen', Support = 'Support', + SupportDrawer = 'SupportDrawer', SupportContact = 'SupportContact', SwapScreenWithBack = 'SwapScreenWithBack', TabNavigator = 'TabNavigator', diff --git a/src/navigator/types.tsx b/src/navigator/types.tsx index f464457cfa1..bc34e4562c6 100644 --- a/src/navigator/types.tsx +++ b/src/navigator/types.tsx @@ -54,7 +54,7 @@ export type StackParamList = { [Screens.BackupComplete]: | undefined | { - navigatedFromSettings: boolean + settingsScreen: Screens | undefined } [Screens.BackupIntroduction]: | { @@ -70,12 +70,12 @@ export type StackParamList = { [Screens.BackupPhrase]: | undefined | { - navigatedFromSettings: boolean + settingsScreen: Screens | undefined } [Screens.BackupQuiz]: | undefined | { - navigatedFromSettings: boolean + settingsScreen: Screens | undefined } [Screens.FiatDetailsScreen]: { quote: FiatConnectQuote @@ -184,6 +184,7 @@ export type StackParamList = { } | undefined [Screens.Invite]: undefined + [Screens.InviteDrawer]: undefined [Screens.NameAndPicture]: undefined [Screens.EnableBiometry]: undefined [Screens.Language]: @@ -264,13 +265,15 @@ export type StackParamList = { sendAmount: string tokenId: string } - [Screens.Settings]: { promptConfirmRemovalModal?: boolean } | undefined + [Screens.Settings]: { promptConfirmRemovalModal?: boolean; isTabNav?: boolean } | undefined + [Screens.SettingsDrawer]: { promptConfirmRemovalModal?: boolean; isTabNav?: boolean } | undefined [Screens.SignInWithEmail]: { keylessBackupFlow: KeylessBackupFlow } [Screens.Spend]: undefined [Screens.StoreWipeRecoveryScreen]: undefined - [Screens.Support]: undefined + [Screens.Support]: { isTabNav?: boolean } | undefined + [Screens.SupportDrawer]: { isTabNav?: boolean } | undefined [Screens.SupportContact]: | { prefilledText: string diff --git a/src/pincode/PincodeSet.test.tsx b/src/pincode/PincodeSet.test.tsx index 6fc5ace2214..0488cf55dca 100644 --- a/src/pincode/PincodeSet.test.tsx +++ b/src/pincode/PincodeSet.test.tsx @@ -1,7 +1,7 @@ import { act, fireEvent, render } from '@testing-library/react-native' import * as React from 'react' import { Provider } from 'react-redux' -import { navigate } from 'src/navigator/NavigationService' +import { navigateBack } from 'src/navigator/NavigationService' import { Screens } from 'src/navigator/Screens' import { goToNextOnboardingScreen } from 'src/onboarding/steps' import { DEFAULT_CACHE_ACCOUNT, updatePin } from 'src/pincode/authentication' @@ -166,7 +166,7 @@ describe('Pincode', () => { }) expect(updatePin).toHaveBeenCalledWith(mockAccount.toLowerCase(), oldPin, mockPin) - expect(navigate).toBeCalledWith(Screens.Settings) + expect(navigateBack).toBeCalled() }) it('renders header subtitle with steps when creating new wallet', () => { diff --git a/src/pincode/PincodeSet.tsx b/src/pincode/PincodeSet.tsx index abcb0820447..cd2ccce6762 100644 --- a/src/pincode/PincodeSet.tsx +++ b/src/pincode/PincodeSet.tsx @@ -21,7 +21,7 @@ import { nuxNavigationOptions, nuxNavigationOptionsOnboarding, } from 'src/navigator/Headers' -import { navigate } from 'src/navigator/NavigationService' +import { navigateBack } from 'src/navigator/NavigationService' import { Screens } from 'src/navigator/Screens' import { StackParamList } from 'src/navigator/types' import { @@ -153,7 +153,7 @@ export class PincodeSet extends React.Component { navigateToNextScreen = () => { if (this.isChangingPin()) { - navigate(Screens.Settings) + navigateBack() } else { goToNextOnboardingScreen({ firstScreenInCurrentStep: Screens.PincodeSet, diff --git a/test/RootStateSchema.json b/test/RootStateSchema.json index c556ea4039c..589928e3e2b 100644 --- a/test/RootStateSchema.json +++ b/test/RootStateSchema.json @@ -2624,6 +2624,7 @@ "ImportSelect", "ImportWallet", "Invite", + "InviteDrawer", "JumpstartEnterAmount", "JumpstartSendConfirmation", "JumpstartShareLink", @@ -2666,12 +2667,14 @@ "SendEnterAmount", "SendSelectRecipient", "Settings", + "SettingsDrawer", "SignInWithEmail", "Simplex", "Spend", "StoreWipeRecoveryScreen", "Support", "SupportContact", + "SupportDrawer", "SwapScreenWithBack", "TabDiscover", "TabHome",