import React from "react"; import { NumberDisplay } from "~/components/NumberDisplay"; import { ThemeButton } from "../common/Button"; interface Props { used: number; available: number; label: string; onSet?: (usedAmount: number) => void; isReadonly: boolean; isInteractive: boolean; } interface State { startUsed: number; newUsed: number; } export default class SlotManagerLarge extends React.PureComponent< Props, State > { static defaultProps = { label: "", isInteractive: true, isReadonly: false, }; constructor(props: Props) { super(props); this.state = { startUsed: props.used, newUsed: props.used, }; } componentDidUpdate( prevProps: Readonly, prevState: Readonly, snapshot?: any ): void { const { used } = this.props; if (used !== prevState.startUsed) { this.setState({ startUsed: used, newUsed: used, }); } } handleSetClick = (): void => { const { newUsed } = this.state; const { onSet } = this.props; if (onSet) { onSet(newUsed); } this.setState({ startUsed: newUsed, }); }; handleResetClick = (): void => { const { startUsed } = this.state; this.setState({ newUsed: startUsed, }); }; handleUseClick = (): void => { const { isReadonly } = this.props; if (!isReadonly) { this.setState((prevState, props) => ({ newUsed: Math.min(prevState.newUsed + 1, props.available), })); } }; handleGainClick = (): void => { const { isReadonly } = this.props; if (!isReadonly) { this.setState((prevState, props) => ({ newUsed: Math.max(prevState.newUsed - 1, 0), })); } }; render() { const { newUsed, startUsed } = this.state; const { label, available, isInteractive } = this.props; const usedDiff: number = startUsed - newUsed; let classNames: Array = ["ct-slot-manager-large__values"]; if (usedDiff > 0) { classNames.push("ct-slot-manager-large__values--gain"); } else if (usedDiff < 0) { classNames.push("ct-slot-manager-large__values--use"); } return (
{label &&
{label}
}
{available - newUsed}
{usedDiff !== 0 && (
Confirm Clear
)}
); } }