From 0be59af9b0a6ef2d364e8547f48d42176a6bb27a Mon Sep 17 00:00:00 2001 From: Cmdr McDonald Date: Fri, 20 Jan 2017 17:53:49 +0000 Subject: [PATCH] Allow selection of blueprints type and grade --- src/app/components/ModificationsMenu.jsx | 49 ++++++++++++++++++++---- src/app/utils/UtilityFunctions.js | 12 ++++++ 2 files changed, 54 insertions(+), 7 deletions(-) diff --git a/src/app/components/ModificationsMenu.jsx b/src/app/components/ModificationsMenu.jsx index 3ea35c6c..464eb05b 100644 --- a/src/app/components/ModificationsMenu.jsx +++ b/src/app/components/ModificationsMenu.jsx @@ -1,7 +1,7 @@ import React from 'react'; import { findDOMNode } from 'react-dom'; import TranslatedComponent from './TranslatedComponent'; -import { stopCtxPropagation } from '../utils/UtilityFunctions'; +import { isEmpty, stopCtxPropagation } from '../utils/UtilityFunctions'; import cn from 'classnames'; import { MountFixed, MountGimballed, MountTurret } from './SvgIcons'; import { Modifications } from 'coriolis-data/dist'; @@ -40,10 +40,12 @@ export default class ModificationsMenu extends TranslatedComponent { let blueprints = []; for (const blueprintName in Modifications.modules[m.grp].blueprints) { for (const grade of Modifications.modules[m.grp].blueprints[blueprintName]) { - blueprints.push(
{Modifications.blueprints[blueprintName].name} grade {grade}
); + const close = this._closeMenu.bind(this, Modifications.blueprints[blueprintName].id, grade); + blueprints.push(
{Modifications.blueprints[blueprintName].name} grade {grade}
); } } + // Set up the modifications let modifications = []; for (const modName of Modifications.modules[m.grp].modifications) { if (Modifications.modifications[modName].type === 'percentage' || Modifications.modifications[modName].type === 'numeric') { @@ -51,7 +53,24 @@ export default class ModificationsMenu extends TranslatedComponent { } } - return { blueprints, modifications }; + const blueprintMenuOpened = false; + + return { blueprintMenuOpened, blueprints, modifications }; + } + + _openMenu() { + const blueprintMenuOpened = true; + this.setState({ blueprintMenuOpened }); + } + + _closeMenu(blueprintId, grade) { + const { m } = this.props; + const blueprint = Object.assign({}, _.find(Modifications.blueprints, function(o) { return o.id === blueprintId; })); + blueprint.grade = grade; + m.blueprint = blueprint; + + const blueprintMenuOpened = false; + this.setState({ blueprintMenuOpened }); } /** @@ -59,16 +78,32 @@ export default class ModificationsMenu extends TranslatedComponent { * @return {React.Component} List */ render() { - let { tooltip, termtip } = this.context; + const language = this.context.language; + const translate = language.translate; + const { tooltip, termtip } = this.context; + const { m } = this.props; + const { blueprintMenuOpened } = this.state; + const open = this._openMenu.bind(this); + + let blueprintLabel; + if (m.blueprint && !isEmpty(m.blueprint)) { + blueprintLabel = translate(m.blueprint.name) + ' ' + translate('grade') + ' ' + m.blueprint.grade; + } else { + blueprintLabel = translate('select a blueprint'); + } + return (
e.stopPropagation() } onContextMenu={stopCtxPropagation} - onMouseOver={termtip.bind(null, 'HELP_MODIFICATIONS_MENU')} onMouseOut={tooltip.bind(null, null)} > - {this.state.blueprints} - {this.state.modifications} + {blueprintMenuOpened && this.state.blueprints} + {!blueprintMenuOpened &&
{blueprintLabel}
} + {!blueprintMenuOpened && + + {this.state.modifications} + }
); } diff --git a/src/app/utils/UtilityFunctions.js b/src/app/utils/UtilityFunctions.js index 1137af26..4f0e2e7c 100644 --- a/src/app/utils/UtilityFunctions.js +++ b/src/app/utils/UtilityFunctions.js @@ -71,3 +71,15 @@ export function shallowEqual(objA, objB) { export function fromUrlSafe(data) { return data ? data.replace(/-/g, '/').replace(/_/g, '+') : null; } + +/** + * Check if an object is empty + * @param {object} obj the object + * @return {bool} true if the object is empty, otherwise false + */ +export function isEmpty(obj) { + for (let key in obj) { + if (obj.hasOwnProperty(key)) return false; + } + return true; +};