From 439ab93ba59e1f30bcd157a6417a9f930655ffee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81rni=20Benedikt=20=C3=81rnason?= Date: Fri, 9 Mar 2018 11:46:25 +0100 Subject: [PATCH 1/4] Added pop and popToTop NavigationActions for react-navigation --- types/react-navigation/index.d.ts | 27 ++++++++++++++++++- .../react-navigation-tests.tsx | 12 +++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/types/react-navigation/index.d.ts b/types/react-navigation/index.d.ts index c4e396783f..2fdde0448e 100644 --- a/types/react-navigation/index.d.ts +++ b/types/react-navigation/index.d.ts @@ -247,6 +247,25 @@ export interface NavigationUriAction extends NavigationUriActionPayload { type: 'Navigation/URI'; } +export interface NavigationPopActionPayload { + // n: the number of routes to pop of the stack + n?: number; + immediate?: boolean; +} + +export interface NavigationPopAction extends NavigationPopActionPayload { + type: 'Navigation/POP'; +} + +export interface NavigationPopToTopActionPayload { + key?: string; + immediate?: boolean; +} + +export interface NavigationPopToTopAction extends NavigationPopToTopActionPayload { + type: 'Navigation/POP_TO_TOP'; +} + export interface NavigationStackViewConfig { mode?: 'card' | 'modal'; headerMode?: HeaderMode; @@ -287,7 +306,9 @@ export type NavigationStackAction = | NavigationNavigateAction | NavigationBackAction | NavigationSetParamsAction - | NavigationResetAction; + | NavigationResetAction + | NavigationPopAction + | NavigationPopToTopAction; export type NavigationTabAction = NavigationInitAction @@ -718,12 +739,16 @@ export namespace NavigationActions { const RESET: 'Navigation/RESET'; const SET_PARAMS: 'Navigation/SET_PARAMS'; const URI: 'Navigation/URI'; + const POP: 'Navigation/POP'; + const POP_TO_TOP: 'Navigation/POP_TO_TOP'; function init(options?: NavigationInitActionPayload): NavigationInitAction; function navigate(options: NavigationNavigateActionPayload): NavigationNavigateAction; function reset(options: NavigationResetActionPayload): NavigationResetAction; function back(options?: NavigationBackActionPayload): NavigationBackAction; function setParams(options: NavigationSetParamsActionPayload): NavigationSetParamsAction; + function pop(options: NavigationPopActionPayload): NavigationPopAction; + function popToTop(options: NavigationPopToTopActionPayload): NavigationPopToTopAction; } /** diff --git a/types/react-navigation/react-navigation-tests.tsx b/types/react-navigation/react-navigation-tests.tsx index 017a9b9153..49e216a35a 100644 --- a/types/react-navigation/react-navigation-tests.tsx +++ b/types/react-navigation/react-navigation-tests.tsx @@ -32,6 +32,8 @@ import { HeaderBackButton, Header, NavigationParams, + NavigationPopAction, + NavigationPopToTopAction, } from 'react-navigation'; // Constants @@ -337,3 +339,13 @@ const setParamsAction: NavigationSetParamsAction = NavigationActions.setParams({ foo: "bar" } }); + +const popAction: NavigationPopAction = NavigationActions.pop({ + n: 1, + immediate: true +}); + +const popToTopAction: NavigationPopToTopAction = NavigationActions.popToTop({ + key: "foo", + immediate: true +}) \ No newline at end of file From e5ef9ecef2e6abdf86a6ad9ef53f72136ab11bce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81rni=20Benedikt=20=C3=81rnason?= Date: Fri, 9 Mar 2018 12:01:51 +0100 Subject: [PATCH 2/4] Fixed lint errors --- types/react-navigation/react-navigation-tests.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types/react-navigation/react-navigation-tests.tsx b/types/react-navigation/react-navigation-tests.tsx index 49e216a35a..0f68b653b1 100644 --- a/types/react-navigation/react-navigation-tests.tsx +++ b/types/react-navigation/react-navigation-tests.tsx @@ -348,4 +348,4 @@ const popAction: NavigationPopAction = NavigationActions.pop({ const popToTopAction: NavigationPopToTopAction = NavigationActions.popToTop({ key: "foo", immediate: true -}) \ No newline at end of file +}); From 94a484cff48cc620df26c5625bf6545361160fce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81rni=20Benedikt=20=C3=81rnason?= Date: Fri, 9 Mar 2018 17:20:33 +0100 Subject: [PATCH 3/4] Overloaded navigate method to handle new navigation options parameters --- types/react-navigation/index.d.ts | 16 +++++++++++----- .../react-navigation/react-navigation-tests.tsx | 8 ++++++++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/types/react-navigation/index.d.ts b/types/react-navigation/index.d.ts index 2fdde0448e..50f384c34e 100644 --- a/types/react-navigation/index.d.ts +++ b/types/react-navigation/index.d.ts @@ -420,12 +420,18 @@ export interface NavigationEventSubscription { export interface NavigationScreenProp { state: S; dispatch: NavigationDispatch; - goBack: (routeKey?: (string | null)) => boolean; - navigate: ( - routeName: string, + goBack: (routeKey?: string | null) => boolean; + navigate(options: { + routeName: string; + params?: NavigationParams; + action?: NavigationAction; + key?: string; + }): boolean; + navigate( + routeNameOrOptions: string, params?: NavigationParams, - action?: NavigationAction - ) => boolean; + action?: NavigationAction, + ): boolean; setParams: (newParams: NavigationParams) => boolean; addListener: ( eventName: string, diff --git a/types/react-navigation/react-navigation-tests.tsx b/types/react-navigation/react-navigation-tests.tsx index 0f68b653b1..2fcec1c53c 100644 --- a/types/react-navigation/react-navigation-tests.tsx +++ b/types/react-navigation/react-navigation-tests.tsx @@ -60,6 +60,7 @@ class StartScreen extends React.Component { return ( + ); } @@ -70,6 +71,13 @@ class StartScreen extends React.Component { }; this.props.navigation.navigate(ROUTE_NAME_NEXT_SCREEN, params); } + private readonly navigateDifferentlyToNextScreen = (): void => { + const params = { + id: this.props.navigation.state.params && this.props.navigation.state.params.id, + name: this.props.navigation.state.params && this.props.navigation.state.params.s, + }; + this.props.navigation.navigate({routeName: ROUTE_NAME_NEXT_SCREEN, params}); + } } const ROUTE_NAME_NEXT_SCREEN = "NextScreen"; From 994f2993af4742a8e67ff15f08236b7c1f0ad7cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81rni=20Benedikt=20=C3=81rnason?= Date: Fri, 9 Mar 2018 17:26:15 +0100 Subject: [PATCH 4/4] Revert "Overloaded navigate method to handle new navigation options parameters" This reverts commit 94a484cff48cc620df26c5625bf6545361160fce. --- types/react-navigation/index.d.ts | 16 +++++----------- .../react-navigation/react-navigation-tests.tsx | 8 -------- 2 files changed, 5 insertions(+), 19 deletions(-) diff --git a/types/react-navigation/index.d.ts b/types/react-navigation/index.d.ts index 50f384c34e..2fdde0448e 100644 --- a/types/react-navigation/index.d.ts +++ b/types/react-navigation/index.d.ts @@ -420,18 +420,12 @@ export interface NavigationEventSubscription { export interface NavigationScreenProp { state: S; dispatch: NavigationDispatch; - goBack: (routeKey?: string | null) => boolean; - navigate(options: { - routeName: string; - params?: NavigationParams; - action?: NavigationAction; - key?: string; - }): boolean; - navigate( - routeNameOrOptions: string, + goBack: (routeKey?: (string | null)) => boolean; + navigate: ( + routeName: string, params?: NavigationParams, - action?: NavigationAction, - ): boolean; + action?: NavigationAction + ) => boolean; setParams: (newParams: NavigationParams) => boolean; addListener: ( eventName: string, diff --git a/types/react-navigation/react-navigation-tests.tsx b/types/react-navigation/react-navigation-tests.tsx index 2fcec1c53c..0f68b653b1 100644 --- a/types/react-navigation/react-navigation-tests.tsx +++ b/types/react-navigation/react-navigation-tests.tsx @@ -60,7 +60,6 @@ class StartScreen extends React.Component { return ( - ); } @@ -71,13 +70,6 @@ class StartScreen extends React.Component { }; this.props.navigation.navigate(ROUTE_NAME_NEXT_SCREEN, params); } - private readonly navigateDifferentlyToNextScreen = (): void => { - const params = { - id: this.props.navigation.state.params && this.props.navigation.state.params.id, - name: this.props.navigation.state.params && this.props.navigation.state.params.s, - }; - this.props.navigation.navigate({routeName: ROUTE_NAME_NEXT_SCREEN, params}); - } } const ROUTE_NAME_NEXT_SCREEN = "NextScreen";