2019-11-21 19:32:41 +00:00
|
|
|
import { mapState, mapGetters } from 'vuex';
|
2019-04-19 05:33:49 +00:00
|
|
|
|
|
|
|
export default {
|
2019-11-08 19:56:03 +00:00
|
|
|
props: {
|
|
|
|
gameId: Number,
|
|
|
|
listId: Number,
|
|
|
|
},
|
|
|
|
|
|
|
|
data() {
|
|
|
|
return {
|
|
|
|
showEditOptions: false,
|
|
|
|
};
|
|
|
|
},
|
|
|
|
|
|
|
|
computed: {
|
2019-12-17 05:05:35 +00:00
|
|
|
...mapState(['settings', 'games', 'gameLists', 'platform', 'user', 'tags', 'activeList', 'notes', 'progresses']),
|
2019-11-21 19:32:41 +00:00
|
|
|
...mapGetters(['hasTags']),
|
2019-11-08 19:56:03 +00:00
|
|
|
|
|
|
|
showGameRatings() {
|
2019-12-03 21:21:50 +00:00
|
|
|
return this.game.rating && this.list && !this.list.hideGameRatings;
|
2019-04-19 05:33:49 +00:00
|
|
|
},
|
|
|
|
|
2019-12-18 05:47:35 +00:00
|
|
|
gameProgress() {
|
|
|
|
return this.game && this.progresses[this.platform.code][this.game.id];
|
2019-12-15 04:32:40 +00:00
|
|
|
},
|
|
|
|
|
2019-11-08 19:56:03 +00:00
|
|
|
gameCardClass() {
|
|
|
|
return [
|
|
|
|
'game-card',
|
|
|
|
this.list.view,
|
|
|
|
];
|
2019-04-19 05:33:49 +00:00
|
|
|
},
|
|
|
|
|
2019-11-08 19:56:03 +00:00
|
|
|
activePlatform() {
|
|
|
|
return this.gameLists[this.platform.code];
|
|
|
|
},
|
2019-04-19 05:33:49 +00:00
|
|
|
|
2019-11-08 19:56:03 +00:00
|
|
|
note() {
|
|
|
|
return this.notes && this.notes[this.gameId] && this.notes[this.gameId].text;
|
|
|
|
},
|
|
|
|
|
2019-12-17 05:05:35 +00:00
|
|
|
progress() {
|
|
|
|
return this.progresses && this.progresses[this.gameId] && this.progresses[this.gameId].number;
|
|
|
|
},
|
|
|
|
|
2019-11-08 19:56:03 +00:00
|
|
|
list() {
|
|
|
|
return this.activePlatform[this.listId];
|
|
|
|
},
|
|
|
|
|
|
|
|
game() {
|
|
|
|
return this.games[this.gameId];
|
|
|
|
},
|
|
|
|
|
|
|
|
coverUrl() {
|
|
|
|
const game = this.games[this.gameId];
|
|
|
|
|
|
|
|
return game.cover && game.cover.image_id
|
|
|
|
? `https://images.igdb.com/igdb/image/upload/t_cover_small_2x/${game.cover.image_id}.jpg`
|
|
|
|
: '/static/no-image.jpg';
|
|
|
|
},
|
|
|
|
|
|
|
|
addToLabel() {
|
|
|
|
return this.list.name.length >= 25
|
|
|
|
? 'list'
|
|
|
|
: this.list.name;
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
methods: {
|
|
|
|
openDetails() {
|
|
|
|
this.$bus.$emit('OPEN_GAME', {
|
|
|
|
id: this.game.id,
|
|
|
|
listId: this.listId,
|
|
|
|
});
|
|
|
|
},
|
|
|
|
|
|
|
|
openTags() {
|
|
|
|
this.$bus.$emit('OPEN_TAGS', this.game.id);
|
|
|
|
},
|
|
|
|
|
|
|
|
addGame() {
|
|
|
|
const data = {
|
|
|
|
listId: this.listId,
|
|
|
|
gameId: this.gameId,
|
|
|
|
};
|
|
|
|
|
|
|
|
this.$emit('added');
|
|
|
|
this.$store.commit('ADD_GAME', data);
|
|
|
|
|
|
|
|
this.$ga.event({
|
|
|
|
eventCategory: 'game',
|
|
|
|
eventAction: 'add',
|
|
|
|
eventLabel: 'addGame',
|
|
|
|
eventValue: data,
|
|
|
|
});
|
|
|
|
|
|
|
|
this.$store.dispatch('SAVE_LIST', this.gameLists)
|
|
|
|
.then(() => {
|
|
|
|
this.$bus.$emit('TOAST', {
|
|
|
|
message: `Added ${this.game.name} to list ${this.list.name}`,
|
|
|
|
imageUrl: this.coverUrl,
|
|
|
|
});
|
|
|
|
})
|
|
|
|
.catch(() => {
|
|
|
|
this.$bus.$emit('TOAST', { message: 'Authentication error', type: 'error' });
|
|
|
|
this.$router.push({ name: 'sessionExpired' });
|
|
|
|
});
|
2019-04-19 05:33:49 +00:00
|
|
|
},
|
|
|
|
|
2019-11-08 19:56:03 +00:00
|
|
|
removeTag(tagName) {
|
|
|
|
this.$store.commit('REMOVE_GAME_TAG', { tagName, gameId: this.gameId });
|
2019-12-03 18:26:19 +00:00
|
|
|
this.saveTags();
|
|
|
|
},
|
|
|
|
|
|
|
|
async saveTags() {
|
|
|
|
await this.$store.dispatch('SAVE_TAGS', this.tags)
|
|
|
|
.catch(() => {
|
|
|
|
this.$bus.$emit('TOAST', { message: 'There was an error saving your tag', type: 'error' });
|
|
|
|
this.$router.push({ name: 'sessionExpired' });
|
|
|
|
});
|
|
|
|
|
|
|
|
this.$bus.$emit('TOAST', { message: 'Tags updated' });
|
2019-04-19 05:33:49 +00:00
|
|
|
},
|
2019-11-08 19:56:03 +00:00
|
|
|
},
|
2019-04-19 05:33:49 +00:00
|
|
|
};
|
2019-11-08 20:34:06 +00:00
|
|
|
|