import React from 'react'; import PropTypes from 'prop-types'; import cn from 'classnames'; import Persist from '../stores/Persist'; import TranslatedComponent from './TranslatedComponent'; import { diffDetails } from '../utils/SlotFunctions'; import AvailableModulesMenu from './AvailableModulesMenu'; import ModificationsMenu from './ModificationsMenu'; import * as ModuleUtils from '../shipyard/ModuleUtils'; import { ListModifications, Modified } from './SvgIcons'; import { Modifications } from 'coriolis-data/dist'; import { stopCtxPropagation } from '../utils/UtilityFunctions'; import { blueprintTooltip } from '../utils/BlueprintFunctions'; /** * Standard Slot */ export default class StandardSlot extends TranslatedComponent { static propTypes = { slot: PropTypes.object, modules: PropTypes.array.isRequired, onSelect: PropTypes.func.isRequired, onOpen: PropTypes.func.isRequired, onChange: PropTypes.func.isRequired, ship: PropTypes.object.isRequired, selected: PropTypes.bool, warning: PropTypes.func, }; /** * Construct the slot * @param {object} props Object properties */ constructor(props) { super(props); this._modificationsSelected = false; } /** * Render the slot * @return {React.Component} Slot component */ render() { let { termtip, tooltip } = this.context; let { translate, formats, units } = this.context.language; let { modules, slot, selected, warning, onSelect, onChange, ship } = this.props; let m = slot.m; let classRating = m.class + m.rating; let menu; let validMods = m == null ? [] : (Modifications.modules[m.grp].modifications || []); let showModuleResistances = Persist.showModuleResistances(); let mass = m.getMass() || m.cargo || m.fuel || 0; // Modifications tooltip shows blueprint and grade, if available let modTT = translate('modified'); if (m && m.blueprint && m.blueprint.name) { modTT = translate(m.blueprint.name) + ' ' + translate('grade') + ' ' + m.blueprint.grade; modTT = (