import React, { useState } from "react"; import { CONSTANTS } from "../../Constants"; import { Faction } from "../Faction"; import { Player } from "@player"; import { repFromDonation } from "../formulas/donation"; import { Favor } from "../../ui/React/Favor"; import { Money } from "../../ui/React/Money"; import { Reputation } from "../../ui/React/Reputation"; import { dialogBoxCreate } from "../../ui/React/DialogBox"; import { MathJax } from "better-react-mathjax"; import Typography from "@mui/material/Typography"; import Paper from "@mui/material/Paper"; import Button from "@mui/material/Button"; import { NumberInput } from "../../ui/React/NumberInput"; type IProps = { faction: Faction; disabled: boolean; favorToDonate: number; rerender: () => void; }; /** React component for a donate option on the Faction UI */ export function DonateOption(props: IProps): React.ReactElement { const [donateAmt, setDonateAmt] = useState(NaN); const digits = (CONSTANTS.DonateMoneyToRepDivisor + "").length - 1; function canDonate(): boolean { if (isNaN(donateAmt)) return false; if (isNaN(donateAmt) || donateAmt <= 0) return false; if (Player.money < donateAmt) return false; return true; } function donate(): void { const fac = props.faction; const amt = donateAmt; if (isNaN(amt)) return; if (!canDonate()) return; Player.loseMoney(amt, "other"); const repGain = repFromDonation(amt, Player); props.faction.playerReputation += repGain; dialogBoxCreate( <> You just donated to {fac.name} to gain reputation. , ); props.rerender(); } function Status(): React.ReactElement { if (isNaN(donateAmt)) return <>; if (!canDonate()) { if (Player.money < donateAmt) return Insufficient funds; return Invalid donate amount entered!; } return ( This donation will result in reputation gain ); } return ( {props.disabled ? ( Unlock donations at favor with {props.faction.name} ) : ( <> donate ), }} /> {`\\(reputation = \\frac{\\text{donation amount} \\cdot \\text{reputation multiplier}}{10^{${digits}}}\\)`} )} ); }