nitropage
Version:
A free and open source, extensible visual page builder based on SolidStart.
20 lines (18 loc) • 655 B
text/typescript
import { useBeforeLeave } from "@solidjs/router";
import { createRoot } from "solid-js";
// Parent useBeforeLeave runs before other useBeforeLeave's
// The current way how useBeforeLeave listeners are resolved,
// prevents us from checking e.defaultPrevented,
// because each listener gets a fresh event copy:
// https://github.com/solidjs/solid-router/blob/30f08665e87829736a9333d55863d27905f4a92d/src/lifecycle.ts#L23
export const useBeforeLeaveLate = (
listener: Parameters<typeof useBeforeLeave>[0],
) =>
useBeforeLeave(() =>
createRoot((dispose) =>
useBeforeLeave((e) => {
dispose();
listener(e);
}),
),
);