add polling hook used for upcoming meetings notifications
This commit is contained in:
parent
6202ab298e
commit
3a401dc316
@ -1,6 +1,30 @@
|
|||||||
|
import { useLayoutEffect, useEffect, useRef } from "react";
|
||||||
import { TypedUseSelectorHook, useDispatch, useSelector } from "react-redux";
|
import { TypedUseSelectorHook, useDispatch, useSelector } from "react-redux";
|
||||||
import type { RootState, AppDispatch } from "./store";
|
import type { RootState, AppDispatch } from "./store";
|
||||||
|
|
||||||
// Use throughout your app instead of plain `useDispatch` and `useSelector`
|
// Use throughout your app instead of plain `useDispatch` and `useSelector`
|
||||||
export const useAppDispatch = () => useDispatch<AppDispatch>();
|
export const useAppDispatch = () => useDispatch<AppDispatch>();
|
||||||
export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector;
|
export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector;
|
||||||
|
|
||||||
|
const useIsomorphicLayoutEffect = typeof window !== "undefined" ? useLayoutEffect : useEffect;
|
||||||
|
export function useInterval(callback: () => void, delay: number | null) {
|
||||||
|
const savedCallback = useRef(callback);
|
||||||
|
|
||||||
|
// Remember the latest callback if it changes.
|
||||||
|
useIsomorphicLayoutEffect(() => {
|
||||||
|
savedCallback.current = callback;
|
||||||
|
}, [callback]);
|
||||||
|
|
||||||
|
// Set up the interval.
|
||||||
|
useEffect(() => {
|
||||||
|
// Don't schedule if no delay is specified.
|
||||||
|
// Note: 0 is a valid value for delay.
|
||||||
|
if (!delay && delay !== 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const id = setInterval(() => savedCallback.current(), delay);
|
||||||
|
|
||||||
|
return () => clearInterval(id);
|
||||||
|
}, [delay]);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user