51 lines
1.2 KiB
TypeScript
51 lines
1.2 KiB
TypeScript
"use client";
|
|
|
|
import {
|
|
createContext,
|
|
useCallback,
|
|
useContext,
|
|
useMemo,
|
|
useState,
|
|
type ReactNode,
|
|
} from "react";
|
|
|
|
type CreateFlowContinueAttemptContextValue = {
|
|
attempted: boolean;
|
|
markAttempted: () => void;
|
|
clearAttempted: () => void;
|
|
};
|
|
|
|
const CreateFlowContinueAttemptContext =
|
|
createContext<CreateFlowContinueAttemptContextValue | null>(null);
|
|
|
|
export function CreateFlowContinueAttemptProvider({
|
|
children,
|
|
}: {
|
|
children: ReactNode;
|
|
}) {
|
|
const [attempted, setAttempted] = useState(false);
|
|
const markAttempted = useCallback(() => setAttempted(true), []);
|
|
const clearAttempted = useCallback(() => setAttempted(false), []);
|
|
const value = useMemo(
|
|
() => ({ attempted, markAttempted, clearAttempted }),
|
|
[attempted, markAttempted, clearAttempted],
|
|
);
|
|
return (
|
|
<CreateFlowContinueAttemptContext.Provider value={value}>
|
|
{children}
|
|
</CreateFlowContinueAttemptContext.Provider>
|
|
);
|
|
}
|
|
|
|
export function useCreateFlowContinueAttempt(): CreateFlowContinueAttemptContextValue {
|
|
const value = useContext(CreateFlowContinueAttemptContext);
|
|
if (!value) {
|
|
return {
|
|
attempted: false,
|
|
markAttempted: () => {},
|
|
clearAttempted: () => {},
|
|
};
|
|
}
|
|
return value;
|
|
}
|