@tanstack/vue-router
Version:
Modern and scalable routing for Vue applications
56 lines • 1.89 kB
JSX
import * as Vue from 'vue';
import { getLocationChangeInfo, trimPathRight } from '@tanstack/router-core';
import { isServer } from '@tanstack/router-core/isServer';
import { useRouter } from './useRouter';
export function useTransitionerSetup() {
const router = useRouter();
if (isServer ?? router.isServer) {
return;
}
const transition = async (fn) => {
fn();
await Vue.nextTick();
return true;
};
router.startTransition = transition;
Vue.onMounted(() => {
Vue.onUnmounted(router.history.subscribe(router.load));
const nextLocation = router.buildLocation({
to: router.latestLocation.pathname,
search: true,
params: true,
hash: true,
state: true,
_includeValidateSearch: true,
});
if (trimPathRight(router.latestLocation.publicHref) !==
trimPathRight(nextLocation.publicHref)) {
router.commitLocation({
...nextLocation,
replace: true,
ignoreBlocker: true,
});
return;
}
const resolvedLocation = router.stores.resolvedLocation.get();
if (resolvedLocation?.href === router.latestLocation.href &&
resolvedLocation.state.__TSR_key === router.latestLocation.state.__TSR_key) {
router.emit({
type: 'onRendered',
...getLocationChangeInfo(resolvedLocation, resolvedLocation),
});
}
else if (!router._tx) {
router.load().catch(console.error);
}
});
}
/** @deprecated Use useTransitionerSetup() instead. */
export const Transitioner = Vue.defineComponent({
name: 'Transitioner',
setup() {
useTransitionerSetup();
return () => null;
},
});
//# sourceMappingURL=Transitioner.jsx.map