From 10f380146587a84f5b5f45ef11cdb414433ee013 Mon Sep 17 00:00:00 2001 From: Wei Sun Date: Tue, 14 Jul 2026 14:10:20 -0700 Subject: [PATCH] chore(earn): type Earn navigators with feature param lists (Phase 3) --- app/components/UI/Earn/Earn.types.ts | 8 ---- app/components/UI/Earn/routes/index.tsx | 8 +++- app/components/UI/Earn/types/navigation.ts | 48 ++++++++++++++++++++++ app/core/NavigationService/types.ts | 27 +++++------- 4 files changed, 65 insertions(+), 26 deletions(-) create mode 100644 app/components/UI/Earn/types/navigation.ts diff --git a/app/components/UI/Earn/Earn.types.ts b/app/components/UI/Earn/Earn.types.ts index bfbae93a6f63..0e27c0926226 100644 --- a/app/components/UI/Earn/Earn.types.ts +++ b/app/components/UI/Earn/Earn.types.ts @@ -48,14 +48,6 @@ export interface GasImpactModalParams { chainId: string; } -/** Earn screens parameters */ -export interface EarnScreensParams { - screen?: string; - params?: { - token?: Record; - }; -} - /** * Lending deposit confirmation parameters * Matches LendingDepositViewRouteParams in EarnLendingDepositConfirmationView diff --git a/app/components/UI/Earn/routes/index.tsx b/app/components/UI/Earn/routes/index.tsx index 25898408fb1b..f73a1a9c343b 100644 --- a/app/components/UI/Earn/routes/index.tsx +++ b/app/components/UI/Earn/routes/index.tsx @@ -12,9 +12,13 @@ import { clearNativeStackNavigatorOptions, transparentModalScreenOptions, } from '../../../../constants/navigation/clearStackNavigatorOptions'; +import type { + EarnModalsNavigationParamList, + EarnScreensStackParamList, +} from '../types/navigation'; -const Stack = createNativeStackNavigator(); -const ModalStack = createNativeStackNavigator(); +const Stack = createNativeStackNavigator(); +const ModalStack = createNativeStackNavigator(); const EarnScreenStack = () => { const emptyNavHeaderOptions = useEmptyNavHeaderForConfirmations(); diff --git a/app/components/UI/Earn/types/navigation.ts b/app/components/UI/Earn/types/navigation.ts new file mode 100644 index 000000000000..1bb444bcdaf3 --- /dev/null +++ b/app/components/UI/Earn/types/navigation.ts @@ -0,0 +1,48 @@ +import type { NavigatorScreenParams } from '@react-navigation/native'; +import type { ConfirmationParams } from '../../../Views/confirmations/components/confirm/confirm-component'; +import type { EarnMusdConversionEducationViewRouteParams } from '../Views/EarnMusdConversionEducationView'; +import type { + LendingDepositConfirmationParams, + LendingMaxWithdrawalModalParams, + LendingWithdrawalConfirmationParams, +} from '../Earn.types'; + +/** + * Param list for screens inside the Earn screen stack (`EarnScreenStack`). + */ +// ParamListBase requires `type`; `interface` cannot satisfy it. +// eslint-disable-next-line @typescript-eslint/consistent-type-definitions +export type EarnScreensStackParamList = { + EarnLendingDepositConfirmation: LendingDepositConfirmationParams | undefined; + EarnLendingWithdrawalConfirmation: + | LendingWithdrawalConfirmationParams + | undefined; + EarnMusdConversionEducation: + | EarnMusdConversionEducationViewRouteParams + | undefined; + RedesignedConfirmations: ConfirmationParams | undefined; +}; + +/** + * Param list for screens inside the Earn modal stack (`EarnModalStack`). + */ +// ParamListBase requires `type`; `interface` cannot satisfy it. +// eslint-disable-next-line @typescript-eslint/consistent-type-definitions +export type EarnModalsNavigationParamList = { + EarnLendingMaxWithdrawalModal: LendingMaxWithdrawalModalParams | undefined; + EarnLendingLearnMoreModal: undefined; + RedesignedConfirmations: ConfirmationParams | undefined; +}; + +/** + * Feature-level Earn navigation params for nested `EarnScreens` / `EarnModals` entry. + */ +// Intersection (`&`) requires `type`; `interface` cannot express this. +// eslint-disable-next-line @typescript-eslint/consistent-type-definitions +export type EarnNavigationParamList = EarnScreensStackParamList & + EarnModalsNavigationParamList & { + EarnScreens: NavigatorScreenParams | undefined; + EarnModals: + | NavigatorScreenParams + | undefined; + }; diff --git a/app/core/NavigationService/types.ts b/app/core/NavigationService/types.ts index 926cffc8f2ed..efbaf7a1b9b5 100644 --- a/app/core/NavigationService/types.ts +++ b/app/core/NavigationService/types.ts @@ -240,13 +240,12 @@ import type { LearnMoreModalParams, MaxInputModalParams, GasImpactModalParams, - EarnScreensParams, - LendingDepositConfirmationParams, - LendingWithdrawalConfirmationParams, - LendingMaxWithdrawalModalParams, } from '../../components/UI/Earn/Earn.types'; import type { EarnTokenListViewRouteParams } from '../../components/UI/Earn/components/EarnTokenList'; -import type { EarnMusdConversionEducationViewRouteParams } from '../../components/UI/Earn/Views/EarnMusdConversionEducationView'; +import type { + EarnModalsNavigationParamList, + EarnScreensStackParamList, +} from '../../components/UI/Earn/types/navigation'; // Modal params import type { @@ -879,17 +878,13 @@ export type RootStackParamList = { EarnTokenList: EarnTokenListViewRouteParams | undefined; // Earn routes - EarnScreens: EarnScreensParams | undefined; - EarnLendingDepositConfirmation: LendingDepositConfirmationParams | undefined; - EarnLendingWithdrawalConfirmation: - | LendingWithdrawalConfirmationParams - | undefined; - EarnMusdConversionEducation: - | EarnMusdConversionEducationViewRouteParams - | undefined; - EarnModals: NestedNavigationParams | undefined; - EarnLendingMaxWithdrawalModal: LendingMaxWithdrawalModalParams | undefined; - EarnLendingLearnMoreModal: undefined; + EarnScreens: NavigatorScreenParams | undefined; + EarnLendingDepositConfirmation: EarnScreensStackParamList['EarnLendingDepositConfirmation']; + EarnLendingWithdrawalConfirmation: EarnScreensStackParamList['EarnLendingWithdrawalConfirmation']; + EarnMusdConversionEducation: EarnScreensStackParamList['EarnMusdConversionEducation']; + EarnModals: NavigatorScreenParams | undefined; + EarnLendingMaxWithdrawalModal: EarnModalsNavigationParamList['EarnLendingMaxWithdrawalModal']; + EarnLendingLearnMoreModal: EarnModalsNavigationParamList['EarnLendingLearnMoreModal']; // Full screen confirmation routes RedesignedConfirmations: undefined;