-
-
+
+
+
+
+
Cost: {Hashes(cost)}, Bought: {level} times
-
+
-
{upg.desc}
-
+ {level > 0 && effect &&
{effect}}
{upg.hasTargetServer && (
-
+
)}
-
+
);
}
diff --git a/src/Hacknet/ui/HashUpgradeModal.tsx b/src/Hacknet/ui/HashUpgradeModal.tsx
new file mode 100644
index 000000000..c836579e5
--- /dev/null
+++ b/src/Hacknet/ui/HashUpgradeModal.tsx
@@ -0,0 +1,59 @@
+/**
+ * Create the pop-up for purchasing upgrades with hashes
+ */
+import React, { useState, useEffect } from "react";
+
+import { HashManager } from "../HashManager";
+import { HashUpgrades } from "../HashUpgrades";
+
+import { IPlayer } from "../../PersonObjects/IPlayer";
+
+import { Hashes } from "../../ui/React/Hashes";
+import { HacknetUpgradeElem } from "./HacknetUpgradeElem";
+import { Modal } from "../../ui/React/Modal";
+import { use } from "../../ui/Context";
+import Typography from "@mui/material/Typography";
+
+interface IProps {
+ open: boolean;
+ onClose: () => void;
+}
+
+export function HashUpgradeModal(props: IProps): React.ReactElement {
+ const player = use.Player();
+ const setRerender = useState(false)[1];
+ function rerender(): void {
+ setRerender((old) => !old);
+ }
+
+ useEffect(() => {
+ const id = setInterval(() => setRerender((old) => !old), 200);
+ return () => clearInterval(id);
+ }, []);
+
+ const hashManager = player.hashManager;
+ if (!(hashManager instanceof HashManager)) {
+ throw new Error(`Player does not have a HashManager)`);
+ }
+
+ return (
+
-
Spend your hashes on a variety of different upgrades
-
Hashes: {Hashes(props.player.hashManager.hashes)}
- {upgradeElems}
-
- );
-}
diff --git a/src/ui/React/ServerDropdown.tsx b/src/ui/React/ServerDropdown.tsx
index d9523d5ac..ca4b7db58 100644
--- a/src/ui/React/ServerDropdown.tsx
+++ b/src/ui/React/ServerDropdown.tsx
@@ -8,6 +8,8 @@ import { AllServers } from "../../Server/AllServers";
import { Server } from "../../Server/Server";
import { HacknetServer } from "../../Hacknet/HacknetServer";
+import Select, { SelectChangeEvent } from "@mui/material/Select";
+import MenuItem from "@mui/material/MenuItem";
// TODO make this an enum when this gets converted to TypeScript
export const ServerType = {
@@ -19,8 +21,8 @@ export const ServerType = {
interface IProps {
serverType: number;
- onChange: (event: React.ChangeEvent