fix(vue): correctly show ion-back-button when going back (#22260)

resolves #22217
This commit is contained in:
Liam DeBeasi
2020-10-07 14:58:41 -04:00
committed by GitHub
parent d746561ea2
commit 39d2530427
17 changed files with 497 additions and 211 deletions

View File

@ -43,16 +43,12 @@ export const createIonRouter = (opts: IonicVueRouterOptions, router: Router) =>
opts.history.listen((to: any, _: any, info: any) => handleHistoryChange({ path: to }, info.type, info.direction));
const handleNavigateBack = (defaultHref?: string, routerAnimation?: AnimationBuilder) => {
//console.log('--- Begin Navigate Back ---');
// todo grab default back button href from config
const routeInfo = locationHistory.current();
//console.log('Route Info', routeInfo)
if (routeInfo && routeInfo.pushedByRoute) {
const prevInfo = locationHistory.findLastLocation(routeInfo);
if (prevInfo) {
//console.log('Prev Info', prevInfo)
incomingRouteParams = { ...prevInfo, routerAction: 'pop', routerDirection: 'back', routerAnimation: routerAnimation || routeInfo.routerAnimation };
//console.log('Set incoming route params', incomingRouteParams)
if (routeInfo.lastPathname === routeInfo.pushedByRoute) {
router.back();
} else {
@ -64,7 +60,6 @@ export const createIonRouter = (opts: IonicVueRouterOptions, router: Router) =>
} else {
handleNavigate(defaultHref, 'pop', 'back');
}
//console.log('--- End Navigate Back ---');
}
const handleNavigate = (path: string, routerAction?: RouteAction, routerDirection?: RouteDirection, routerAnimation?: AnimationBuilder, tab?: string) => {
@ -134,12 +129,9 @@ export const createIonRouter = (opts: IonicVueRouterOptions, router: Router) =>
routerDirection: direction || 'forward',
tab: currentTab
}
//console.log('No route params, setting', incomingRouteParams)
}
}
//console.log('Incoming Route Params', incomingRouteParams)
let routeInfo: RouteInfo;
if (incomingRouteParams?.id) {
routeInfo = {
@ -148,7 +140,6 @@ export const createIonRouter = (opts: IonicVueRouterOptions, router: Router) =>
}
locationHistory.add(routeInfo);
//console.log('Incoming route params had id, current routeInfo', routeInfo)
} else {
const isPushed = incomingRouteParams.routerAction === 'push' && incomingRouteParams.routerDirection === 'forward';
routeInfo = {
@ -160,27 +151,21 @@ export const createIonRouter = (opts: IonicVueRouterOptions, router: Router) =>
params: location.params && location.params,
}
//console.log('No id on incoming route params', routeInfo)
if (isPushed) {
routeInfo.tab = leavingLocationInfo.tab;
routeInfo.pushedByRoute = leavingLocationInfo.pathname;
//console.log('Was pushed', routeInfo);
routeInfo.pushedByRoute = (leavingLocationInfo.pathname !== '') ? leavingLocationInfo.pathname : undefined;
} else if (routeInfo.routerAction === 'pop') {
const route = locationHistory.findLastLocation(routeInfo);
routeInfo.pushedByRoute = route?.pushedByRoute;
//console.log('action pop', routeInfo)
} else if (routeInfo.routerAction === 'push' && routeInfo.tab !== leavingLocationInfo.tab) {
const lastRoute = locationHistory.getCurrentRouteInfoForTab(routeInfo.tab);
routeInfo.pushedByRoute = lastRoute?.pushedByRoute;
//console.log('was push and switch tab', routeInfo)
} else if (routeInfo.routerAction === 'replace') {
const currentRouteInfo = locationHistory.current();
routeInfo.lastPathname = currentRouteInfo?.pathname || routeInfo.lastPathname;
routeInfo.pushedByRoute = currentRouteInfo?.pushedByRoute || routeInfo.pushedByRoute;
routeInfo.routerDirection = currentRouteInfo?.routerDirection || routeInfo.routerDirection;
routeInfo.routerAnimation = currentRouteInfo?.routerAnimation || routeInfo.routerAnimation;
//console.log('was repalce',routeInfo)
}
locationHistory.add(routeInfo);