From 461580d9b98e49a05a0dfbb4e9609b4203c916b1 Mon Sep 17 00:00:00 2001 From: Hannah Date: Sat, 13 Apr 2024 20:09:59 +0800 Subject: [PATCH] fix(#170):update build scores when saved build modal opens --- src/components/BuildsModal.tsx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/components/BuildsModal.tsx b/src/components/BuildsModal.tsx index be178eae2..1a12ae3f5 100644 --- a/src/components/BuildsModal.tsx +++ b/src/components/BuildsModal.tsx @@ -9,6 +9,7 @@ import { SaveState } from 'lib/saveState' import { Message } from 'lib/message' import { Character, SavedBuild } from 'types/Character' import { CharacterPreview } from 'components/CharacterPreview.jsx' +import { RelicScorer } from 'lib/relicScorer' interface BuildsModalProps { open: boolean @@ -26,10 +27,11 @@ const BuildsModal: React.FC = ({ const characterMetadata = DB.getMetadata().characters[selectedCharacter?.id || 0] const characterName = characterMetadata?.displayName - // Pick the first build if there are any + // When opening, pick the first build if there are any + update build scores useEffect(() => { if (open && selectedCharacter?.builds?.length) { setSelectedBuild(0) + updateBuildsScoringAlgo(selectedCharacter.builds) } }, [open, selectedCharacter]) @@ -79,6 +81,16 @@ const BuildsModal: React.FC = ({ }) } + // Updates all saved builds with the latest scoring algorithm + function updateBuildsScoringAlgo(builds: SavedBuild[]) { + for (let b of builds) { + const relicsById = window.store.getState().relicsById + const relics = Object.values(b.build).map((x) => relicsById[x]) + let score = RelicScorer.scoreCharacterWithRelics(selectedCharacter, relics) + b.score = { score: Math.round(score.totalScore ?? 0), rating: score.totalRating ?? 'N/A' } + } + } + function onModalOk() { setOpen(false) }