1
0
mirror of https://github.com/Unleash/unleash.git synced 2024-10-18 20:09:08 +02:00
unleash.unleash/frontend/src/component/common/ToastRenderer/ToastRenderer.tsx
olav 24c11332b5 chore: update MUI to v5 (#923)
* refactor: update mui packages

* refactor: run mui codemods

* refactor: format files after codemods

* refactor: fix broken types

* refactor: clean up theme

* refactor: fix broken tests

* refactor: replace @mui/styles with tss-react

* refactor: move breakpoints into classes for tss

* refactor: fix crash on missing feature description

* refactor: remove void classNames

* refactor: adjust styles to new defaults

* refactor: remove broken rollout slider e2e test

* refactor: fix duplicate e2e testid

* refactor: update makeStyles after rebase

* refactor: add missing snapshot after rebase

* refactor: fix TableCellSortable focus styles

* refactor: use 1.4 as the default line-height

* refactor: hide webkit search field icons

* refactor: fix select box label

* refactor: make AutocompleteBox smaller

* refactor: make heading smaller

* refactor: fix toast close icon color

* refactor: update snapshots

* refactor: add missing test event awaits

* refactor: fix default button line-height
2022-05-02 15:52:41 +02:00

47 lines
1.4 KiB
TypeScript

import { Portal } from '@mui/material';
import { useContext, useEffect } from 'react';
import { useThemeStyles } from 'themes/themeStyles';
import UIContext from 'contexts/UIContext';
import { useStyles } from './ToastRenderer.styles';
import AnimateOnMount from '../AnimateOnMount/AnimateOnMount';
import Toast from './Toast/Toast';
import { IToast } from 'interfaces/toast';
const ToastRenderer = () => {
const { toastData, setToast } = useContext(UIContext);
const { classes: themeStyles } = useThemeStyles();
const { classes: styles } = useStyles();
const hide = () => {
setToast((prev: IToast) => ({ ...prev, show: false }));
};
useEffect(() => {
if (!toastData.autoHideDuration) return;
let timeout = setTimeout(() => {
hide();
}, toastData.autoHideDuration);
return () => {
clearTimeout(timeout);
};
/* eslint-disable-next-line */
}, [toastData?.show]);
return (
<Portal>
<AnimateOnMount
mounted={Boolean(toastData?.show)}
start={themeStyles.fadeInBottomStartWithoutFixed}
enter={themeStyles.fadeInBottomEnter}
leave={themeStyles.fadeInBottomLeave}
container={styles.toastWrapper}
>
<Toast {...toastData} />
</AnimateOnMount>
</Portal>
);
};
export default ToastRenderer;