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 InstanceCreateForm = require('./instance.create.form'); const idSort = stringSort('id'); const COLOURS = [ '#a52a2a', '#1FF01F', '#3498db', ]; function Menu(args) { const { account, cryps, selectedCryps, setSelectedCryps, sendInstanceState, sendPlayerMmCrypsSet, sendInstanceJoin, sendInstanceList, sendCrypSpawn, instances, } = args; function instanceList() { if (!instances) return
...
; const instancePanels = instances.map(instance => { const player = instance.players.find(p => p.id === account.id); const scoreText = player ? `${player.score.wins} : ${player.score.losses}` : ''; function instanceClick() { if (!player) return sendInstanceJoin(instance); return sendInstanceState(instance); } return ( {instance.name} {instance.players.length} / {instance.max_players} {scoreText} ); }); const instanceJoinHidden = !selectedCryps.every(c => !!c); // const mmSet = ( // // ); return (
{instancePanels} sendInstanceList()}>
instance name players status
); } 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;