TYPESAFETY: CompanyName (#650)

This commit is contained in:
Snarling
2023-07-11 09:23:17 -04:00
committed by GitHub
parent e4d3a9020e
commit e2655793f4
40 changed files with 1548 additions and 1516 deletions
+2 -1
View File
@@ -22,6 +22,7 @@ import { Player } from "@player";
import { GetServer } from "../Server/AllServers";
import { Server } from "../Server/Server";
import { Companies } from "../Company/Companies";
import { isMember } from "../utils/EnumHelper";
// Returns a boolean indicating whether the player has Hacknet Servers
// (the upgraded form of Hacknet Nodes)
@@ -564,7 +565,7 @@ export function purchaseHashUpgrade(upgName: string, upgTarget: string, count =
break;
}
case "Company Favor": {
if (!(upgTarget in Companies)) {
if (!isMember("CompanyName", upgTarget)) {
console.error(`Invalid target specified in purchaseHashUpgrade(): ${upgTarget}`);
throw new Error(`'${upgTarget}' is not a company.`);
}
+8 -7
View File
@@ -15,8 +15,9 @@ import Typography from "@mui/material/Typography";
import Paper from "@mui/material/Paper";
import Button from "@mui/material/Button";
import { SelectChangeEvent } from "@mui/material/Select";
import { FactionName } from "@enums";
import { companiesMetadata } from "../../Company/data/CompaniesMetadata";
import { CompanyName, FactionName } from "@enums";
import { PartialRecord } from "../../Types/Record";
import { isMember } from "../../utils/EnumHelper";
interface IProps {
hashManager: HashManager;
@@ -24,8 +25,9 @@ interface IProps {
rerender: () => void;
}
// Key is the hash upgrade name
const serversMap: Record<string, string> = {};
const companiesMap: Record<string, string> = {};
const companiesMap: PartialRecord<string, CompanyName> = {};
export function HacknetUpgradeElem(props: IProps): React.ReactElement {
const [selectedServer, setSelectedServer] = useState(
@@ -35,10 +37,9 @@ export function HacknetUpgradeElem(props: IProps): React.ReactElement {
setSelectedServer(event.target.value);
serversMap[props.upg.name] = event.target.value;
}
const [selectedCompany, setSelectedCompany] = useState(
companiesMap[props.upg.name] ? companiesMap[props.upg.name] : companiesMetadata[0].name,
);
function changeTargetCompany(event: SelectChangeEvent): void {
const [selectedCompany, setSelectedCompany] = useState(companiesMap[props.upg.name] ?? CompanyName.NoodleBar);
function changeTargetCompany(event: SelectChangeEvent<CompanyName>): void {
if (!isMember("CompanyName", event.target.value)) return;
setSelectedCompany(event.target.value);
companiesMap[props.upg.name] = event.target.value;
}