Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | 19x 19x 19x 150x 150x 150x 150x 150x 5x 5x 5x 150x | import { useCallback, useId } from "react";
import ToastContext from "context/ToastContext";
import { useCustomContext } from "hooks";
import type { IToast, UseToast } from "types/toast";
export function useToast(): UseToast {
const { toasts, setToasts } = useCustomContext(ToastContext);
const id = useId();
const removeToast: UseToast["removeToast"] = useCallback(
(toastId) => {
const timeOut = toasts.find((toast) => toast.id === toastId)?.timeOut;
Iif (timeOut) {
clearTimeout(timeOut);
}
setToasts((allToast) => {
return allToast.filter((toast) => toast.id !== toastId);
});
},
[setToasts, toasts]
);
const addToast: UseToast["addToast"] = useCallback(
(toast) => {
const displayTime = toast.displayTime ?? 10000;
const newToast: IToast = {
...toast,
id,
displayTime,
timeOut: setTimeout(() => {
removeToast(newToast.id);
}, displayTime),
};
setToasts([newToast]);
},
[id, setToasts, removeToast]
);
return {
toasts,
addToast,
removeToast,
};
}
|