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}