Skip to content

Commit 837444c

Browse files
Merge pull request #238 from CSSLab/codex/desktop-analysis-mobile-ui-align
fix: prevent blunder meter flicker while paging
2 parents 69794a2 + 3cc61d3 commit 837444c

1 file changed

Lines changed: 37 additions & 1 deletion

File tree

src/pages/analysis/[...id].tsx

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -623,7 +623,7 @@ const Analysis: React.FC<Props> = ({
623623
[],
624624
)
625625

626-
const compactBlunderMeterData = useMemo(
626+
const rawCompactBlunderMeterData = useMemo(
627627
() =>
628628
analysisEnabled && !controller.learnFromMistakes.state.isActive
629629
? controller.blunderMeter
@@ -635,6 +635,42 @@ const Analysis: React.FC<Props> = ({
635635
emptyBlunderMeterData,
636636
],
637637
)
638+
const [
639+
displayedCompactBlunderMeterData,
640+
setDisplayedCompactBlunderMeterData,
641+
] = useState(rawCompactBlunderMeterData)
642+
643+
const hasUsableBlunderMeterData = useMemo(() => {
644+
const totalProbability =
645+
rawCompactBlunderMeterData.goodMoves.probability +
646+
rawCompactBlunderMeterData.okMoves.probability +
647+
rawCompactBlunderMeterData.blunderMoves.probability
648+
const hasMoves =
649+
rawCompactBlunderMeterData.goodMoves.moves.length > 0 ||
650+
rawCompactBlunderMeterData.okMoves.moves.length > 0 ||
651+
rawCompactBlunderMeterData.blunderMoves.moves.length > 0
652+
653+
return totalProbability > 0 || hasMoves
654+
}, [rawCompactBlunderMeterData])
655+
656+
useIsomorphicLayoutEffect(() => {
657+
if (!analysisEnabled || controller.learnFromMistakes.state.isActive) {
658+
setDisplayedCompactBlunderMeterData(emptyBlunderMeterData)
659+
return
660+
}
661+
662+
if (hasUsableBlunderMeterData) {
663+
setDisplayedCompactBlunderMeterData(rawCompactBlunderMeterData)
664+
}
665+
}, [
666+
analysisEnabled,
667+
controller.learnFromMistakes.state.isActive,
668+
emptyBlunderMeterData,
669+
hasUsableBlunderMeterData,
670+
rawCompactBlunderMeterData,
671+
])
672+
673+
const compactBlunderMeterData = displayedCompactBlunderMeterData
638674

639675
const hover = (move?: string) => {
640676
if (move && analysisEnabled) {

0 commit comments

Comments
 (0)