remove support for deprecated navigation actions (#3595)

* remove support for deprecated navigation actions

* remove deprecated action from flow definitions
This commit is contained in:
Vojtech Novak 2018-02-24 21:08:14 +01:00 committed by Brent Vatne
parent ab758bcaaa
commit 276fb8f7b3
5 changed files with 2 additions and 173 deletions

View File

@ -71,25 +71,11 @@ declare module 'react-navigation' {
key?: string, key?: string,
|}; |};
declare type DeprecatedNavigationNavigateAction = {|
type: 'Navigate',
routeName: string,
params?: NavigationParams,
// The action to run inside the sub-router
action?: NavigationNavigateAction | DeprecatedNavigationNavigateAction,
|};
declare export type NavigationBackAction = {| declare export type NavigationBackAction = {|
type: 'Navigation/BACK', type: 'Navigation/BACK',
key?: ?string, key?: ?string,
|}; |};
declare type DeprecatedNavigationBackAction = {|
type: 'Back',
key?: ?string,
|};
declare export type NavigationSetParamsAction = {| declare export type NavigationSetParamsAction = {|
type: 'Navigation/SET_PARAMS', type: 'Navigation/SET_PARAMS',
@ -100,26 +86,11 @@ declare module 'react-navigation' {
params: NavigationParams, params: NavigationParams,
|}; |};
declare type DeprecatedNavigationSetParamsAction = {|
type: 'SetParams',
// The key of the route where the params should be set
key: string,
// The new params to merge into the existing route params
params: NavigationParams,
|};
declare export type NavigationInitAction = {| declare export type NavigationInitAction = {|
type: 'Navigation/INIT', type: 'Navigation/INIT',
params?: NavigationParams, params?: NavigationParams,
|}; |};
declare type DeprecatedNavigationInitAction = {|
type: 'Init',
params?: NavigationParams,
|};
declare export type NavigationResetAction = {| declare export type NavigationResetAction = {|
type: 'Navigation/RESET', type: 'Navigation/RESET',
index: number, index: number,
@ -127,25 +98,11 @@ declare module 'react-navigation' {
actions: Array<NavigationNavigateAction>, actions: Array<NavigationNavigateAction>,
|}; |};
declare type DeprecatedNavigationResetAction = {|
type: 'Reset',
index: number,
key?: ?string,
actions: Array<
NavigationNavigateAction | DeprecatedNavigationNavigateAction
>,
|};
declare export type NavigationUriAction = {| declare export type NavigationUriAction = {|
type: 'Navigation/URI', type: 'Navigation/URI',
uri: string, uri: string,
|}; |};
declare type DeprecatedNavigationUriAction = {|
type: 'Uri',
uri: string,
|};
declare export type NavigationReplaceAction = {| declare export type NavigationReplaceAction = {|
+type: 'Navigation/REPLACE', +type: 'Navigation/REPLACE',
+key: string, +key: string,
@ -181,17 +138,6 @@ declare module 'react-navigation' {
| NavigationSetParamsAction | NavigationSetParamsAction
| NavigationResetAction; | NavigationResetAction;
declare type DeprecatedNavigationAction =
| DeprecatedNavigationInitAction
| DeprecatedNavigationNavigateAction
| DeprecatedNavigationBackAction
| DeprecatedNavigationSetParamsAction
| DeprecatedNavigationResetAction;
declare export type PossiblyDeprecatedNavigationAction =
| NavigationAction
| DeprecatedNavigationAction;
/** /**
* NavigationState is a tree of routes for a single navigator, where each * NavigationState is a tree of routes for a single navigator, where each
* child route may either be a NavigationScreenRoute or a * child route may either be a NavigationScreenRoute or a
@ -482,7 +428,7 @@ declare module 'react-navigation' {
*/ */
declare export type NavigationDispatch = ( declare export type NavigationDispatch = (
action: PossiblyDeprecatedNavigationAction action: NavigationAction
) => boolean; ) => boolean;
declare export type NavigationProp<S> = { declare export type NavigationProp<S> = {
@ -789,9 +735,6 @@ declare module 'react-navigation' {
(payload: { uri: string }): NavigationUriAction, (payload: { uri: string }): NavigationUriAction,
toString: () => string, toString: () => string,
}, },
mapDeprecatedActionAndWarn: (
action: PossiblyDeprecatedNavigationAction
) => NavigationAction,
}; };
declare type _RouterProp<S: NavigationState, O: {}> = { declare type _RouterProp<S: NavigationState, O: {}> = {

View File

@ -106,59 +106,6 @@ const completeTransition = createAction(COMPLETE_TRANSITION, payload => ({
key: payload && payload.key, key: payload && payload.key,
})); }));
const mapDeprecatedNavigateAction = action => {
if (action.type === 'Navigate') {
const payload = {
routeName: action.routeName,
params: action.params,
};
if (action.action) {
payload.action = mapDeprecatedNavigateAction(action.action);
}
return navigate(payload);
}
return action;
};
const mapDeprecatedAction = action => {
if (action.type === 'Back') {
return back(action);
} else if (action.type === 'Init') {
return init(action);
} else if (action.type === 'Navigate') {
return mapDeprecatedNavigateAction(action);
} else if (action.type === 'Reset') {
return reset({
index: action.index,
key: action.key,
actions: action.actions.map(mapDeprecatedNavigateAction),
});
} else if (action.type === 'SetParams') {
return setParams(action);
}
return action;
};
const mapDeprecatedActionAndWarn = action => {
const newAction = mapDeprecatedAction(action);
if (newAction !== action) {
const oldType = action.type;
const newType = newAction.type;
console.warn(
[
`The action type '${oldType}' has been renamed to '${newType}'.`,
`'${oldType}' will continue to work while in beta but will be removed`,
'in the first major release. Moving forward, you should use the',
'action constants and action creators exported by this library in',
"the 'actions' object.",
'See https://github.com/react-community/react-navigation/pull/120 for',
'more details.',
].join(' ')
);
}
return newAction;
};
export default { export default {
// Action constants // Action constants
BACK, BACK,
@ -185,7 +132,4 @@ export default {
setParams, setParams,
uri, uri,
completeTransition, completeTransition,
// TODO: Remove once old actions are deprecated
mapDeprecatedActionAndWarn,
}; };

View File

@ -166,8 +166,7 @@ export default function createNavigationContainer(Component) {
// Per-tick temporary storage for state.nav // Per-tick temporary storage for state.nav
dispatch = inputAction => { dispatch = action => {
const action = NavigationActions.mapDeprecatedActionAndWarn(inputAction);
if (!this._isStateful()) { if (!this._isStateful()) {
return false; return false;
} }

View File

@ -1506,40 +1506,6 @@ describe('StackRouter', () => {
} }
}); });
test('Maps old actions (uses "Handles the reset action" test)', () => {
global.console.warn = jest.fn();
const router = StackRouter({
Foo: {
screen: () => <div />,
},
Bar: {
screen: () => <div />,
},
});
const initAction = NavigationActions.mapDeprecatedActionAndWarn({
type: 'Init',
});
const state = router.getStateForAction(initAction);
const resetAction = NavigationActions.mapDeprecatedActionAndWarn({
type: 'Reset',
actions: [
{ type: 'Navigate', routeName: 'Foo', params: { bar: '42' } },
{ type: 'Navigate', routeName: 'Bar' },
],
index: 1,
});
const state2 = router.getStateForAction(resetAction, state);
expect(state2 && state2.index).toEqual(1);
expect(state2 && state2.routes[0].params).toEqual({ bar: '42' });
expect(state2 && state2.routes[0].routeName).toEqual('Foo');
expect(state2 && state2.routes[1].routeName).toEqual('Bar');
expect(console.warn).toBeCalledWith(
expect.stringContaining(
"The action type 'Init' has been renamed to 'Navigation/INIT'"
)
);
});
test('URI encoded string get passed to deep link', () => { test('URI encoded string get passed to deep link', () => {
const uri = 'people/2018%2F02%2F07'; const uri = 'people/2018%2F02%2F07';
const action = TestStackRouter.getActionForPathAndParams(uri); const action = TestStackRouter.getActionForPathAndParams(uri);

View File

@ -593,29 +593,6 @@ describe('TabRouter', () => {
expect(path).toEqual('f/Baz'); expect(path).toEqual('f/Baz');
}); });
test('Maps old actions (uses "getStateForAction returns null when navigating to same tab" test)', () => {
global.console.warn = jest.fn();
const router = TabRouter(
{ Foo: BareLeafRouteConfig, Bar: BareLeafRouteConfig },
{ initialRouteName: 'Bar' }
);
const initAction = NavigationActions.mapDeprecatedActionAndWarn({
type: 'Init',
});
const state = router.getStateForAction(initAction);
const navigateAction = NavigationActions.mapDeprecatedActionAndWarn({
type: 'Navigate',
routeName: 'Bar',
});
const state2 = router.getStateForAction(navigateAction, state);
expect(state2).toEqual(null);
expect(console.warn).toBeCalledWith(
expect.stringContaining(
"The action type 'Init' has been renamed to 'Navigation/INIT'"
)
);
});
test('Can navigate to other tab (no router) with params', () => { test('Can navigate to other tab (no router) with params', () => {
const ScreenA = () => <div />; const ScreenA = () => <div />;
const ScreenB = () => <div />; const ScreenB = () => <div />;