543c624405
Co-authored-by: Lipis <lipiridis@gmail.com> Co-authored-by: dwelle <luzar.david@gmail.com>
35 lines
775 B
TypeScript
35 lines
775 B
TypeScript
import React, { useCallback, useEffect, useRef } from "react";
|
|
import { TOAST_TIMEOUT } from "../constants";
|
|
import "./Toast.scss";
|
|
|
|
export const Toast = ({
|
|
message,
|
|
clearToast,
|
|
}: {
|
|
message: string;
|
|
clearToast: () => void;
|
|
}) => {
|
|
const timerRef = useRef<number>(0);
|
|
|
|
const scheduleTimeout = useCallback(
|
|
() =>
|
|
(timerRef.current = window.setTimeout(() => clearToast(), TOAST_TIMEOUT)),
|
|
[clearToast],
|
|
);
|
|
|
|
useEffect(() => {
|
|
scheduleTimeout();
|
|
return () => clearTimeout(timerRef.current);
|
|
}, [scheduleTimeout, message]);
|
|
|
|
return (
|
|
<div
|
|
className="Toast"
|
|
onMouseEnter={() => clearTimeout(timerRef?.current)}
|
|
onMouseLeave={scheduleTimeout}
|
|
>
|
|
<p className="Toast__message">{message}</p>
|
|
</div>
|
|
);
|
|
};
|