import {AvailableBuildings, AvailableMods, AvailableRacesPart, AvailableUnits, IconUrl} from "../core/api"; import React, {useState} from "react"; import {withRouter} from "../core/withrouter"; import {IMod} from "../types/Imod"; import {Irace} from "../types/Irace"; import '../css/Unit.css' import { Accordion, AccordionDetails, AccordionSummary, Button, ButtonGroup, Grid2, Link, List, ListItem, ListSubheader, Paper, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, ToggleButton, ToggleButtonClassKey, ToggleButtonGroup, Typography } from "@mui/material"; import {ArrowBack, ArrowDropDown, ExpandMore} from "@mui/icons-material"; import ArmorType from "../classes/ArmorType"; import Weapon from "../classes/Weapon"; import {IRaceUnits, IUnitShort} from "../types/IUnitShort"; import {IBuildingShort, IRaceBuildings} from "../types/IBuildingShort"; interface RacePageState { mod: IMod, race: Irace, units: IUnitShort[], } function Unit (unit: IUnitShort, modId: number, raceId: String) { return ( {unit.icon && } {unit.name} {unit.canDetect &&  } ) } function UnitSmall (unit: IUnitShort, modId: number, raceId: String) { var unitName = "" if (unit.name.length > 21) { unitName = unit.name.substring(0, 20) + "..."; } else { unitName = unit.name; } return ( {unit.icon && } {unitName} {unit.canDetect &&  }
) } function Building (building: IBuildingShort, modId: number, raceId: String) { return ( {building.icon && } {building.name} {building.canDetect &&  } {building.units.map(unit => UnitSmall(unit, modId, raceId))} ) } interface UnitsProps{ raceId: string, modId: number, } interface UnitsState { selectedUnits: String | null, units: IRaceUnits | null, buildings: IRaceBuildings | null, } class Units extends React.Component { constructor(props: any) { super(props); let urlUnits = AvailableUnits + "/" + this.props.modId + "/" + this.props.raceId; fetch(urlUnits) .then(res => res.json()) .then((res: IRaceUnits) => { this.setState({ units: res, }) }) let urlBuildings = AvailableBuildings + "/" + this.props.modId + "/" + this.props.raceId; fetch(urlBuildings) .then(res => res.json()) .then((res: IRaceBuildings) => { this.setState({ buildings: res, }) }) } render () { if (this.state && this.state.units) { return (
{this.state.units != null && this.state.buildings != null ? {this.state.buildings.buildings.map(building => Building(building, this.props.modId, this.props.raceId))} } aria-controls="units-accordion" id="units-accordion" >

All units

Infantry

{this.state.units.infantry.map(unit => Unit(unit, this.props.modId, this.props.raceId))}

Tech

{this.state.units.tech.map(unit => Unit(unit, this.props.modId, this.props.raceId))}

Support

{this.state.units.support.map(unit => Unit(unit, this.props.modId, this.props.raceId))}

: "Loading"}
) } else { return "Loading..."; } } } class RacePageFast extends React.Component { constructor(props: any) { super(props); console.log(this.props.match.params.id); } async componentDidMount() { const responseMod = await fetch(AvailableMods + "/" + this.props.match.params.modId); const modData: IMod = await responseMod.json(); this.setState({ mod: modData }); const response = await fetch(AvailableRacesPart + "/" + this.props.match.params.raceId); const racesData: Irace = await response.json(); this.setState({ race : racesData }); } render() { if(this.state != null && this.state.mod != null && this.state.race != null ){ const backRef = "/mod/" + this.state.mod.id return

{this.state.mod.name} ({this.state.mod.version}) - {this.state.race.name}

; } else { return "loading..."; } } } export default withRouter(RacePageFast);