transition.ts
830 Bytes
import type { FunctionalComponent } from 'vue';
import type { RouteLocation } from 'vue-router';
export interface DefaultContext {
Component: FunctionalComponent & { type: Recordable };
route: RouteLocation;
}
export function getTransitionName({
route,
openCache,
cacheTabs,
enableTransition,
def,
}: Pick<DefaultContext, 'route'> & {
enableTransition: boolean;
openCache: boolean;
def: string;
cacheTabs: string[];
}): string | undefined {
if (!enableTransition) {
return undefined;
}
const isInCache = cacheTabs.includes(route.name as string);
const transitionName = 'fade-slide';
let name: string | undefined = transitionName;
if (openCache) {
name = isInCache && route.meta.loaded ? transitionName : undefined;
}
return name || (route.meta.transitionName as string) || def;
}