1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-09-28 17:55:15 +02:00
unleash.unleash/frontend/src/component/common/ToastRenderer/ToastRenderer.tsx
Nuno Góis 4167a60588
feat: biome lint frontend (#4903)
Follows up on https://github.com/Unleash/unleash/pull/4853 to add Biome
to the frontend as well.


![image](https://github.com/Unleash/unleash/assets/14320932/1906faf1-fc29-4172-a4d4-b2716d72cd65)

Added a few `biome-ignore` to speed up the process but we may want to
check and fix them in the future.
2023-10-02 13:25:46 +01:00

62 lines
1.6 KiB
TypeScript

import { Portal } from '@mui/material';
import { useContext, useEffect, useMemo } from 'react';
import {
fadeInBottomEnter,
fadeInBottomLeave,
fadeInBottomStartWithoutFixed,
} from 'themes/themeStyles';
import UIContext from 'contexts/UIContext';
import AnimateOnMount from '../AnimateOnMount/AnimateOnMount';
import Toast from './Toast/Toast';
import { IToast } from 'interfaces/toast';
const ToastRenderer = () => {
const { toastData, setToast } = useContext(UIContext);
const hide = () => {
setToast((prev: IToast) => ({ ...prev, show: false }));
};
useEffect(() => {
if (!toastData.autoHideDuration) return;
const timeout = setTimeout(() => {
hide();
}, toastData.autoHideDuration);
return () => {
clearTimeout(timeout);
};
/* eslint-disable-next-line */
}, [toastData?.show]);
const animations = useMemo(
() => ({
start: {
...fadeInBottomStartWithoutFixed,
right: 0,
left: 0,
margin: '0 auto',
maxWidth: '450px',
},
enter: fadeInBottomEnter,
leave: fadeInBottomLeave,
}),
[],
);
return (
<Portal>
<AnimateOnMount
mounted={Boolean(toastData?.show)}
start={animations.start}
enter={animations.enter}
leave={animations.leave}
>
<Toast {...toastData} />
</AnimateOnMount>
</Portal>
);
};
export default ToastRenderer;