This repository has been archived on 2024-04-29. You can view files and clone it, but cannot push or open issues or pull requests.
node-fftcg/frontend/src/components/Deck.vue

122 lines
2.7 KiB
Vue
Raw Normal View History

2019-05-14 15:59:36 +00:00
<template>
<v-expansion-panel-content>
<template v-slot:header>
2019-05-14 22:27:42 +00:00
<span class="subheading">{{ deck.name }}</span>
2019-05-14 15:59:36 +00:00
</template>
2019-05-16 06:10:03 +00:00
<v-alert v-if="!editing" :value="deck.note" type="info">
2019-05-14 22:27:42 +00:00
{{ deck.note }}
</v-alert>
2019-05-17 13:24:52 +00:00
<v-container v-if="!editing" style="position: relative" grid-list-md fluid>
<v-layout row wrap>
2019-05-14 23:13:44 +00:00
<v-flex v-for="part in deck_parts" :key="part.heading" xs12 sm6 md4>
2019-05-14 22:27:42 +00:00
<v-card>
<v-card-title>{{ part.count }} {{ part.heading }}</v-card-title>
<v-list dense subheader>
2019-05-14 23:13:44 +00:00
<Card
v-for="card in part.cards"
:key="card.serial"
:count="card.count"
:serial="card.serial"
:dbentry="card.dbentry"
></Card>
2019-05-14 22:27:42 +00:00
</v-list>
</v-card>
</v-flex>
2019-05-16 13:54:33 +00:00
2019-05-16 06:10:03 +00:00
<v-btn fab absolute bottom right @click.native="editing = true">
<v-icon>edit</v-icon>
</v-btn>
2019-05-14 22:27:42 +00:00
</v-layout>
</v-container>
2019-05-20 16:09:33 +00:00
<DeckEditor
:visible="editing"
:id="deck.id"
:value="deck_list"
@close="editing = false"
2019-05-23 11:58:59 +00:00
@change="$emit('change')"
2019-05-20 16:09:33 +00:00
/>
2019-05-14 15:59:36 +00:00
</v-expansion-panel-content>
</template>
<script>
2019-05-14 23:13:44 +00:00
import Card from './Card.vue'
2019-05-16 15:47:58 +00:00
import DeckEditor from './forms/DeckEditor.vue'
2019-05-14 23:13:44 +00:00
2019-05-14 15:59:36 +00:00
export default {
name: 'Deck',
props: {
deck: Object
},
2019-05-14 23:13:44 +00:00
components: {
2019-05-16 15:47:58 +00:00
Card,
DeckEditor
2019-05-14 23:13:44 +00:00
},
2019-05-16 06:10:03 +00:00
data: () => ({
editing: false
}),
2019-05-14 15:59:36 +00:00
computed: {
2019-05-14 22:27:42 +00:00
deck_parts() {
2019-05-16 13:54:33 +00:00
let retval = ['Forwards', 'Backups', 'Summons, Monsters & more'].map(
item => ({
heading: item,
cards: [],
count: 0
})
)
this.deck.cards.forEach(card => {
let target
switch (card.dbentry.type) {
case 'Forward':
target = 0
break
case 'Backup':
target = 1
break
default:
target = 2
break
2019-05-14 22:27:42 +00:00
}
2019-05-16 13:54:33 +00:00
retval[target].cards.push(card)
retval[target].count += card.count
})
2019-05-14 22:27:42 +00:00
2019-05-16 13:54:33 +00:00
retval.forEach(part =>
part.cards.sort(
2019-05-14 22:27:42 +00:00
(card_l, card_r) => card_l.dbentry.cost - card_r.dbentry.cost
)
2019-05-16 13:54:33 +00:00
)
2019-05-14 22:27:42 +00:00
return retval
2019-05-16 15:47:58 +00:00
},
deck_list() {
let lines = []
// begin with deck name and note
lines.push('Deck Name: ' + this.deck.name)
lines.push(this.deck.note)
lines.push('')
2019-05-16 23:16:22 +00:00
// list each deck part
2019-05-16 15:47:58 +00:00
this.deck_parts.forEach(part => {
lines.push(`${part.heading} (${part.count}):`)
part.cards.forEach(card =>
lines.push(`${card.count}x ${card.serial} "${card.dbentry.name}"`)
)
lines.push('')
})
return lines.join('\n')
2019-05-14 15:59:36 +00:00
}
}
}
</script>