Files
habitica/website/client/src/components/shops/quests/quest-helper.mixin.js
T
2025-04-17 16:38:22 -05:00

68 lines
1.7 KiB
JavaScript

import groupBy from 'lodash/groupBy';
import { mapState } from '../../../libs/store';
export const QuestHelperMixin = {
computed: {
...mapState({
content: 'content',
}),
},
methods: {
getDropIcon (drop) {
switch (drop.type) {
case 'hatchingPotions':
return `Pet_HatchingPotion_${drop.key}`;
case 'food':
return `Pet_Food_${drop.key}`;
case 'eggs':
return `Pet_Egg_${drop.key}`;
case 'quests':
return `inventory_quest_scroll_${drop.key}`;
case 'mounts':
return `stable_Mount_Icon_${drop.key}`;
case 'pets':
return `stable_Pet-${drop.key}`;
default:
return `shop_${drop.key}`;
}
},
getDropName (drop) {
return typeof drop.text === 'function' ? drop.text() : drop.text;
},
getDropsList (drops, ownerOnly) {
if (!drops) return [];
const dropList = drops.filter(drop => {
if (ownerOnly) {
return drop.onlyOwner;
}
return !drop.onlyOwner;
}).map(item => {
if (item.type === 'gear') {
return this.content.gear.flat[item.key];
}
if (item.type === 'quests') {
const questScroll = {};
Object.assign(questScroll, this.content.quests[item.key]);
questScroll.type = 'quests';
questScroll.text = item.text();
questScroll.onlyOwner = item.onlyOwner;
return questScroll;
}
return {
...item,
text: item.text(),
};
});
return Object.entries(groupBy(dropList, e => `${e.type}_${e.key}`))
.map(([, entries]) => ({
...entries[0],
amount: entries.length,
}));
},
},
};