Files
community-rule/app/(app)/create/context/CreateFlowContinueAttemptContext.tsx
T

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;
}