item pinning (#8918)
* toggle pinned state of items server + client * pin quests / add pin src * add officially pinned items and api to get in app rewards * update schema and get items deatils * update pin actions to the new logic * show countBadge only with a number * extract getPinKey - pin seasonal items * togglePinned in buy-dialogs * add pinKey to shop items * wip * wip * fix path * togglePinnedItem as common.op / use in client * fix linting * pinning: getItemInfo and save in db path and type * make api more consistent, fix bugs * updates * fix bugs * update actions to current api * marketGear * change to pinType * add mystery_set to getItemInfo * fix isPinned * ignore animals * list shopItems (initial) * shopItem now has default popoverconent, itemclass and price / currency - list pinned items as rewards - attributes to gear * show buyModal for the rewards * show mystery_set icon * add info whether item is suggested * write migration, fix style issues * pin potion and armoire * make potion, armoire not unpinnable * show notes for armoire and potion, add default items for new users * show unpin notification * add/remove pinned gear on class-change * remove pinned & add new gear on purchase - refactoring pinning methods - fixes * always allow to purchase armoire * highlight item if suggested
This commit is contained in:
@@ -90,6 +90,23 @@ function _populateDefaultTasks (user, taskTypes) {
|
||||
});
|
||||
}
|
||||
|
||||
function pinBaseItems (user) {
|
||||
const itemsPaths = [
|
||||
'weapon_warrior_0', 'armor_warrior_1',
|
||||
'shield_warrior_1', 'head_warrior_1',
|
||||
];
|
||||
|
||||
itemsPaths.map(p => user.pinnedItems.push({
|
||||
type: 'marketGear',
|
||||
path: `gear.flat.${p}`,
|
||||
}));
|
||||
|
||||
user.pinnedItems.push(
|
||||
{type: 'potion', path: 'potion'},
|
||||
{type: 'armoire', path: 'armoire'},
|
||||
);
|
||||
}
|
||||
|
||||
function _setUpNewUser (user) {
|
||||
let taskTypes;
|
||||
let iterableFlags = user.flags.toObject();
|
||||
@@ -137,6 +154,7 @@ function _setUpNewUser (user) {
|
||||
}
|
||||
}
|
||||
|
||||
pinBaseItems(user);
|
||||
return _populateDefaultTasks(user, taskTypes);
|
||||
}
|
||||
|
||||
|
||||
@@ -581,6 +581,17 @@ let schema = new Schema({
|
||||
webhooks: [WebhookSchema],
|
||||
loginIncentives: {type: Number, default: 0},
|
||||
invitesSent: {type: Number, default: 0},
|
||||
|
||||
// Items manually pinned by the user
|
||||
pinnedItems: [{
|
||||
path: {type: String},
|
||||
type: {type: String},
|
||||
}],
|
||||
// Items the user manually unpinned from the ones suggested by Habitica
|
||||
unpinnedItems: [{
|
||||
path: {type: String},
|
||||
type: {type: String},
|
||||
}],
|
||||
}, {
|
||||
strict: true,
|
||||
minimize: false, // So empty objects are returned
|
||||
|
||||
Reference in New Issue
Block a user