import React from 'react'; import classNames from 'classnames'; import { AttackTypeEffectiveness } from 'app/models/Config'; import { CombatMoveStats, ICombatMoveStats, IPokemonMove } from 'app/models/Pokemon'; import { CombatMoveSelectorsOpen, SelectedCombatMoves } from 'app/types'; import { MovesDropdown } from 'app/components/MovesDropdown'; import { TypeIndicator } from './TypeIndicator'; import * as styles from 'app/styles/MovesExplorer.scss'; export interface IMovesExplorerProps { movesById : CombatMoveStats; quickMoves : Array; chargeMoves : Array; selectedMoves : { quickMove : IPokemonMove | null; chargeMove1 : IPokemonMove | null; chargeMove2 : IPokemonMove | null; }; attackTypeEffectiveness : AttackTypeEffectiveness | null; combatMoveSelectorsOpen : CombatMoveSelectorsOpen; handleToggleDropdownOpen : (menu : keyof CombatMoveSelectorsOpen, isOpen : boolean) => void; handleChangeSelectedMove : (moves : SelectedCombatMoves) => void; } export class MovesExplorer extends React.Component { public render() { const { movesById, quickMoves, chargeMoves, combatMoveSelectorsOpen, } = this.props; const { quickMove, chargeMove1, chargeMove2, } = this.props.selectedMoves; const wrapperCss = classNames( 'nes-container', styles.wrapper, ); const quickMoveType = this.getMoveType(quickMove); const quickMoveCss = classNames({ [styles.legacy]: quickMove ? quickMove.isLegacy : false, }); const chargeMove1Type = this.getMoveType(chargeMove1); const chargeMove1Css = classNames({ [styles.legacy]: chargeMove1 ? chargeMove1.isLegacy : false, }); const chargeMove2Type = this.getMoveType(chargeMove2); const chargeMove2Css = classNames({ [styles.legacy]: chargeMove2 ? chargeMove2.isLegacy : false, }); return (
{ quickMove && quickMoveType && } { chargeMove1 && chargeMove1Type && } { chargeMove2 && chargeMove2Type && }

Type Coverage

); } private readonly getMoveType = (move : IPokemonMove | null) => { let moveStats : ICombatMoveStats | null = null; if (move !== null) { moveStats = this.props.movesById.get(move.id) || null; } if (moveStats !== null) { return moveStats.type; } return null; } private readonly handleToggleQuickMoveMenu = (isOpen : boolean) => { this.props.handleToggleDropdownOpen('quickMove', isOpen); } private readonly handleChangeQuickMove = (option : IPokemonMove) => { this.props.handleChangeSelectedMove({ ...this.props.selectedMoves, quickMove: option, }); } private readonly handleToggleChargeMove1Menu = (isOpen : boolean) => { this.props.handleToggleDropdownOpen('chargeMove1', isOpen); } private readonly handleChangeChargeMove1 = (option : IPokemonMove) => { this.props.handleChangeSelectedMove({ ...this.props.selectedMoves, chargeMove1: option, }); } private readonly handleToggleChargeMove2Menu = (isOpen : boolean) => { this.props.handleToggleDropdownOpen('chargeMove2', isOpen); } private readonly handleChangeChargeMove2 = (option : IPokemonMove) => { this.props.handleChangeSelectedMove({ ...this.props.selectedMoves, chargeMove2: option, }); } }