const preact = require('preact');
const range = require('lodash/range');
const { NULL_UUID } = require('./../utils');
const { stringSort } = require('./../utils');
const molecule = require('./molecule');
const SpawnButton = require('./spawn.button');
const idSort = stringSort('id');
const COLOURS = [
'#a52a2a',
'#1FF01F',
'#3498db',
];
function Menu(args) {
const {
cryps,
selectedCryps,
setSelectedCryps,
setActiveInstance,
sendPlayerMmCrypsSet,
sendInstanceJoin,
sendCrypSpawn,
instances,
} = args;
function instanceList() {
if (!instances) return
...
;
const instancePanels = instances.map(instance => {
const globalInstance = instance.instance === NULL_UUID;
const name = globalInstance
? 'Global Matchmaking'
: `${instance.instance.substring(0, 5)} | ${instance.score.wins} : ${instance.score.losses}`;
return (
);
});
const instanceJoinHidden = !selectedCryps.every(c => !!c);
const mmSet = (
);
const instanceJoin = (
);
return (
{instancePanels}
{mmSet}
{instanceJoin}
);
}
function crypList() {
if (!cryps) return ;
// redux limitation + suggested workaround
// so much for dumb components
function selectCryp(id) {
// remove
const i = selectedCryps.findIndex(sid => sid === id);
if (i > -1) {
selectedCryps[i] = null;
return setSelectedCryps(selectedCryps);
}
// window insert
const insert = selectedCryps.findIndex(j => j === null);
if (insert === -1) return setSelectedCryps([id, null, null]);
selectedCryps[insert] = id;
return setSelectedCryps(selectedCryps);
}
const crypPanels = cryps.sort(idSort).map(cryp => {
const colour = selectedCryps.indexOf(cryp.id);
const selected = colour > -1;
const borderColour = selected ? COLOURS[colour] : '#000000';
return (
selectCryp(cryp.id)} >
{molecule}
{cryp.name}
);
});
const spawnButtonsNum = cryps.length < 3
? (3 - cryps.length)
: 1;
const spawnButtons = range(spawnButtonsNum)
.map(i => sendCrypSpawn(name)} />);
return (
{crypPanels}
{spawnButtons}
);
}
return (
{instanceList()}
{crypList()}
);
}
module.exports = Menu;