small fixes while reviewing code

This commit is contained in:
2019-07-29 15:43:14 +02:00
parent a3eaeed807
commit 2991a88a30
5 changed files with 88 additions and 90 deletions

View File

@@ -4,7 +4,7 @@
<div class="control is-expanded" <div class="control is-expanded"
:class="{'is-loading': is_loading }"> :class="{'is-loading': is_loading }">
<input type="text" <input type="text"
v-model="search" v-model="item_name"
@input="autoCompletion" @input="autoCompletion"
class="input" class="input"
:class="{'is-danger': no_results, :class="{'is-danger': no_results,
@@ -12,6 +12,11 @@
autocomplete="on"> autocomplete="on">
</input> </input>
</div> </div>
<div class="control">
<input type="text" class="input"
:class="{'is-danger': !item_price}"
v-model.number="item_price"></input>
</div>
<div class="control"> <div class="control">
<button class="button is-primary" <button class="button is-primary"
:disabled="no_results" :disabled="no_results"
@@ -23,7 +28,7 @@
<div class="dropdown-menu"> <div class="dropdown-menu">
<div class="dropdown-content"> <div class="dropdown-content">
<a v-for="(result,i) in results" :key="i" <a v-for="(result,i) in results" :key="i"
@click="setResult(result.name)" @click="setResult(result)"
class="dropdown-item" class="dropdown-item"
> >
{{ result.name }} {{ result.name }}
@@ -35,18 +40,15 @@
</template> </template>
<script> <script>
// List of items for autocomplete
const MOCK_ITEMS = [
{id: 35, name: "Cape d'invisibilité", sell_value: 30000},
{id: 8, name: "Arc long", sell_value: 10},
];
export default { export default {
props: ["source"],
data () { data () {
return { return {
is_loading: false, is_loading: false,
no_results: false, no_results: false,
search: '', item_name: '',
item_price: '',
results: [], results: [],
auto_open: false, auto_open: false,
}; };
@@ -55,13 +57,13 @@
autoCompletion (ev) { autoCompletion (ev) {
// TODO: a lot happens here that // TODO: a lot happens here that
// need to be clarified // need to be clarified
if (this.search == '') { if (this.item_name == '') {
this.auto_open = false; this.auto_open = false;
this.results = []; this.results = [];
this.no_results = false; this.no_results = false;
} else { } else {
this.results = MOCK_ITEMS.filter(item => { this.results = this.source.filter(item => {
return item.name.includes(this.search); return item.name.includes(this.item_name);
}); });
// Update status // Update status
if (this.results.length == 0) { if (this.results.length == 0) {
@@ -73,12 +75,17 @@
} }
}, },
setResult(result) { setResult(result) {
this.search = result; this.item_name = result.name;
this.item_price = result.sell_value;
this.auto_open = false; this.auto_open = false;
}, },
addItem () { addItem () {
this.$emit("addItem", this.search); this.$emit("addItem", {
this.search = ''; name: this.item_name,
sell_value: this.item_price
});
this.item_name = '';
this.item_price = '';
this.results = []; this.results = [];
this.no_results = false; this.no_results = false;
this.auto_open = false; this.auto_open = false;

View File

@@ -1,32 +1,29 @@
<template> <template>
<div class="card is-shadowless"> <div>
<div class="card-header"> <p class="heading has-text-left is-size-5">
<p class="card-header-title"> Nouveau loot - {{ looted.length }} objet(s)</p>
Nouveau loot - {{ looted.length }} objet(s)</p> <ItemInput @addItem="onAddItem" :source="inventory"></ItemInput>
</div> <p v-for="(item, idx) in looted" :key="idx"
<div class="card-content"> class="has-text-left is-size-5">
<ItemInput @addItem="onAddItem"></ItemInput> {{ item.name }} ({{ item.sell_value }}po)
<p v-for="(item, idx) in looted" :key="idx" </p>
class="has-text-left is-size-5"> </div>
{{ item }}
</p>
</div>
<div class="card-footer">
<div class="card-footer-item buttons is-center">
<a class="button is-primary">Confirmer</a>
<a @click="onClose" class="button is-danger">Annuler</a>
</div>
</div>
</div>
</template> </template>
<script> <script>
import ItemInput from './ItemInput.vue' import ItemInput from './ItemInput.vue'
// List of items for autocomplete
const MOCK_ITEMS = [
{id: 35, name: "Cape d'invisibilité", sell_value: 30000},
{id: 8, name: "Arc long", sell_value: 10},
{id: 9, name: "Arc court", sell_value: 10},
];
export default { export default {
components: { ItemInput }, components: { ItemInput },
data () { return { data () { return {
looted: [], looted: [],
inventory: MOCK_ITEMS,
}; };
}, },
methods: { methods: {

View File

@@ -10,15 +10,9 @@
</a> </a>
</div> </div>
<div id="menu" class="navbar-menu"> <div id="menu" class="navbar-menu">
<div class="navbar-start"> <div class="navbar-start" v-if="!playerIsGroup">
<template v-if="playerIsGroup">
<a class="navbar-item">Nouveau loot</a>
</template>
<template v-else>
<a class="navbar-item" @click="switchPlayerChestVisibility"> <a class="navbar-item" @click="switchPlayerChestVisibility">
{{ app_state.show_player_chest ? 'Coffre de groupe' : 'Mon coffre' }}</a> {{ app_state.show_player_chest ? 'Coffre de groupe' : 'Mon coffre' }}</a>
<a class="navbar-item">Marchand</a>
</template>
</div> </div>
<div class="navbar-end"> <div class="navbar-end">
<div class="navbar-item has-dropdown is-hoverable"> <div class="navbar-item has-dropdown is-hoverable">
@@ -36,10 +30,24 @@
</div> </div>
</div> </div>
</nav> </nav>
<section class="has-background-light" v-if="show_wealth"> <section class="box is-shadowless" v-if="show_wealth">
<Wealth :wealth="wealth" :debt="player.debt"></Wealth> <Wealth :wealth="wealth" :debt="player.debt"></Wealth>
</section>
<section class="card">
<div class="card-content">
<Loot v-if="is_adding"></Loot>
<Chest v-else :player="shownChest"></Chest>
</div>
<div class="card-footer" v-if="shownChest == player.id">
<template v-if="is_adding">
<a class="card-footer-item">Confirmer</a>
<a class="card-footer-item" @click="toggleAdding">Annuler</a>
</template>
<a v-else class="card-footer-item" @click="toggleAdding">
+ {{ playerIsGroup ? 'Nouveau loot' : 'Acheter' }}
</a>
</div>
</section> </section>
<Chest :player="shownChest"></Chest>
</div> </div>
</template> </template>
@@ -47,28 +55,16 @@
import { AppStorage } from '../AppStorage' import { AppStorage } from '../AppStorage'
import Chest from './Chest.vue' import Chest from './Chest.vue'
import Wealth from './Wealth.vue' import Wealth from './Wealth.vue'
import Loot from './Loot.vue'
/* /*
The Player control board. The Player control board.
To test :
- Player name is displayed
- Player's wealth is displayed -> Inside Wealth component
- Dropdown:
- The first item is the group
- Opened by activator
- Closed when clicked outside
- Click on item does switch active player
- Switch player :
- Name is updated when player_id is updated
- Wealth is updated -> Inside Wealth component
- Chest button controls Chest visibility
*/ */
let handleOutsideClick;
export default { export default {
components: { Chest, Wealth }, components: { Chest, Wealth, Loot },
data () { data () {
return { return {
app_state: AppStorage.state, app_state: AppStorage.state,
is_adding: false,
show_wealth: true, show_wealth: true,
}; };
}, },
@@ -82,12 +78,12 @@
if (!this.app_state.initiated) { if (!this.app_state.initiated) {
return ["-", "-", "-", "-"]; return ["-", "-", "-", "-"];
} else { } else {
const cp = this.player.cp const cp = this.player.cp
const sp = this.player.sp const sp = this.player.sp
const gp = this.player.gp const gp = this.player.gp
const pp = this.player.pp const pp = this.player.pp
return [cp, sp, gp, pp]; return [cp, sp, gp, pp];
} }
}, },
// Check if the active player is the special 'Group' player // Check if the active player is the special 'Group' player
playerIsGroup () { playerIsGroup () {
@@ -100,6 +96,9 @@
} }
}, },
methods: { methods: {
toggleAdding () {
this.is_adding = !this.is_adding;
},
switchPlayerChestVisibility () { switchPlayerChestVisibility () {
AppStorage.switchPlayerChestVisibility(); AppStorage.switchPlayerChestVisibility();
}, },

View File

@@ -2,25 +2,22 @@
<div class="buttons is-right" > <div class="buttons is-right" >
<template v-if="isInConflict"> <template v-if="isInConflict">
<button class="button is-success" <button class="button is-success"
@click="cancelRequest" @click="cancelRequest">
> <span class="icon is-small">
<span class="icon is-small"> <i class="fas fa-hand-peace"></i>
<i class="fas fa-hand-peace"></i> </span>
</span> </button>
</button> <button class="button is-danger"
<button class="button is-danger" @click="hardenRequest">
@click="hardenRequest" <span class="icon is-small">
> <i class="fas fa-hand-middle-finger"></i>
<span class="icon is-small"> </span>
<i class="fas fa-hand-middle-finger"></i> </button>
</span>
</button>
</template> </template>
<button class="button is-primary" <button class="button is-primary"
@click="putRequest" @click="putRequest"
:class="{'is-outlined': isRequested}" :class="{'is-small': isRequested}"
:disabled="isRequested" :disabled="isRequested">
>
<span class="icon is-small"> <span class="icon is-small">
<i class="fas fa-praying-hands"></i> <i class="fas fa-praying-hands"></i>
</span> </span>
@@ -33,20 +30,18 @@
export default { export default {
props: ["item"], props: ["item"],
data () { data () {
return { return AppStorage.state;
state: AppStorage.state,
};
}, },
computed: { computed: {
// Check if item is requested by active player // Check if item is requested by active player
isRequested () { isRequested () {
const reqs = this.state.player_claims[this.state.player_id]; const reqs = this.player_claims[this.player_id];
return reqs.includes(this.item); return reqs.includes(this.item);
}, },
// Check if item is requested by multiple players including active one // Check if item is requested by multiple players including active one
isInConflict () { isInConflict () {
const reqs = this.state.player_claims; const reqs = this.player_claims;
const playerId = this.state.player_id; const playerId = this.player_id;
var reqByPlayer = false; var reqByPlayer = false;
var reqByOther = false; var reqByOther = false;
for (var key in reqs) { for (var key in reqs) {

View File

@@ -9,7 +9,7 @@
</div> </div>
<template v-if="edit"> <template v-if="edit">
<div class="level-item"> <div class="level-item">
<input type="number" step="0.01" v-model="edit_value"></input> <input class="input" type="number" step="0.01" v-model="edit_value"></input>
</div> </div>
<div class="level-item"> <div class="level-item">
<button class="button is-danger" @click="updateWealth()"> <button class="button is-danger" @click="updateWealth()">