const preact = require('preact'); const range = require('lodash/range'); const without = require('lodash/without'); const { connect } = require('preact-redux'); const shapes = require('./shapes'); const actions = require('../actions'); const addState = connect( function receiveState(state) { const { ws, instance, player, combiner, reclaiming, vboxHighlight, vboxSelected, itemInfo, itemUnequip, } = state; function sendVboxDiscard() { return ws.sendVboxDiscard(instance.id); } function sendVboxAccept(group, index) { return ws.sendVboxAccept(instance.id, group, index); } function sendVboxCombine() { return ws.sendVboxCombine(instance.id, combiner); } function sendVboxReclaim(i) { return ws.sendVboxReclaim(instance.id, i); } function sendItemUnequip([constructId, item]) { return ws.sendVboxUnequip(instance.id, constructId, item); } return { combiner, instance, player, reclaiming, sendVboxAccept, sendVboxCombine, sendVboxDiscard, sendVboxReclaim, vboxHighlight, vboxSelected, itemInfo, itemUnequip, sendItemUnequip }; }, function receiveDispatch(dispatch) { function setCombiner(c) { return dispatch(actions.setCombiner(c)); } function setReclaiming(v) { return dispatch(actions.setReclaiming(v)); } function setInfo(item) { return dispatch(actions.setInfo(item)); } function setVboxHighlight(v) { return dispatch(actions.setVboxHighlight(v)); } function setVboxSelected(v) { return dispatch(actions.setVboxSelected(v)); } function setItemEquip(v) { return dispatch(actions.setItemEquip(v)); } return { setCombiner, setReclaiming, setInfo, setVboxHighlight, setVboxSelected, setItemEquip, }; } ); function Vbox(args) { const { combiner, // instance, itemInfo, player, reclaiming, sendVboxAccept, sendVboxCombine, sendVboxDiscard, sendVboxReclaim, // vboxHighlight, setCombiner, setInfo, vboxSelected, setVboxSelected, setItemEquip, itemUnequip, sendItemUnequip, setReclaiming, setVboxHighlight, } = args; if (!player) return false; const { vbox } = player; const vboxSelecting = vboxSelected.length; // function setHighlight(type) { // if (type === 'skill') return setVboxHighlight(itemInfo.items.filter(v => v.skill).map(v => v.item)); // if (type === 'spec') return setVboxHighlight(itemInfo.items.filter(v => v.spec).map(v => v.item)); // return false; // } function combinerChange(newCombiner) { setCombiner(newCombiner); if (newCombiner.length === 1) { setItemEquip(newCombiner[0]); } else { setItemEquip(null); } if (newCombiner.every(c => c === null)) return setVboxHighlight([]); const combinerValues = newCombiner.map(cv => player.vbox.bound[cv]).filter(cv => cv); const filteredCombos = itemInfo.combos .filter(combo => combinerValues.every(u => combo.components.includes(u))); const comboValues = itemInfo.items.filter(v => { if (!filteredCombos.some(c => c.components.includes(v.item))) return false; if (!['Red', 'Green', 'Blue'].includes(v.item) && combinerValues.includes(v.item)) return false; return true; }); return setVboxHighlight(comboValues.map(v => v.item)); } // // VBOX // function vboxHover(e, v) { if (v) { setInfo(v); e.stopPropagation(); } return true; } function clearVboxSelected() { setVboxSelected([]); } function vboxBuySelected() { if (!vboxSelecting) return false; document.activeElement.blur(); clearVboxSelected(); sendVboxAccept(vboxSelected[0], vboxSelected[1]); return true; } function availableBtn(v, group, index) { if (!v) return ; const selected = vboxSelected[0] === group && vboxSelected[1] === index; // state not yet set in double click handler function onDblClick(e) { sendVboxAccept(group, index); e.stopPropagation(); } function onClick(e) { e.stopPropagation(); if (selected) return clearVboxSelected(); return setVboxSelected([group, index]); } const classes = `${selected ? 'highlight' : ''}`; if (shapes[v]) { return ( ); } return ( ); } function vboxElement() { return (