const useDebouncedMutation = (mutationFn, options) => {
const mutation = useMutation(mutationFn, options);
const [isDebouncing, setIsDebouncing] = useState(false);
let timer;
const debouncedMutate = (variables, { debounceMs, ...options }) => {
clearTimeout(timer);
setIsDebouncing(true);
timer = setTimeout(() => {
mutation.mutate(variables, options);
setIsDebouncing(false);
}, debounceMs);
};
return { isDebouncing, debouncedMutate, ...mutation };
};
const channelExists = useDebouncedMutation(api.doesChannelExist);
channelExists.debouncedMutate(channelName, {
debounceMs: 500,
});