diff --git a/client/assets/styles/controls.less b/client/assets/styles/controls.less index e00c633a..25d7538d 100644 --- a/client/assets/styles/controls.less +++ b/client/assets/styles/controls.less @@ -22,7 +22,14 @@ aside { grid-area: controls; display: grid; - grid-auto-rows: 1fr; + + grid-template-areas: + "top" + "p0" + "p1" + "bottom"; + + grid-template-rows: min-content 3fr 3fr 1fr; grid-gap: 0.5em 0; } @@ -107,11 +114,11 @@ aside { button { flex: 0; + } - &:first-child { - flex: 1; - font-size: 200%; - } + .ready { + flex: 1; + font-size: 200%; } } diff --git a/client/src/components/game.ctrl.btns.jsx b/client/src/components/game.ctrl.btns.jsx index c990d2df..1b091c3c 100644 --- a/client/src/components/game.ctrl.btns.jsx +++ b/client/src/components/game.ctrl.btns.jsx @@ -49,48 +49,24 @@ const addState = connect( } ); -function InstanceCtrlBtns(args) { +function GameCtrlBtns(args) { const { game, animating, - getInstanceState, - sendAbandon, sendGameSkillClear, sendReady, - quit, } = args; if (!game) return false; - const finished = game.phase === 'Finish'; - const { abandonState } = this.state; - - const abandonStateTrue = e => { - e.stopPropagation(); - this.setState({ abandonState: true }); - setTimeout(() => this.setState({ abandonState: false }), 2000); - }; - - const abandonClasses = `abandon ${abandonState ? 'confirming' : ''}`; - const abandonAction = abandonState ? sendAbandon : abandonStateTrue; - - function quitClick() { - getInstanceState(); - quit(); - } - - const readyBtn = ; - const quitBtn = ; - return (
- {finished ? quitBtn : readyBtn} - +
); } -module.exports = addState(InstanceCtrlBtns); +module.exports = addState(GameCtrlBtns); diff --git a/client/src/components/game.ctrl.btns.top.jsx b/client/src/components/game.ctrl.btns.top.jsx new file mode 100644 index 00000000..5abcdcae --- /dev/null +++ b/client/src/components/game.ctrl.btns.top.jsx @@ -0,0 +1,64 @@ +const preact = require('preact'); +const { connect } = require('preact-redux'); + +const actions = require('../actions'); + +const addState = connect( + function receiveState(state) { + const { + ws, + game, + } = state; + + function sendAbandon() { + return ws.sendInstanceAbandon(game.instance); + } + + return { + game, + + sendAbandon, + }; + }, + function receiveDispatch(dispatch) { + function leave() { + dispatch(actions.setNav('play')); + dispatch(actions.setGame(null)); + dispatch(actions.setInstance(null)); + } + + return { leave }; + } +); + +function GameCtrlTopBtns(args) { + const { + game, + + leave, + sendAbandon, + } = args; + + const finished = game && game.phase === 'Finished'; + const { abandonState } = this.state; + + const abandonStateTrue = e => { + e.stopPropagation(); + this.setState({ abandonState: true }); + setTimeout(() => this.setState({ abandonState: false }), 2000); + }; + + const abandonClasses = `abandon ${abandonState ? 'confirming' : ''}`; + const abandonAction = abandonState ? sendAbandon : abandonStateTrue; + + const abandonBtn = ; + const leaveBtn = ; + + return ( +
+ {finished ? leaveBtn : abandonBtn} +
+ ); +} + +module.exports = addState(GameCtrlTopBtns); diff --git a/client/src/components/game.ctrl.jsx b/client/src/components/game.ctrl.jsx index 696d67bc..12c308a5 100644 --- a/client/src/components/game.ctrl.jsx +++ b/client/src/components/game.ctrl.jsx @@ -5,6 +5,7 @@ const actions = require('../actions'); const PlayerBox = require('./player.box'); const GameCtrlButtons = require('./game.ctrl.btns'); +const GameCtrlTopButtons = require('./game.ctrl.btns.top'); const addState = connect( function receiveState(state) { @@ -61,6 +62,7 @@ function Controls(args) {