diff --git a/client/cryps.css b/client/cryps.css index eee93d4d..f0dd75c5 100644 --- a/client/cryps.css +++ b/client/cryps.css @@ -617,7 +617,7 @@ table td svg { } .info-spec { - margin-top: 1em; + margin-top: 2em; } .spec-goals figure { diff --git a/client/src/components/info.component.jsx b/client/src/components/info.component.jsx index 6d6f7ab5..5c67d946 100644 --- a/client/src/components/info.component.jsx +++ b/client/src/components/info.component.jsx @@ -3,6 +3,9 @@ const range = require('lodash/range'); const { ITEMS: { SKILLS, COLOURS, SPECS: SPEC_CONSTANT } } = require('./../constants'); const { COLOUR_ICONS, STATS, SPECS, convertVar, crypAvatar } = require('../utils'); +const shapes = require('./shapes'); + +const InfoCryp = require('./info.cryp'); function Info(args) { const { @@ -14,6 +17,7 @@ function Info(args) { player, setInfo, vboxInfo, + setVboxHidden, vboxHidden, } = args; @@ -108,65 +112,6 @@ function Info(args) { } } - function CrypInfo() { - if (!activeCryp) return false; - const cryp = player.cryps.find(c => c.id === activeCryp.id); - - if (!cryp) return false; - - // onClick={() => setInfo('skill', { skill: s, cryp })} - const skills = range(0, 3).map(i => { - const skill = cryp.skills[i]; - - function skillClick(e) { - if (!skill) setInfo('highlight', 'skill'); - else setInfo('skill', { skill: skill.skill, cryp }); - e.stopPropagation(); - return setActiveCryp(cryp); - } - - const s = cryp.skills[i] - ? cryp.skills[i].skill - : ( ); - return ; - }); - - const stats = Object.values(STATS).map((s, j) => ( -
- {s.svg(`stat-icon ${s.colour}`)} -
{cryp[s.stat].value}
-
- )); - - const specs = cryp.specs.map((s, i) => { - function specClick() { - setInfo('spec', { spec: s, cryp }); - } - - return ( -
- {SPECS[s].svg(`stat-icon ${SPECS[s].colour}`)} -
{SPECS[s].caption}
-
- ); - }); - - - return ( -
-
- {stats} -
-
- {specs} -
-
- {skills} -
-
- ); - } - function playerRound(id) { if (!instance.rounds.length) return null; return instance.rounds[instance.rounds.length - 1].find(r => r.player_ids.includes(id)); @@ -237,10 +182,10 @@ function Info(args) { return (
- - + +
); } diff --git a/client/src/components/info.container.jsx b/client/src/components/info.container.jsx index c0a8da80..c9220fce 100644 --- a/client/src/components/info.container.jsx +++ b/client/src/components/info.container.jsx @@ -39,13 +39,13 @@ const addState = connect( dispatch(actions.setActiveCryp(value)); } - function setActiveVar(value) { - dispatch(actions.setActiveVar(value)); + function setVboxHidden(value) { + dispatch(actions.setVboxHidden(value)); } return { setInfo, - setActiveVar, + setVboxHidden, setActiveCryp, }; } diff --git a/client/src/components/info.cryp.jsx b/client/src/components/info.cryp.jsx new file mode 100644 index 00000000..3f01afb7 --- /dev/null +++ b/client/src/components/info.cryp.jsx @@ -0,0 +1,121 @@ +const preact = require('preact'); +const range = require('lodash/range'); +const { connect } = require('preact-redux'); + +const actions = require('../actions'); +const { STATS, SPECS, crypAvatar } = require('../utils'); +const shapes = require('./shapes'); + +const addState = connect( + function receiveState(state) { + const { activeCryp, player } = state; + return { activeCryp, player }; + }, + + function receiveDispatch(dispatch) { + function setInfo(item, value) { + dispatch(actions.setInfo([item, value])); + } + + function setActiveCryp(value) { + dispatch(actions.setActiveCryp(value)); + } + + function setVboxHidden(value) { + dispatch(actions.setVboxHidden(value)); + } + + return { setInfo, setActiveCryp, setVboxHidden }; + } + +); + +function InfoCryp(args) { + const { + activeCryp, + player, + + setVboxHidden, + setInfo, + setActiveCryp, + } = args; + + if (!activeCryp) return false; + const cryp = player.cryps.find(c => c.id === activeCryp.id); + + if (!cryp) return false; + + // onClick={() => setInfo('skill', { skill: s, cryp })} + const skills = range(0, 3).map(i => { + const skill = cryp.skills[i]; + + function skillClick(e) { + if (!skill) { + setVboxHidden(false); + setInfo('highlight', 'skill'); + } else setInfo('skill', { skill: skill.skill, cryp }); + e.stopPropagation(); + return setActiveCryp(cryp); + } + + const s = cryp.skills[i] + ? cryp.skills[i].skill + : ( ); + return ; + }); + + const stats = Object.values(STATS).map((s, j) => ( +
+ {s.svg(`stat-icon ${s.colour}`)} +
{cryp[s.stat].value}
+
+ )); + + const specs = range(0, 6).map(i => { + const s = cryp.specs[i]; + + function blankSpecClick(e) { + e.stopPropagation(); + setActiveCryp(cryp); + setInfo('highlight', 'spec'); + } + + if (!s) { + return ( +
+ {shapes.diamond('stat-icon gray')} +
 
+
+ ); + } + + function specClick(e) { + e.stopPropagation(); + setActiveCryp(cryp); + setInfo('spec', { spec: s, cryp }); + } + + return ( +
+ {SPECS[s].svg(`stat-icon ${SPECS[s].colour}`)} +
{SPECS[s].caption}
+
+ ); + }); + + return ( +
+
+ {stats} +
+
+ {specs} +
+
+ {skills} +
+
+ ); +} + +module.exports = addState(InfoCryp); diff --git a/client/src/components/instance.cryps.jsx b/client/src/components/instance.cryps.jsx index 4a29dc61..82b97b60 100644 --- a/client/src/components/instance.cryps.jsx +++ b/client/src/components/instance.cryps.jsx @@ -120,9 +120,9 @@ function Cryp(props) { // const border = { border: `${thickness(cTotal)}px solid rgba(${colours.red}, ${colours.green}, ${colours.blue}, ${alpha})` }; return ( -
+
-
+
{crypAvatar(cryp.name)}
{cryp.name}