Skip to content

Commit 75f5945

Browse files
committed
refactor: compute category mastery info in store selector function
1 parent e5dcaee commit 75f5945

File tree

1 file changed

+38
-44
lines changed

1 file changed

+38
-44
lines changed

src/components/checklist/CategoryInfo.jsx

Lines changed: 38 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -20,53 +20,47 @@ const fancyCategoryNames = {
2020
};
2121

2222
function CategoryItem({ name }) {
23-
const {
24-
itemsMastered,
25-
partiallyMasteredItems,
26-
categoryItems,
27-
hideFounders,
28-
hidePrime
29-
} = useStore(state => ({
30-
itemsMastered: state.itemsMastered,
31-
partiallyMasteredItems: state.partiallyMasteredItems,
32-
categoryItems: state.items[name],
33-
hideFounders: state.hideFounders,
34-
hidePrime: state.hidePrime
35-
}));
23+
const { masteredCount, masteredXP, totalCount, totalXP } = useStore(
24+
state => {
25+
const { itemsMastered, partiallyMasteredItems } = state;
26+
const categoryItems = state.items[name];
3627

37-
let masteredCount = 0;
38-
let masteredXP = 0;
39-
// There is an extra "Amp" item in the amp category in the
40-
// in-game profile.
41-
let totalCount = name === "AMP" ? 1 : 0;
42-
let totalXP = 0;
43-
Object.entries(categoryItems).forEach(([itemName, item]) => {
44-
if (
45-
isItemFiltered(itemName, item, {
46-
itemsMastered,
47-
hideMastered: false,
48-
hideFounders,
49-
hidePrime
50-
})
51-
)
52-
return;
28+
let masteredCount = 0;
29+
let masteredXP = 0;
30+
// There is an extra "Amp" item in the amp category in the
31+
// in-game profile.
32+
let totalCount = name === "AMP" ? 1 : 0;
33+
let totalXP = 0;
5334

54-
totalCount++;
55-
totalXP += xpFromItem(item, name);
56-
if (itemsMastered.has(itemName)) {
57-
masteredCount++;
58-
masteredXP += xpFromItem(item, name);
59-
} else if (partiallyMasteredItems[itemName]) {
60-
masteredXP += xpFromItem(
61-
item,
62-
name,
63-
partiallyMasteredItems[itemName]
64-
);
65-
}
66-
});
35+
Object.entries(categoryItems).forEach(([itemName, item]) => {
36+
if (
37+
isItemFiltered(itemName, item, {
38+
...state,
39+
hideMastered: false
40+
})
41+
)
42+
return;
43+
44+
totalCount++;
45+
totalXP += xpFromItem(item, name);
46+
if (itemsMastered.has(itemName)) {
47+
masteredCount++;
48+
masteredXP += xpFromItem(item, name);
49+
} else if (partiallyMasteredItems[itemName]) {
50+
masteredXP += xpFromItem(
51+
item,
52+
name,
53+
partiallyMasteredItems[itemName]
54+
);
55+
}
56+
});
57+
58+
// Assume the ghost "Amp" item is mastered if there are any mastered amps.
59+
if (name === "AMP" && masteredCount > 0) masteredCount++;
6760

68-
// Assume the ghost "Amp" item is mastered if there are any mastered amps.
69-
if (name === "AMP" && masteredCount > 0) masteredCount++;
61+
return { masteredCount, masteredXP, totalCount, totalXP };
62+
}
63+
);
7064

7165
return (
7266
<BaseCategoryInfo

0 commit comments

Comments
 (0)