Skip to content
Merged
11 changes: 4 additions & 7 deletions src/ROUTES.ts
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,10 @@ const DYNAMIC_ROUTES = {
getRoute: (country = '') => `country?country=${country}`,
queryParams: ['country'],
},
KEYBOARD_SHORTCUTS: {
path: 'keyboard-shortcuts',
entryScreens: ['*'],
},
DETAILS_CONSTANT_PICKER: {
path: 'constant-picker',
entryScreens: [SCREENS.DEBUG.REPORT, SCREENS.DEBUG.REPORT_ACTION, SCREENS.DEBUG.TRANSACTION, SCREENS.DEBUG.TRANSACTION_VIOLATION],
Expand Down Expand Up @@ -688,13 +692,6 @@ const ROUTES = {

SETTINGS_SAVE_THE_WORLD: 'settings/teachersunite',

KEYBOARD_SHORTCUTS: {
route: 'keyboard-shortcuts',

// eslint-disable-next-line no-restricted-syntax -- Legacy route generation
getRoute: (backTo?: string) => getUrlWithBackToParam('keyboard-shortcuts', backTo),
},

NEW: 'new',
NEW_CHAT: 'new/chat',
NEW_CHAT_CONFIRM: 'new/chat/confirm',
Expand Down
2 changes: 1 addition & 1 deletion src/SCREENS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ const SCREENS = {
HELP: 'Settings_Help',
DYNAMIC_VERIFY_ACCOUNT: 'Dynamic_Verify_Account',
DYNAMIC_ADD_BANK_ACCOUNT_VERIFY_ACCOUNT: 'Dynamic_Add_Bank_Account_Verify_Account',
DYNAMIC_KEYBOARD_SHORTCUTS: 'Dynamic_Keyboard_Shortcuts',

PROFILE: {
ROOT: 'Settings_Profile',
Expand Down Expand Up @@ -910,7 +911,6 @@ const SCREENS = {
REFERRAL_DETAILS: 'Referral_Details',
REPORT_VERIFY_ACCOUNT: 'Report_Verify_Account',
EXPENSE_REPORT_VERIFY_ACCOUNT: 'Expense_Report_Verify_Account',
KEYBOARD_SHORTCUTS: 'KeyboardShortcuts',
SHARE: {
ROOT: 'Share_Root',
SHARE_DETAILS: 'Share_Details',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
import {useEffect} from 'react';
import useShouldShowRequire2FAPage from '@hooks/useShouldShowRequire2FAPage';
import KeyboardShortcut from '@libs/KeyboardShortcut';
import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute';
import findMatchingDynamicSuffix from '@libs/Navigation/helpers/dynamicRoutesUtils/findMatchingDynamicSuffix';
import Navigation from '@libs/Navigation/Navigation';
import * as Modal from '@userActions/Modal';
import CONST from '@src/CONST';
import ROUTES from '@src/ROUTES';
import {DYNAMIC_ROUTES} from '@src/ROUTES';

const KEYBOARD_SHORTCUTS_PATH = DYNAMIC_ROUTES.KEYBOARD_SHORTCUTS.path;

function ShortcutsOverviewHandler() {
const shouldShowRequire2FAPage = useShouldShowRequire2FAPage();
Expand All @@ -19,10 +23,11 @@ function ShortcutsOverviewHandler() {
return;
}

if (Navigation.isActiveRoute(ROUTES.KEYBOARD_SHORTCUTS.getRoute(Navigation.getActiveRoute()))) {
const activeRoute = Navigation.getActiveRoute();
if (findMatchingDynamicSuffix(activeRoute) === KEYBOARD_SHORTCUTS_PATH) {
return;
}
return Navigation.navigate(ROUTES.KEYBOARD_SHORTCUTS.getRoute(Navigation.getActiveRoute()));
return Navigation.navigate(createDynamicRoute(KEYBOARD_SHORTCUTS_PATH));
});
},
shortcutConfig.descriptionKey,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -633,7 +633,7 @@ const SettingsModalStackNavigator = createModalStackNavigator<SettingsNavigatorP
[SCREENS.REIMBURSEMENT_ACCOUNT_ENTER_SIGNER_INFO]: () => require<ReactComponentModule>('../../../../pages/ReimbursementAccount/EnterSignerInfo').default,
[SCREENS.SETTINGS.REPORT_CARD_LOST_OR_DAMAGED]: () => require<ReactComponentModule>('../../../../pages/settings/Wallet/ReportCardLostPage').default,
[SCREENS.SETTINGS.REPORT_CARD_LOST_OR_DAMAGED_CONFIRM_MAGIC_CODE]: () => require<ReactComponentModule>('../../../../pages/settings/Wallet/ReportCardLostConfirmMagicCodePage').default,
[SCREENS.KEYBOARD_SHORTCUTS]: () => require<ReactComponentModule>('../../../../pages/KeyboardShortcutsPage').default,
[SCREENS.SETTINGS.DYNAMIC_KEYBOARD_SHORTCUTS]: () => require<ReactComponentModule>('../../../../pages/settings/DynamicKeyboardShortcutsPage').default,
[SCREENS.SETTINGS.EXIT_SURVEY.REASON]: () => require<ReactComponentModule>('../../../../pages/settings/ExitSurvey/ExitSurveyReasonPage').default,
[SCREENS.SETTINGS.EXIT_SURVEY.CONFIRM]: () => require<ReactComponentModule>('../../../../pages/settings/ExitSurvey/ExitSurveyConfirmPage').default,
[SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_IMPORT]: () => require<ReactComponentModule>('../../../../pages/workspace/accounting/qbo/import/QuickbooksImportPage').default,
Expand Down
4 changes: 1 addition & 3 deletions src/libs/Navigation/linkingConfig/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1177,9 +1177,7 @@ const config: LinkingOptions<RootNavigatorParamList>['config'] = {
exact: true,
},
[SCREENS.REIMBURSEMENT_ACCOUNT_ENTER_SIGNER_INFO]: ROUTES.BANK_ACCOUNT_ENTER_SIGNER_INFO.route,
[SCREENS.KEYBOARD_SHORTCUTS]: {
path: ROUTES.KEYBOARD_SHORTCUTS.route,
},
[SCREENS.SETTINGS.DYNAMIC_KEYBOARD_SHORTCUTS]: DYNAMIC_ROUTES.KEYBOARD_SHORTCUTS.path,
[SCREENS.WORKSPACE.NAME]: ROUTES.WORKSPACE_OVERVIEW_NAME.route,
[SCREENS.SETTINGS.SHARE_CODE]: {
path: ROUTES.SETTINGS_SHARE_CODE,
Expand Down
5 changes: 1 addition & 4 deletions src/libs/Navigation/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1194,10 +1194,7 @@ type SettingsNavigatorParamList = {
/** Reason for replacing the card */
reason: ReplacementReason;
};
[SCREENS.KEYBOARD_SHORTCUTS]: {
// eslint-disable-next-line no-restricted-syntax -- `backTo` usages in this file are legacy. Do not add new `backTo` params to screens. See contributingGuides/NAVIGATION.md
backTo: Routes;
};
[SCREENS.SETTINGS.DYNAMIC_KEYBOARD_SHORTCUTS]: undefined;
[SCREENS.SETTINGS.EXIT_SURVEY.REASON]: {
// eslint-disable-next-line no-restricted-syntax -- `backTo` usages in this file are legacy. Do not add new `backTo` params to screens. See contributingGuides/NAVIGATION.md
backTo: Routes;
Expand Down
5 changes: 3 additions & 2 deletions src/pages/settings/AboutPage/AboutPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import useResponsiveLayout from '@hooks/useResponsiveLayout';
import useThemeStyles from '@hooks/useThemeStyles';
import useWaitForNavigation from '@hooks/useWaitForNavigation';
import {isInternalTestBuild} from '@libs/Environment/Environment';
import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute';
import Navigation from '@libs/Navigation/Navigation';
import {showContextMenu} from '@pages/inbox/report/ContextMenu/ReportActionContextMenu';
import colors from '@styles/theme/colors';
Expand All @@ -28,7 +29,7 @@ import {navigateToConciergeChat} from '@userActions/Report';
import CONST from '@src/CONST';
import type {TranslationPaths} from '@src/languages/types';
import ONYXKEYS from '@src/ONYXKEYS';
import ROUTES from '@src/ROUTES';
import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES';
import type IconAsset from '@src/types/utils/IconAsset';
import type WithSentryLabel from '@src/types/utils/SentryLabel';
import pkg from '../../../../package.json';
Expand Down Expand Up @@ -82,7 +83,7 @@ function AboutPage() {
translationKey: 'initialSettingsPage.aboutPage.viewKeyboardShortcuts',
icon: icons.Keyboard,
sentryLabel: CONST.SENTRY_LABEL.SETTINGS_ABOUT.VIEW_KEYBOARD_SHORTCUTS,
action: waitForNavigate(() => Navigation.navigate(ROUTES.KEYBOARD_SHORTCUTS.getRoute(Navigation.getActiveRoute()))),
action: waitForNavigate(() => Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.KEYBOARD_SHORTCUTS.path))),
},
{
translationKey: 'initialSettingsPage.aboutPage.viewTheCode',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,32 +1,28 @@
import type {RouteProp} from '@react-navigation/native';
import React from 'react';
import {View} from 'react-native';
import HeaderWithBackButton from '@components/HeaderWithBackButton';
import MenuItem from '@components/MenuItem';
import ScreenWrapper from '@components/ScreenWrapper';
import ScrollView from '@components/ScrollView';
import Text from '@components/Text';
import useDynamicBackPath from '@hooks/useDynamicBackPath';
import useLocalize from '@hooks/useLocalize';
import useThemeStyles from '@hooks/useThemeStyles';
import KeyboardShortcut from '@libs/KeyboardShortcut';
import Navigation from '@libs/Navigation/Navigation';
import type {SettingsNavigatorParamList} from '@libs/Navigation/types';
import CONST from '@src/CONST';
import type SCREENS from '@src/SCREENS';
import {DYNAMIC_ROUTES} from '@src/ROUTES';

type Shortcut = {
displayName: string;
descriptionKey: 'search' | 'newChat' | 'openShortcutDialog' | 'escape' | 'copy';
};

type KeyboardShortcutsPageProps = {
route: RouteProp<SettingsNavigatorParamList, typeof SCREENS.KEYBOARD_SHORTCUTS>;
};

function KeyboardShortcutsPage({route}: KeyboardShortcutsPageProps) {
function DynamicKeyboardShortcutsPage() {
const styles = useThemeStyles();
const {translate} = useLocalize();
const backTo = route.params.backTo;
const backPath = useDynamicBackPath(DYNAMIC_ROUTES.KEYBOARD_SHORTCUTS.path);

const shortcuts = Object.values(CONST.KEYBOARD_SHORTCUTS)
.map((shortcut) => {
const platformAdjustedModifiers = KeyboardShortcut.getPlatformEquivalentForKeys(shortcut.modifiers);
Expand All @@ -36,10 +32,7 @@ function KeyboardShortcutsPage({route}: KeyboardShortcutsPageProps) {
};
})
.filter((shortcut): shortcut is Shortcut => !!shortcut.descriptionKey);
/**
* Render the information of a single shortcut
* @param shortcut - The shortcut to render
*/

const renderShortcut = (shortcut: Shortcut) => (
<MenuItem
key={shortcut.displayName}
Expand All @@ -57,7 +50,7 @@ function KeyboardShortcutsPage({route}: KeyboardShortcutsPageProps) {
>
<HeaderWithBackButton
title={translate('keyboardShortcutsPage.title')}
onBackButtonPress={() => Navigation.goBack(backTo)}
onBackButtonPress={() => Navigation.goBack(backPath)}
/>
<ScrollView contentContainerStyle={styles.flexGrow1}>
<View style={[styles.ph5, styles.pv3]}>
Expand All @@ -69,4 +62,4 @@ function KeyboardShortcutsPage({route}: KeyboardShortcutsPageProps) {
);
}

export default KeyboardShortcutsPage;
export default DynamicKeyboardShortcutsPage;
4 changes: 4 additions & 0 deletions tests/navigation/findMatchingDynamicSuffixTests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,8 @@ describe('findMatchingDynamicSuffix', () => {
it('should match a suffix when path has suffix-specific query params', () => {
expect(findMatchingDynamicSuffix('settings/profile/address/country?country=US')).toBe('country');
});

it('should match keyboard-shortcuts dynamic suffix', () => {
expect(findMatchingDynamicSuffix('settings/about/keyboard-shortcuts')).toBe('keyboard-shortcuts');
});
});
Loading