27 lines
882 B
TypeScript
27 lines
882 B
TypeScript
// app/providers/FadeContext.tsx
|
|
'use client';
|
|
import { createContext, useContext, useRef, MutableRefObject } from 'react';
|
|
|
|
export type FadeFn = (path: string) => void;
|
|
|
|
/* ① Context enthält nur ein Ref-Objekt */
|
|
const FadeCtx = createContext<MutableRefObject<FadeFn> | null>(null);
|
|
|
|
/* Hook, um die aktuelle Funktion aufzurufen */
|
|
export function useFade(): FadeFn {
|
|
const ref = useContext(FadeCtx);
|
|
return ref ? ref.current : () => {};
|
|
}
|
|
|
|
/* Provider legt das Ref an */
|
|
export function FadeProvider({ children }: { children: React.ReactNode }) {
|
|
const fnRef = useRef<FadeFn>(() => {}); // initial: noop
|
|
return <FadeCtx.Provider value={fnRef}>{children}</FadeCtx.Provider>;
|
|
}
|
|
|
|
/* Hook, den PageTransition benutzt, um seine Funktion zu hinterlegen */
|
|
export function useRegisterFade(fn: FadeFn) {
|
|
const ref = useContext(FadeCtx);
|
|
if (ref) ref.current = fn;
|
|
}
|