Files
kandev/apps/web/hooks/use-office-refetch.ts
T
2026-05-16 20:07:57 +01:00

27 lines
1015 B
TypeScript

import { useEffect, useLayoutEffect, useRef } from "react";
import { useAppStore } from "@/components/state-provider";
/**
* Calls `onRefetch` when the office refetch trigger matches `triggerType`.
* Supports exact match ("dashboard") or prefix match ("comments:" matches "comments:task-123").
*
* @param triggerType - The trigger type to watch for (e.g. "dashboard", "tasks", "comments")
* @param onRefetch - Callback invoked when a matching trigger fires
*/
export function useOfficeRefetch(triggerType: string, onRefetch: () => void) {
const trigger = useAppStore((s) => s.office.refetchTrigger);
const callbackRef = useRef(onRefetch);
// Update ref in a layout effect to avoid mutating during render
useLayoutEffect(() => {
callbackRef.current = onRefetch;
});
useEffect(() => {
if (!trigger) return;
const matches = trigger.type === triggerType || trigger.type.startsWith(triggerType + ":");
if (matches) {
callbackRef.current();
}
}, [trigger, triggerType]);
}