diff --git a/website/client/src/store/actions/shops.js b/website/client/src/store/actions/shops.js index e79beb187f..c0ee965045 100644 --- a/website/client/src/store/actions/shops.js +++ b/website/client/src/store/actions/shops.js @@ -60,7 +60,10 @@ async function buyArmoire (store, params) { const isExperience = item.type === 'experience'; if (item.type === 'gear') { - store.state.user.data.items.gear.owned[item.dropKey] = true; + store.state.user.data.items.gear.owned = { + ...store.state.user.data.items.gear.owned, + [item.dropKey]: true, + }; } if (item.type === 'food') { diff --git a/website/common/script/content/loginIncentives.js b/website/common/script/content/loginIncentives.js index c63b8b4fdd..c878111b7c 100644 --- a/website/common/script/content/loginIncentives.js +++ b/website/common/script/content/loginIncentives.js @@ -9,7 +9,10 @@ export default function getLoginIncentives (api) { rewardKey: ['armor_special_bardRobes'], reward: [api.gear.flat.armor_special_bardRobes], assignReward: function assignReward (user) { - user.items.gear.owned.armor_special_bardRobes = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + armor_special_bardRobes: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -30,7 +33,10 @@ export default function getLoginIncentives (api) { rewardKey: ['head_special_bardHat'], reward: [api.gear.flat.head_special_bardHat], assignReward: function assignReward (user) { - user.items.gear.owned.head_special_bardHat = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + head_special_bardHat: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -91,7 +97,10 @@ export default function getLoginIncentives (api) { rewardKey: ['weapon_special_bardInstrument'], reward: [api.gear.flat.weapon_special_bardInstrument], assignReward: function assignReward (user) { - user.items.gear.owned.weapon_special_bardInstrument = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + weapon_special_bardInstrument: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -177,7 +186,10 @@ export default function getLoginIncentives (api) { rewardKey: ['slim_armor_special_pageArmor'], reward: [api.gear.flat.armor_special_pageArmor], assignReward: function assignReward (user) { - user.items.gear.owned.armor_special_pageArmor = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + armor_special_pageArmor: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -194,7 +206,10 @@ export default function getLoginIncentives (api) { rewardKey: ['head_special_pageHelm'], reward: [api.gear.flat.head_special_pageHelm], assignReward: function assignReward (user) { - user.items.gear.owned.head_special_pageHelm = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + head_special_pageHelm: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -211,7 +226,10 @@ export default function getLoginIncentives (api) { rewardKey: ['weapon_special_pageBanner'], reward: [api.gear.flat.weapon_special_pageBanner], assignReward: function assignReward (user) { - user.items.gear.owned.weapon_special_pageBanner = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + weapon_special_pageBanner: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -228,7 +246,10 @@ export default function getLoginIncentives (api) { rewardKey: ['shield_special_diamondStave'], reward: [api.gear.flat.shield_special_diamondStave], assignReward: function assignReward (user) { - user.items.gear.owned.shield_special_diamondStave = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + shield_special_diamondStave: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -389,8 +410,14 @@ export default function getLoginIncentives (api) { rewardKey: ['shop_weapon_special_skeletonKey', 'shop_shield_special_lootBag'], reward: [api.gear.flat.weapon_special_skeletonKey, api.gear.flat.shield_special_lootBag], assignReward: function assignReward (user) { - user.items.gear.owned.weapon_special_skeletonKey = true; // eslint-disable-line camelcase - user.items.gear.owned.shield_special_lootBag = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + weapon_special_skeletonKey: true, + }; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + shield_special_lootBag: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -410,8 +437,14 @@ export default function getLoginIncentives (api) { api.gear.flat.armor_special_sneakthiefRobes, ], assignReward: function assignReward (user) { - user.items.gear.owned.head_special_clandestineCowl = true; // eslint-disable-line camelcase - user.items.gear.owned.armor_special_sneakthiefRobes = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + head_special_clandestineCowl: true, + }; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + armor_special_sneakthiefRobes: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -431,8 +464,14 @@ export default function getLoginIncentives (api) { api.gear.flat.armor_special_snowSovereignRobes, ], assignReward: function assignReward (user) { - user.items.gear.owned.head_special_snowSovereignCrown = true; // eslint-disable-line camelcase, max-len - user.items.gear.owned.armor_special_snowSovereignRobes = true; // eslint-disable-line camelcase, max-len + user.items.gear.owned = { + ...user.items.gear.owned, + head_special_snowSovereignCrown: true, + }; // eslint-disable-line camelcase, max-len + user.items.gear.owned = { + ...user.items.gear.owned, + armor_special_snowSovereignRobes: true, + }; // eslint-disable-line camelcase, max-len if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -449,8 +488,14 @@ export default function getLoginIncentives (api) { rewardKey: ['shop_shield_special_wintryMirror', 'shop_back_special_snowdriftVeil'], reward: [api.gear.flat.shield_special_wintryMirror, api.gear.flat.back_special_snowdriftVeil], assignReward: function assignReward (user) { - user.items.gear.owned.shield_special_wintryMirror = true; // eslint-disable-line camelcase - user.items.gear.owned.back_special_snowdriftVeil = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + shield_special_wintryMirror: true, + }; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + back_special_snowdriftVeil: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -479,8 +524,14 @@ export default function getLoginIncentives (api) { api.gear.flat.armor_special_nomadsCuirass, ], assignReward: function assignReward (user) { - user.items.gear.owned.weapon_special_nomadsScimitar = true; // eslint-disable-line camelcase - user.items.gear.owned.armor_special_nomadsCuirass = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + weapon_special_nomadsScimitar: true, + }; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + armor_special_nomadsCuirass: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -488,7 +539,10 @@ export default function getLoginIncentives (api) { rewardKey: ['shop_head_special_spikedHelm'], reward: [api.gear.flat.head_special_spikedHelm], assignReward: function assignReward (user) { - user.items.gear.owned.head_special_spikedHelm = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + head_special_spikedHelm: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -557,7 +611,10 @@ export default function getLoginIncentives (api) { rewardKey: ['shop_head_special_dandyHat'], reward: [api.gear.flat.head_special_dandyHat], assignReward: function assignReward (user) { - user.items.gear.owned.head_special_dandyHat = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + head_special_dandyHat: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -565,8 +622,14 @@ export default function getLoginIncentives (api) { rewardKey: ['shop_weapon_special_fencingFoil', 'shop_armor_special_dandySuit'], reward: [api.gear.flat.weapon_special_fencingFoil, api.gear.flat.armor_special_dandySuit], assignReward: function assignReward (user) { - user.items.gear.owned.weapon_special_fencingFoil = true; // eslint-disable-line camelcase - user.items.gear.owned.armor_special_dandySuit = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + weapon_special_fencingFoil: true, + }; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + armor_special_dandySuit: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -655,8 +718,14 @@ export default function getLoginIncentives (api) { rewardKey: ['shop_weapon_special_tachi', 'shop_armor_special_samuraiArmor'], reward: [api.gear.flat.weapon_special_tachi, api.gear.flat.armor_special_samuraiArmor], assignReward: function assignReward (user) { - user.items.gear.owned.weapon_special_tachi = true; // eslint-disable-line camelcase - user.items.gear.owned.armor_special_samuraiArmor = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + weapon_special_tachi: true, + }; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + armor_special_samuraiArmor: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, @@ -664,8 +733,14 @@ export default function getLoginIncentives (api) { rewardKey: ['shop_head_special_kabuto', 'shop_shield_special_wakizashi'], reward: [api.gear.flat.head_special_kabuto, api.gear.flat.shield_special_wakizashi], assignReward: function assignReward (user) { - user.items.gear.owned.head_special_kabuto = true; // eslint-disable-line camelcase - user.items.gear.owned.shield_special_wakizashi = true; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + head_special_kabuto: true, + }; // eslint-disable-line camelcase + user.items.gear.owned = { + ...user.items.gear.owned, + shield_special_wakizashi: true, + }; // eslint-disable-line camelcase if (user.markModified) user.markModified('items.gear.owned'); }, }, diff --git a/website/common/script/fns/resetGear.js b/website/common/script/fns/resetGear.js index 008b1a13b9..9ad23b727e 100644 --- a/website/common/script/fns/resetGear.js +++ b/website/common/script/fns/resetGear.js @@ -16,7 +16,10 @@ export default function resetGear (user) { // The content.gear.flat[k] check should prevent this causing an error each(gear.owned, (v, k) => { if (gear.owned[k] && content.gear.flat[k] && content.gear.flat[k].value) { - gear.owned[k] = false; + gear.owned = { + ...gear.owned, + [k]: false, + }; } }); diff --git a/website/common/script/ops/buy/buyArmoire.js b/website/common/script/ops/buy/buyArmoire.js index 97d5213aca..ce7a978512 100644 --- a/website/common/script/ops/buy/buyArmoire.js +++ b/website/common/script/ops/buy/buyArmoire.js @@ -90,7 +90,10 @@ export class BuyArmoireOperation extends AbstractGoldItemOperation { // eslint-d throw new NotAuthorized(this.i18n('equipmentAlreadyOwned')); } - user.items.gear.owned[drop.key] = true; + user.items.gear.owned = { + ...user.items.gear.owned, + [drop.key]: true, + }; if (user.markModified) user.markModified('items.gear.owned'); user.flags.armoireOpened = true; diff --git a/website/common/script/ops/buy/buyMysterySet.js b/website/common/script/ops/buy/buyMysterySet.js index 018322cba8..4e1765c013 100644 --- a/website/common/script/ops/buy/buyMysterySet.js +++ b/website/common/script/ops/buy/buyMysterySet.js @@ -25,7 +25,10 @@ export default function buyMysterySet (user, req = {}, analytics) { } each(mysterySet.items, item => { - user.items.gear.owned[item.key] = true; + user.items.gear.owned = { + ...user.items.gear.owned, + [item.key]: true, + }; if (analytics) { analytics.track('acquire item', { uuid: user._id, diff --git a/website/common/script/ops/buy/purchase.js b/website/common/script/ops/buy/purchase.js index f4156f7683..67b65224eb 100644 --- a/website/common/script/ops/buy/purchase.js +++ b/website/common/script/ops/buy/purchase.js @@ -46,7 +46,10 @@ function purchaseItem (user, item, price, type, key) { user.balance -= price; if (type === 'gear') { - user.items.gear.owned[key] = true; + user.items.gear.owned = { + ...user.items.gear.owned, + [key]: true, + }; if (user.markModified) user.markModified('items.gear.owned'); } else if (type === 'bundles') { const subType = item.type; diff --git a/website/common/script/ops/changeClass.js b/website/common/script/ops/changeClass.js index 460786c6bd..a9d7104fa3 100644 --- a/website/common/script/ops/changeClass.js +++ b/website/common/script/ops/changeClass.js @@ -53,8 +53,16 @@ export default function changeClass (user, req = {}, analytics) { addPinnedGearByClass(user); - user.items.gear.owned[`weapon_${klass}_0`] = true; - if (klass === 'rogue') user.items.gear.owned[`shield_${klass}_0`] = true; + user.items.gear.owned = { + ...user.items.gear.owned, + [`weapon_${klass}_0`]: true, + }; + if (klass === 'rogue') { + user.items.gear.owned = { + ...user.items.gear.owned, + [`shield_${klass}_0`]: true, + }; + } if (user.markModified) user.markModified('items.gear.owned'); removePinnedItemsByOwnedGear(user); diff --git a/website/common/script/ops/openMysteryItem.js b/website/common/script/ops/openMysteryItem.js index 0ab7926c40..7df705aeb3 100644 --- a/website/common/script/ops/openMysteryItem.js +++ b/website/common/script/ops/openMysteryItem.js @@ -23,7 +23,10 @@ export default function openMysteryItem (user, req = {}, analytics) { item = cloneDeep(content.gear.flat[item]); item.text = content.gear.flat[item.key].text(user.preferences.language); - user.items.gear.owned[item.key] = true; + user.items.gear.owned = { + ...user.items.gear.owned, + [item.key]: true, + }; if (user.markModified) { user.markModified('purchased.plan.mysteryItems'); diff --git a/website/common/script/ops/pinnedGearUtils.js b/website/common/script/ops/pinnedGearUtils.js index 5c919c51a1..c69d9d30ed 100644 --- a/website/common/script/ops/pinnedGearUtils.js +++ b/website/common/script/ops/pinnedGearUtils.js @@ -95,7 +95,10 @@ export function removePinnedGearAddPossibleNewOnes (user, itemPath, newItemKey) // remove the old pinned gear items and add the new gear back removePinnedGearByClass(user); - user.items.gear.owned[newItemKey] = true; + user.items.gear.owned = { + ...user.items.gear.owned, + [newItemKey]: true, + }; if (user.markModified) user.markModified('items.gear.owned'); addPinnedGearByClass(user); diff --git a/website/common/script/ops/revive.js b/website/common/script/ops/revive.js index e8ce46010b..b50c1ca7e5 100644 --- a/website/common/script/ops/revive.js +++ b/website/common/script/ops/revive.js @@ -89,7 +89,10 @@ export default function revive (user, req = {}, analytics) { if (item) { removePinnedGearByClass(user); - user.items.gear.owned[lostItem] = false; + user.items.gear.owned = { + ...user.items.gear.owned, + [lostItem]: false, + }; if (user.markModified) user.markModified('items.gear.owned'); addPinnedGearByClass(user);