/** * React Subcomponent for displaying a location's UI, when that location is a company * * This subcomponent renders all of the buttons for applying to jobs at a company */ import * as React from "react"; import { ApplyToJobButton } from "./ApplyToJobButton"; import { Location } from "../Location"; import { Locations } from "../Locations"; import { LocationName } from "../data/LocationNames"; import { IEngine } from "../../IEngine"; import { beginInfiltration } from "../../Infiltration"; import { Companies } from "../../Company/Companies"; import { Company } from "../../Company/Company"; import { CompanyPositions } from "../../Company/CompanyPositions"; import * as posNames from "../../Company/data/companypositionnames"; import { IPlayer } from "../../PersonObjects/IPlayer"; import { StdButton } from "../../ui/React/StdButton"; type IProps = { engine: IEngine; locName: LocationName; p: IPlayer; } export class CompanyLocation extends React.Component { /** * We'll keep a reference to the Company that this component is being rendered for, * so we don't have to look it up every time */ company: Company; /** * Reference to the Location that this component is being rendered for */ location: Location; constructor(props: IProps) { super(props); this.applyForAgentJob = this.applyForAgentJob.bind(this); this.applyForBusinessConsultantJob = this.applyForBusinessConsultantJob.bind(this); this.applyForBusinessJob = this.applyForBusinessJob.bind(this); this.applyForEmployeeJob = this.applyForEmployeeJob.bind(this); this.applyForItJob = this.applyForItJob.bind(this); this.applyForPartTimeEmployeeJob = this.applyForPartTimeEmployeeJob.bind(this); this.applyForPartTimeWaiterJob = this.applyForPartTimeWaiterJob.bind(this); this.applyForSecurityJob = this.applyForSecurityJob.bind(this); this.applyForSoftwareConsultantJob = this.applyForSoftwareConsultantJob.bind(this); this.applyForSoftwareJob = this.applyForSoftwareJob.bind(this); this.applyForWaiterJob = this.applyForWaiterJob.bind(this); this.startInfiltration = this.startInfiltration.bind(this); this.location = Locations[props.locName]; if (this.location == null) { throw new Error(`CompanyLocation component constructed with invalid location: ${props.locName}`); } this.company = Companies[props.locName]; if (this.company == null) { throw new Error(`CompanyLocation component constructed with invalid company: ${props.locName}`); } } applyForAgentJob(e: React.MouseEvent) { if (!e.isTrusted) { return false; } this.props.p.applyForAgentJob(); } applyForBusinessConsultantJob(e: React.MouseEvent) { if (!e.isTrusted) { return false; } this.props.p.applyForBusinessConsultantJob(); } applyForBusinessJob(e: React.MouseEvent) { if (!e.isTrusted) { return false; } this.props.p.applyForBusinessJob(); } applyForEmployeeJob(e: React.MouseEvent) { if (!e.isTrusted) { return false; } this.props.p.applyForEmployeeJob(); } applyForItJob(e: React.MouseEvent) { if (!e.isTrusted) { return false; } this.props.p.applyForItJob(); } applyForPartTimeEmployeeJob(e: React.MouseEvent) { if (!e.isTrusted) { return false; } this.props.p.applyForPartTimeEmployeeJob(); } applyForPartTimeWaiterJob(e: React.MouseEvent) { if (!e.isTrusted) { return false; } this.props.p.applyForPartTimeWaiterJob(); } applyForSecurityJob(e: React.MouseEvent) { if (!e.isTrusted) { return false; } this.props.p.applyForSecurityJob(); } applyForSoftwareConsultantJob(e: React.MouseEvent) { if (!e.isTrusted) { return false; } this.props.p.applyForSoftwareConsultantJob(); } applyForSoftwareJob(e: React.MouseEvent) { if (!e.isTrusted) { return false; } this.props.p.applyForSoftwareJob(); } applyForWaiterJob(e: React.MouseEvent) { if (!e.isTrusted) { return false; } this.props.p.applyForWaiterJob(); } startInfiltration(e: React.MouseEvent) { if (!e.isTrusted) { return false; } const loc = this.location; this.props.engine.loadInfiltrationContent(); const data = loc.infiltrationData; if (data == null) { return false; } beginInfiltration(this.props.locName, data.startingSecurityLevel, data.baseRewardValue, data.maxClearanceLevel, data.difficulty); } render() { return (
{ this.company.hasAgentPositions() && } { this.company.hasBusinessConsultantPositions() && } { this.company.hasBusinessPositions() && } { this.company.hasEmployeePositions() && } { this.company.hasEmployeePositions() && } { this.company.hasITPositions() && } { this.company.hasSecurityPositions() && } { this.company.hasSoftwareConsultantPositions() && } { this.company.hasSoftwarePositions() && } { this.company.hasWaiterPositions() && } { this.company.hasWaiterPositions() && } { (this.location.infiltrationData != null) && }
) } }