diff --git a/src/Company/ui/QuitJobModal.tsx b/src/Company/ui/QuitJobModal.tsx
new file mode 100644
index 000000000..7ee05b506
--- /dev/null
+++ b/src/Company/ui/QuitJobModal.tsx
@@ -0,0 +1,32 @@
+import React from "react";
+import { Company } from "../Company";
+import { use } from "../../ui/Context";
+import { Modal } from "../../ui/React/Modal";
+import Typography from "@mui/material/Typography";
+import Button from "@mui/material/Button";
+
+interface IProps {
+ open: boolean;
+ onClose: () => void;
+ locName: string;
+ company: Company;
+ onQuit: () => void;
+}
+
+export function QuitJobModal(props: IProps): React.ReactElement {
+ const player = use.Player();
+ function quit(): void {
+ player.quitJob(props.locName);
+ props.onQuit();
+ props.onClose();
+ }
+
+ return (
+
+ Would you like to quit your job at {props.company.name}?
+
+
+
+
+ );
+}
diff --git a/src/Company/ui/QuitJobPopup.tsx b/src/Company/ui/QuitJobPopup.tsx
deleted file mode 100644
index b4ad9883e..000000000
--- a/src/Company/ui/QuitJobPopup.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-import React from "react";
-import { Company } from "../Company";
-import { IPlayer } from "../../PersonObjects/IPlayer";
-import { removePopup } from "../../ui/React/createPopup";
-
-interface IProps {
- locName: string;
- company: Company;
- player: IPlayer;
- onQuit: () => void;
- popupId: string;
-}
-
-export function QuitJobPopup(props: IProps): React.ReactElement {
- function quit(): void {
- props.player.quitJob(props.locName);
- props.onQuit();
- removePopup(props.popupId);
- }
-
- return (
- <>
- Would you like to quit your job at {props.company.name}?
-
-
-
- >
- );
-}
diff --git a/src/Corporation/ui/DiscontinueProductModal.tsx b/src/Corporation/ui/DiscontinueProductModal.tsx
index 38069e5a7..00b1b614f 100644
--- a/src/Corporation/ui/DiscontinueProductModal.tsx
+++ b/src/Corporation/ui/DiscontinueProductModal.tsx
@@ -3,6 +3,8 @@ import React from "react";
import { Product } from "../Product";
import { Modal } from "../../ui/React/Modal";
import { useDivision } from "./Context";
+import Typography from "@mui/material/Typography";
+import Button from "@mui/material/Button";
interface IProps {
open: boolean;
@@ -22,13 +24,11 @@ export function DiscontinueProductModal(props: IProps): React.ReactElement {
return (
-
+
Are you sure you want to do this? Discontinuing a product removes it completely and permanently. You will no
longer produce this product and all of its existing stock will be removed and left unsold
-
+
Enter a limit to the amount of this product you would like to product per second. Leave the box empty to set no
limit.
-
-
-
+
+
+
);
}
diff --git a/src/Corporation/ui/ProductMarketTaModal.tsx b/src/Corporation/ui/ProductMarketTaModal.tsx
index cc93bc1c5..d2ab50afb 100644
--- a/src/Corporation/ui/ProductMarketTaModal.tsx
+++ b/src/Corporation/ui/ProductMarketTaModal.tsx
@@ -3,12 +3,19 @@ import { numeralWrapper } from "../../ui/numeralFormat";
import { Product } from "../Product";
import { Modal } from "../../ui/React/Modal";
import { useDivision } from "./Context";
+import Typography from "@mui/material/Typography";
+import TextField from "@mui/material/TextField";
+import FormControlLabel from "@mui/material/FormControlLabel";
+import Switch from "@mui/material/Switch";
+import Tooltip from "@mui/material/Tooltip";
interface ITa2Props {
product: Product;
}
function MarketTA2(props: ITa2Props): React.ReactElement {
+ const division = useDivision();
+ if (!division.hasResearch("Market-TA.II")) return <>>;
const markupLimit = props.product.rat / props.product.mku;
const [value, setValue] = useState(props.product.pCost);
const setRerender = useState(false)[1];
@@ -35,38 +42,35 @@ function MarketTA2(props: ITa2Props): React.ReactElement {
return (
<>
-
-
-
- Market-TA.II
-
-
+ Market-TA.II
+
+
If you sell at {numeralWrapper.formatMoney(sCost)}, then you will sell{" "}
{numeralWrapper.format(markup, "0.00000")}x as much compared to if you sold at market price.
-
-
-
-
-
-
-
+
+
+
+ }
+ label={
+
+ If this is enabled, then this Material will automatically be sold at the optimal price such that the
+ amount sold matches the amount produced. (i.e. the highest possible price, while still ensuring that all
+ produced materials will be sold)
+
+ }
+ >
+ Use Market-TA.II for Auto-Sale Price
+
+ }
+ />
+
+
Note that Market-TA.II overrides Market-TA.I. This means that if both are enabled, then Market-TA.II will take
effect, not Market-TA.I
-
-
- Market-TA.I
-
-
- The maximum sale price you can mark this up to is{" "}
- {numeralWrapper.formatMoney(props.product.pCost + markupLimit)}. This means that if you set the sale price
- higher than this, you will begin to experience a loss in number of sales.
-
-
-
-
-
- {division.hasResearch("Market-TA.II") && }
- >
+ Market-TA.I
+
+ The maximum sale price you can mark this up to is{" "}
+ {numeralWrapper.formatMoney(props.product.pCost + markupLimit)}. This means that if you set the sale price
+ higher than this, you will begin to experience a loss in number of sales
+
+
+ }
+ label={
+
+ If this is enabled, then this Material will automatically be sold at the price identified by Market-TA.I
+ (i.e. the price shown above)
+
+ }
+ >
+ Use Market-TA.I for Auto-Sale Price
+
+ }
+ />
+
+
);
}
diff --git a/src/DevMenu/ui/Augmentations.tsx b/src/DevMenu/ui/Augmentations.tsx
index 82a4d65b8..8bdcb4b8f 100644
--- a/src/DevMenu/ui/Augmentations.tsx
+++ b/src/DevMenu/ui/Augmentations.tsx
@@ -8,6 +8,7 @@ import ExpandMoreIcon from "@mui/icons-material/ExpandMore";
import Select, { SelectChangeEvent } from "@mui/material/Select";
import { IPlayer } from "../../PersonObjects/IPlayer";
import { AugmentationNames } from "../../Augmentation/data/AugmentationNames";
+import Typography from "@mui/material/Typography";
import MenuItem from "@mui/material/MenuItem";
import IconButton from "@mui/material/IconButton";
import ReplyAllIcon from "@mui/icons-material/ReplyAll";
@@ -49,7 +50,7 @@ export function Augmentations(props: IProps): React.ReactElement {