|
| 1 | +/* |
| 2 | + * Copyright 2018 The boardgame.io Authors. |
| 3 | + * |
| 4 | + * Use of this source code is governed by a MIT-style |
| 5 | + * license that can be found in the LICENSE file or at |
| 6 | + * https://opensource.org/licenses/MIT. |
| 7 | + */ |
| 8 | + |
| 9 | +import React from 'react'; |
| 10 | +import { UI, Card, Deck } from 'boardgame.io/ui'; |
| 11 | + |
| 12 | +function handler(type, fn) { |
| 13 | + return arg => { |
| 14 | + console.log(type + ': ' + JSON.stringify(arg)); |
| 15 | + if (fn) fn(arg); |
| 16 | + }; |
| 17 | +} |
| 18 | + |
| 19 | +class Board extends React.Component { |
| 20 | + constructor(props) { |
| 21 | + super(props); |
| 22 | + |
| 23 | + this.state = { |
| 24 | + deck1: [1, 2, 3], |
| 25 | + deck2: [], |
| 26 | + free: [4], |
| 27 | + }; |
| 28 | + } |
| 29 | + |
| 30 | + deck1Drop = arg => { |
| 31 | + this.setState(s => ({ |
| 32 | + free: s.free.filter(t => t != arg), |
| 33 | + deck2: s.deck2.filter(t => t != arg), |
| 34 | + deck1: [...s.deck1.filter(t => t != arg), arg], |
| 35 | + })); |
| 36 | + }; |
| 37 | + |
| 38 | + deck2Drop = arg => { |
| 39 | + this.setState(s => ({ |
| 40 | + free: s.free.filter(t => t != arg), |
| 41 | + deck1: s.deck1.filter(t => t != arg), |
| 42 | + deck2: [...s.deck2.filter(t => t != arg), arg], |
| 43 | + })); |
| 44 | + }; |
| 45 | + |
| 46 | + render() { |
| 47 | + return ( |
| 48 | + <UI sandboxMode={true}> |
| 49 | + <Deck |
| 50 | + onDrop={handler('deck1 onDrop', this.deck1Drop)} |
| 51 | + onClick={handler('deck1 onClick')} |
| 52 | + onRemove={handler('deck1 onRemove', this.deck1Remove)} |
| 53 | + > |
| 54 | + {this.state.deck1.map(c => ( |
| 55 | + <Card key={c} data={c} back={c} onClick={handler(c + ' onClick')} /> |
| 56 | + ))} |
| 57 | + </Deck> |
| 58 | + |
| 59 | + <Deck |
| 60 | + onDrop={handler('deck2 onDrop', this.deck2Drop)} |
| 61 | + onClick={handler('deck2 onClick')} |
| 62 | + onRemove={handler('deck2 onRemove', this.deck2Remove)} |
| 63 | + > |
| 64 | + {this.state.deck2.map(c => ( |
| 65 | + <Card key={c} data={c} back={c} onClick={handler(c + ' onClick')} /> |
| 66 | + ))} |
| 67 | + </Deck> |
| 68 | + |
| 69 | + <div> |
| 70 | + {this.state.free.map(c => ( |
| 71 | + <Card key={c} data={c} back={c} onClick={handler(c + ' onClick')} /> |
| 72 | + ))} |
| 73 | + </div> |
| 74 | + </UI> |
| 75 | + ); |
| 76 | + } |
| 77 | +} |
| 78 | + |
| 79 | +export default Board; |
0 commit comments