25 lines
544 B
TypeScript
25 lines
544 B
TypeScript
import { useIsRouting, useBeforeLeave } from "@solidjs/router";
|
|
import { createEffect } from "solid-js";
|
|
|
|
export const useRouteTransitionTiming = (
|
|
transitionTime: number,
|
|
onEnter: () => void,
|
|
onLoading: () => void,
|
|
onExit: () => void,
|
|
) => {
|
|
const isRouting = useIsRouting();
|
|
createEffect((oldR: boolean | undefined) => {
|
|
const r = isRouting();
|
|
if (oldR && !r) onExit();
|
|
return r;
|
|
});
|
|
useBeforeLeave((e) => {
|
|
e.preventDefault();
|
|
onEnter();
|
|
setTimeout(() => {
|
|
e.retry(true);
|
|
onLoading();
|
|
}, transitionTime);
|
|
});
|
|
};
|