bitburner-src/src/ui/React/Snackbar.tsx

34 lines
996 B
TypeScript
Raw Normal View History

2021-10-13 23:25:58 +02:00
import React, { useEffect } from "react";
import { useSnackbar, SnackbarProvider as SB } from "notistack";
import { EventEmitter } from "../../utils/EventEmitter";
2021-10-13 23:25:58 +02:00
import Alert from "@mui/material/Alert";
import Paper from "@mui/material/Paper";
2021-10-13 23:25:58 +02:00
interface IProps {
children: React.ReactNode | React.ReactNode[];
}
export function SnackbarProvider(props: IProps): React.ReactElement {
return (
<SB dense maxSnack={9} anchorOrigin={{ horizontal: "right", vertical: "bottom" }} autoHideDuration={2000}>
{props.children}
</SB>
);
}
export const SnackbarEvents = new EventEmitter<[string, "success" | "warning" | "error" | "info"]>();
export function Snackbar(): React.ReactElement {
2021-10-13 23:25:58 +02:00
const { enqueueSnackbar } = useSnackbar();
2021-10-13 23:25:58 +02:00
useEffect(() =>
SnackbarEvents.subscribe((s, variant) =>
enqueueSnackbar(<Alert severity={variant}>{s}</Alert>, {
content: (k, m) => <Paper key={k}>{m}</Paper>,
variant: variant,
}),
),
);
2021-10-13 23:25:58 +02:00
return <></>;
}