diff --git a/config/eslint/eslint.seatbelt.tsv b/config/eslint/eslint.seatbelt.tsv index 229b48c4ca98..d82427cbebe5 100644 --- a/config/eslint/eslint.seatbelt.tsv +++ b/config/eslint/eslint.seatbelt.tsv @@ -68,7 +68,7 @@ "../../src/Expensify.tsx" "react-hooks/set-state-in-effect" 1 "../../src/GlobalModals.tsx" "no-restricted-syntax" 2 "../../src/ONYXKEYS.ts" "no-restricted-syntax" 2 -"../../src/ROUTES.ts" "@typescript-eslint/no-deprecated/getUrlWithBackToParam" 128 +"../../src/ROUTES.ts" "@typescript-eslint/no-deprecated/getUrlWithBackToParam" 127 "../../src/ROUTES.ts" "@typescript-eslint/no-unsafe-type-assertion" 3 "../../src/TIMEZONES.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/components/AccountingConnectionConfirmationModal.tsx" "@typescript-eslint/no-deprecated/ConfirmModal" 1 @@ -1339,7 +1339,6 @@ "../../src/pages/workspace/WorkspaceResetBankAccountModal.tsx" "@typescript-eslint/no-deprecated/ConfirmModal" 1 "../../src/pages/workspace/WorkspaceResetBankAccountModal.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/workspace/WorkspacesListPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 -"../../src/pages/workspace/WorkspacesListPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/WorkspacesListPage.tsx" "react-hooks/set-state-in-effect" 1 "../../src/pages/workspace/accounting/AccountingContext/default.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/workspace/accounting/ClaimOfferPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 diff --git a/src/ROUTES.ts b/src/ROUTES.ts index 25f1ae31b04e..975ea45b5faa 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -139,6 +139,16 @@ const DYNAMIC_ROUTES = { path: 'payment-card-currency', entryScreens: [SCREENS.SETTINGS.SUBSCRIPTION.CHANGE_BILLING_CURRENCY, SCREENS.SETTINGS.SUBSCRIPTION.ADD_PAYMENT_CARD, SCREENS.WORKSPACE.OWNER_CHANGE_CHECK], }, + DOWNGRADE_BLOCKED: { + path: 'downgrade-blocked', + entryScreens: [ + SCREENS.SETTINGS.SUBSCRIPTION.SETTINGS_DETAILS, + SCREENS.SETTINGS.SUBSCRIPTION.ROOT, + SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_OVERVIEW_PLAN, + SCREENS.WORKSPACE.PROFILE, + SCREENS.WORKSPACES_LIST, + ], + }, REPORT_SETTINGS_NAME: { path: 'settings/name', entryScreens: [SCREENS.REPORT_DETAILS.DYNAMIC_ROOT], @@ -1122,11 +1132,6 @@ const ROUTES = { SETTINGS_SUBSCRIPTION_CHANGE_BILLING_CURRENCY: 'settings/subscription/change-billing-currency', SETTINGS_SUBSCRIPTION_DISABLE_AUTO_RENEW_SURVEY: 'settings/subscription/disable-auto-renew-survey', SETTINGS_SUBSCRIPTION_CANCEL_SUBSCRIPTION: 'settings/subscription/cancel-subscription-survey', - SETTINGS_SUBSCRIPTION_DOWNGRADE_BLOCKED: { - route: 'settings/subscription/downgrade-blocked', - - getRoute: (backTo?: string) => getUrlWithBackToParam('settings/subscription/downgrade-blocked', backTo), - }, SETTINGS_PRIORITY_MODE: 'settings/preferences/priority-mode', SETTINGS_LANGUAGE: 'settings/preferences/language', SETTINGS_PAYMENT_CURRENCY: 'setting/preferences/payment-currency', diff --git a/src/SCREENS.ts b/src/SCREENS.ts index bf5697dac7ea..36294fb37caa 100644 --- a/src/SCREENS.ts +++ b/src/SCREENS.ts @@ -276,7 +276,7 @@ const SCREENS = { CHANGE_BILLING_CURRENCY: 'Settings_Subscription_Change_Billing_Currency', DYNAMIC_PAYMENT_CARD_CURRENCY_SELECTOR: 'Dynamic_Settings_Subscription_Payment_Card_Currency_Selector', CANCEL_SUBSCRIPTION: 'Settings_Subscription_CancelSubscription', - SUBSCRIPTION_DOWNGRADE_BLOCKED: 'Settings_Subscription_DowngradeBlocked', + DYNAMIC_DOWNGRADE_BLOCKED: 'Dynamic_Settings_Subscription_Downgrade_Blocked', }, }, TWO_FACTOR_AUTH: { diff --git a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx index d2e238fe3a95..06851f5d3355 100644 --- a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx +++ b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx @@ -552,8 +552,8 @@ const SettingsModalStackNavigator = createModalStackNavigator require('../../../../pages/settings/Subscription/DisableAutoRenewSurveyPage').default, ), [SCREENS.SETTINGS.SUBSCRIPTION.CANCEL_SUBSCRIPTION]: withAgentAccessDenied(() => require('../../../../pages/settings/Subscription/CancelSubscriptionPage').default), - [SCREENS.SETTINGS.SUBSCRIPTION.SUBSCRIPTION_DOWNGRADE_BLOCKED]: withAgentAccessDenied( - () => require('../../../../pages/settings/Subscription/SubscriptionPlan/SubscriptionPlanDowngradeBlockedPage').default, + [SCREENS.SETTINGS.SUBSCRIPTION.DYNAMIC_DOWNGRADE_BLOCKED]: withAgentAccessDenied( + () => require('../../../../pages/settings/Subscription/SubscriptionPlan/DynamicSubscriptionPlanDowngradeBlockedPage').default, ), [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_INVITE]: () => require('../../../../pages/workspace/DynamicWorkspaceInvitePage').default, [SCREENS.WORKSPACE.MEMBERS_IMPORT]: () => require('../../../../pages/workspace/members/ImportMembersPage').default, diff --git a/src/libs/Navigation/linkingConfig/RELATIONS/SETTINGS_TO_RHP.ts b/src/libs/Navigation/linkingConfig/RELATIONS/SETTINGS_TO_RHP.ts index c90a63e98ea5..c1fc68a3a85b 100755 --- a/src/libs/Navigation/linkingConfig/RELATIONS/SETTINGS_TO_RHP.ts +++ b/src/libs/Navigation/linkingConfig/RELATIONS/SETTINGS_TO_RHP.ts @@ -133,7 +133,6 @@ const SETTINGS_TO_RHP: Partial['config'] = { [SCREENS.SETTINGS.SUBSCRIPTION.CANCEL_SUBSCRIPTION]: { path: ROUTES.SETTINGS_SUBSCRIPTION_CANCEL_SUBSCRIPTION, }, - [SCREENS.SETTINGS.SUBSCRIPTION.SUBSCRIPTION_DOWNGRADE_BLOCKED]: { - path: ROUTES.SETTINGS_SUBSCRIPTION_DOWNGRADE_BLOCKED.route, - }, + [SCREENS.SETTINGS.SUBSCRIPTION.DYNAMIC_DOWNGRADE_BLOCKED]: DYNAMIC_ROUTES.DOWNGRADE_BLOCKED.path, [SCREENS.WORKSPACE.CURRENCY]: { path: ROUTES.WORKSPACE_OVERVIEW_CURRENCY.route, }, diff --git a/src/libs/Navigation/types.ts b/src/libs/Navigation/types.ts index 46f65ea248fa..29ecd7de3847 100644 --- a/src/libs/Navigation/types.ts +++ b/src/libs/Navigation/types.ts @@ -624,6 +624,7 @@ type SettingsNavigatorParamList = { [SCREENS.SETTINGS.SUBSCRIPTION.ADD_PAYMENT_CARD]: undefined; [SCREENS.SETTINGS.SUBSCRIPTION.CHANGE_BILLING_CURRENCY]: undefined; [SCREENS.SETTINGS.SUBSCRIPTION.DYNAMIC_PAYMENT_CARD_CURRENCY_SELECTOR]: undefined; + [SCREENS.SETTINGS.SUBSCRIPTION.DYNAMIC_DOWNGRADE_BLOCKED]: undefined; [SCREENS.WORKSPACE.TAXES_SETTINGS]: { policyID: string; }; diff --git a/src/pages/settings/Subscription/SubscriptionPlan/SubscriptionPlanDowngradeBlockedPage.tsx b/src/pages/settings/Subscription/SubscriptionPlan/DynamicSubscriptionPlanDowngradeBlockedPage.tsx similarity index 79% rename from src/pages/settings/Subscription/SubscriptionPlan/SubscriptionPlanDowngradeBlockedPage.tsx rename to src/pages/settings/Subscription/SubscriptionPlan/DynamicSubscriptionPlanDowngradeBlockedPage.tsx index 72a199890409..f562df31b217 100644 --- a/src/pages/settings/Subscription/SubscriptionPlan/SubscriptionPlanDowngradeBlockedPage.tsx +++ b/src/pages/settings/Subscription/SubscriptionPlan/DynamicSubscriptionPlanDowngradeBlockedPage.tsx @@ -3,23 +3,26 @@ import DelegateNoAccessWrapper from '@components/DelegateNoAccessWrapper'; import HeaderWithBackButton from '@components/HeaderWithBackButton'; import ScreenWrapper from '@components/ScreenWrapper'; import SubscriptionPlanDowngradeBlocked from '@components/SubscriptionPlanDowngradeBlocked'; +import useDynamicBackPath from '@hooks/useDynamicBackPath'; import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; import Navigation from '@navigation/Navigation'; import {formatSubscriptionEndDate} from '@pages/settings/Subscription/utils'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; +import {DYNAMIC_ROUTES} from '@src/ROUTES'; -function SubscriptionPlanDowngradeBlockedPage() { +function DynamicSubscriptionPlanDowngradeBlockedPage() { const {translate} = useLocalize(); const [privateSubscription] = useOnyx(ONYXKEYS.NVP_PRIVATE_SUBSCRIPTION); const formattedSubscriptionEndDate = formatSubscriptionEndDate(privateSubscription?.endDate); + const backPath = useDynamicBackPath(DYNAMIC_ROUTES.DOWNGRADE_BLOCKED.path); const onClosePress = () => { - Navigation.goBack(); + Navigation.goBack(backPath); }; return ( @@ -38,4 +41,4 @@ function SubscriptionPlanDowngradeBlockedPage() { ); } -export default SubscriptionPlanDowngradeBlockedPage; +export default DynamicSubscriptionPlanDowngradeBlockedPage; diff --git a/src/pages/settings/Subscription/SubscriptionPlan/SubscriptionPlanCardActionButton.tsx b/src/pages/settings/Subscription/SubscriptionPlan/SubscriptionPlanCardActionButton.tsx index ce0cc92381be..2efed128dc9c 100644 --- a/src/pages/settings/Subscription/SubscriptionPlan/SubscriptionPlanCardActionButton.tsx +++ b/src/pages/settings/Subscription/SubscriptionPlan/SubscriptionPlanCardActionButton.tsx @@ -10,13 +10,14 @@ import useOnyx from '@hooks/useOnyx'; import usePrivateSubscription from '@hooks/usePrivateSubscription'; import useThemeStyles from '@hooks/useThemeStyles'; import {upgradeToCorporate} from '@libs/actions/Policy/Policy'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import {getOwnedPaidPolicies, isPolicyAdmin} from '@libs/PolicyUtils'; import {isSubscriptionTypeOfInvoicing} from '@libs/SubscriptionUtils'; import Navigation from '@navigation/Navigation'; import {getPrivatePromoDiscountInfo} from '@pages/settings/Subscription/utils'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; -import ROUTES from '@src/ROUTES'; +import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES'; import type {PersonalPolicyTypeExcludedProps} from './SubscriptionPlanCard'; type SubscriptionPlanCardActionButtonProps = { @@ -68,7 +69,7 @@ function SubscriptionPlanCardActionButton({subscriptionPlan, isFromComparisonMod (planType === CONST.POLICY.TYPE.TEAM && privateSubscription?.type === CONST.SUBSCRIPTION.TYPE.ANNUAL && !account?.canDowngrade) || isSubscriptionTypeOfInvoicing(privateSubscription?.type) ) { - Navigation.navigate(ROUTES.SETTINGS_SUBSCRIPTION_DOWNGRADE_BLOCKED.getRoute(Navigation.getActiveRoute())); + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.DOWNGRADE_BLOCKED.path)); return; } diff --git a/src/pages/settings/Subscription/SubscriptionSettings/index.tsx b/src/pages/settings/Subscription/SubscriptionSettings/index.tsx index e96bdc174b4e..927696dcb0ef 100644 --- a/src/pages/settings/Subscription/SubscriptionSettings/index.tsx +++ b/src/pages/settings/Subscription/SubscriptionSettings/index.tsx @@ -32,6 +32,7 @@ import useThemeIllustrations from '@hooks/useThemeIllustrations'; import useThemeStyles from '@hooks/useThemeStyles'; import {openLink} from '@libs/actions/Link'; import {convertToShortDisplayString} from '@libs/CurrencyUtils'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import {isPolicyAdmin} from '@libs/PolicyUtils'; import {getSubscriptionPrice, isSubscriptionTypeOfInvoicing, shouldUseSimplifiedCollectSubscriptionUI} from '@libs/SubscriptionUtils'; import type {SkeletonSpanReasonAttributes} from '@libs/telemetry/useSkeletonSpan'; @@ -45,7 +46,7 @@ import {clearUpdateSubscriptionSizeError, requestTaxExempt, updateSubscriptionAd import CONST from '@src/CONST'; import type {SubscriptionType} from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; -import ROUTES from '@src/ROUTES'; +import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES'; function SubscriptionSettings() { const {translate} = useLocalize(); @@ -99,7 +100,7 @@ function SubscriptionSettings() { return; } if (privateSubscription?.type === CONST.SUBSCRIPTION.TYPE.ANNUAL && option === CONST.SUBSCRIPTION.TYPE.PAY_PER_USE && !account?.canDowngrade) { - Navigation.navigate(ROUTES.SETTINGS_SUBSCRIPTION_DOWNGRADE_BLOCKED.route); + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.DOWNGRADE_BLOCKED.path)); return; } diff --git a/src/pages/workspace/DynamicWorkspaceOverviewPlanTypePage.tsx b/src/pages/workspace/DynamicWorkspaceOverviewPlanTypePage.tsx index a75d855a2edb..f71fe0d79881 100644 --- a/src/pages/workspace/DynamicWorkspaceOverviewPlanTypePage.tsx +++ b/src/pages/workspace/DynamicWorkspaceOverviewPlanTypePage.tsx @@ -17,13 +17,14 @@ import usePrivateSubscription from '@hooks/usePrivateSubscription'; import useTheme from '@hooks/useTheme'; import useThemeStyles from '@hooks/useThemeStyles'; import OpenWorkspacePlanPage from '@libs/actions/Policy/Plan'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import {isSubmitPolicy} from '@libs/PolicyUtils'; import {isSubscriptionTypeOfInvoicing} from '@libs/SubscriptionUtils'; import Navigation from '@navigation/Navigation'; import CardSectionUtils from '@pages/settings/Subscription/CardSection/utils'; import type {PersonalPolicyTypeExcludedProps} from '@pages/settings/Subscription/SubscriptionPlan/SubscriptionPlanCard'; import CONST from '@src/CONST'; -import ROUTES from '@src/ROUTES'; +import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES'; import AccessOrNotFoundWrapper from './AccessOrNotFoundWrapper'; import withPolicy from './withPolicy'; import type {WithPolicyProps} from './withPolicy'; @@ -109,7 +110,7 @@ function DynamicWorkspaceOverviewPlanTypePage({policy}: WithPolicyProps) { if (policyID && policy?.type === CONST.POLICY.TYPE.CORPORATE && currentPlan === CONST.POLICY.TYPE.TEAM) { if (isSubscriptionTypeOfInvoicing(privateSubscription?.type)) { - Navigation.navigate(ROUTES.SETTINGS_SUBSCRIPTION_DOWNGRADE_BLOCKED.getRoute(Navigation.getActiveRoute())); + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.DOWNGRADE_BLOCKED.path)); return; } Navigation.navigate(ROUTES.WORKSPACE_DOWNGRADE.getRoute(policyID)); diff --git a/src/pages/workspace/WorkspaceOverviewPage.tsx b/src/pages/workspace/WorkspaceOverviewPage.tsx index c9d061cd5455..adcc047e8c2f 100644 --- a/src/pages/workspace/WorkspaceOverviewPage.tsx +++ b/src/pages/workspace/WorkspaceOverviewPage.tsx @@ -446,7 +446,7 @@ function WorkspaceOverviewPage({policyDraft, policy: policyProp, route}: Workspa const onDeleteWorkspace = () => { if (shouldBlockWorkspaceDeletionForInvoicifyUser(isSubscriptionTypeOfInvoicing(subscriptionType), ownerPolicies, policyID)) { - Navigation.navigate(ROUTES.SETTINGS_SUBSCRIPTION_DOWNGRADE_BLOCKED.getRoute(Navigation.getActiveRoute())); + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.DOWNGRADE_BLOCKED.path)); return; } diff --git a/src/pages/workspace/WorkspacesListPage.tsx b/src/pages/workspace/WorkspacesListPage.tsx index 612c3514cd3c..eb8f102fbbf1 100755 --- a/src/pages/workspace/WorkspacesListPage.tsx +++ b/src/pages/workspace/WorkspacesListPage.tsx @@ -40,6 +40,7 @@ import {filterInactiveCards} from '@libs/CardUtils'; import {getLatestErrorMessage} from '@libs/ErrorUtils'; import {isMergeHRCompleteSetupNeeded} from '@libs/HRUtils'; import interceptAnonymousUser from '@libs/interceptAnonymousUser'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import openInternalRouteInNewTab from '@libs/Navigation/helpers/openInternalRouteInNewTab'; import type {ModifiedMouseEvent} from '@libs/Navigation/helpers/openInternalRouteInNewTab'; import Navigation from '@libs/Navigation/Navigation'; @@ -66,7 +67,7 @@ import type {SkeletonSpanReasonAttributes} from '@libs/telemetry/useSkeletonSpan import {setNameValuePair} from '@userActions/User'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; -import ROUTES from '@src/ROUTES'; +import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES'; import type SCREENS from '@src/SCREENS'; import {accountIDToLoginSelector} from '@src/selectors/PersonalDetails'; import {ownerPoliciesSelector} from '@src/selectors/Policy'; @@ -480,7 +481,7 @@ function WorkspacesListPage() { currentUserPersonalDetails?.accountID, ) ) { - Navigation.navigate(ROUTES.SETTINGS_SUBSCRIPTION_DOWNGRADE_BLOCKED.getRoute(Navigation.getActiveRoute())); + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.DOWNGRADE_BLOCKED.path)); return; }