mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-10-23 10:13:13 +02:00
51 lines
1.1 KiB
TypeScript
51 lines
1.1 KiB
TypeScript
|
import React, { useState, useEffect } from "react";
|
||
|
import { EventEmitter } from "../../utils/EventEmitter";
|
||
|
import { Modal } from "../../ui/React/Modal";
|
||
|
import Typography from "@mui/material/Typography";
|
||
|
|
||
|
export const AlertEvents = new EventEmitter<[string | JSX.Element]>();
|
||
|
|
||
|
interface Alert {
|
||
|
id: string;
|
||
|
text: string | JSX.Element;
|
||
|
}
|
||
|
|
||
|
let i = 0;
|
||
|
export function AlertManager(): React.ReactElement {
|
||
|
const [alerts, setAlerts] = useState<Alert[]>([]);
|
||
|
useEffect(
|
||
|
() =>
|
||
|
AlertEvents.subscribe((text: string | JSX.Element) => {
|
||
|
const id = i + "";
|
||
|
i++;
|
||
|
setAlerts((old) => {
|
||
|
return [
|
||
|
...old,
|
||
|
{
|
||
|
id: id,
|
||
|
text: text,
|
||
|
},
|
||
|
];
|
||
|
});
|
||
|
}),
|
||
|
[],
|
||
|
);
|
||
|
|
||
|
function close(): void {
|
||
|
console.log("close");
|
||
|
setAlerts((old) => {
|
||
|
return old.slice(0, -1);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
return (
|
||
|
<>
|
||
|
{alerts.length > 0 && (
|
||
|
<Modal open={true} onClose={close}>
|
||
|
<Typography>{alerts[0].text}</Typography>
|
||
|
</Modal>
|
||
|
)}
|
||
|
</>
|
||
|
);
|
||
|
}
|