import { useContext, useEffect, useMemo, useRef, useState, } from "react";
import { MemoDataProvider } from "../MemoDataProvider/MemoDataProvider";
import { BlockersContext } from "./controller/useBlockers";
export function RouteChangeBlocker({ name = "blocker", enabled = true, children, }) {
    const blockers = useContext(BlockersContext);
    const [blockedRoute, setBlockedRoute] = useState(null);
    const resolveBlock = useRef(null);
    useEffect(() => {
        if (!enabled) {
            return;
        }
        const { deregister } = blockers.registerBlocker({
            check(route) {
                setBlockedRoute(route);
                return new Promise((resolve) => {
                    resolveBlock.current = resolve;
                });
            },
        });
        return deregister;
    }, [enabled, blockers]);
    const blocker = useMemo(() => {
        if (!blockedRoute) {
            return {
                state: "unblocked",
                blockedRoute,
                proceed() { },
                reset() { },
            };
        }
        return {
            state: "blocked",
            blockedRoute,
            proceed() {
                resolveBlock.current?.(false);
                setBlockedRoute(null);
            },
            reset() {
                resolveBlock.current?.(true);
                setBlockedRoute(null);
            },
        };
    }, [blockedRoute]);
    return (<MemoDataProvider name={name} data={blocker} deps={[blocker]}>
      {children}
    </MemoDataProvider>);
}
//# sourceMappingURL=RouteChangeBlocker.jsx.map