Skip to content

Commit c301f27

Browse files
committed
refactor(client): improve orientation detection
1 parent c92615f commit c301f27

2 files changed

Lines changed: 22 additions & 9 deletions

File tree

client/src/hooks/game/useGameScene.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -575,7 +575,11 @@ export function useGameScene({ currentLakeId }: UseGameSceneOptions) {
575575
clearTimeout(resizeTimer);
576576
resizeTimer = setTimeout(handleResize, 100);
577577
};
578-
const orientationHandler = () => setTimeout(handleResize, 300);
578+
const orientationHandler = () => {
579+
handleResize();
580+
setTimeout(handleResize, 100);
581+
setTimeout(handleResize, 300);
582+
};
579583

580584
window.addEventListener('resize', debouncedResize);
581585
window.addEventListener('orientationchange', orientationHandler);

client/src/hooks/ui/useIsPortrait.ts

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,33 @@
1-
import { useEffect, useState } from 'react';
1+
import { useLayoutEffect, useState } from 'react';
22

33
export function useIsPortrait(): boolean {
44
const [isPortrait, setIsPortrait] = useState(
55
() => window.innerWidth < window.innerHeight,
66
);
77

8-
useEffect(() => {
9-
let timer: number;
8+
useLayoutEffect(() => {
9+
let timer: ReturnType<typeof setTimeout>;
1010
const check = () => {
11+
setIsPortrait(window.innerWidth < window.innerHeight);
12+
};
13+
14+
const handleOrientationChange = () => {
15+
check();
1116
window.clearTimeout(timer);
12-
timer = window.setTimeout(() => {
13-
setIsPortrait(window.innerWidth < window.innerHeight);
14-
}, 300);
17+
timer = setTimeout(check, 100);
18+
timer = setTimeout(check, 300);
1519
};
20+
21+
const mql = window.matchMedia('(orientation: portrait)');
22+
mql.addEventListener('change', handleOrientationChange);
1623
window.addEventListener('resize', check);
17-
window.addEventListener('orientationchange', check);
24+
window.addEventListener('orientationchange', handleOrientationChange);
25+
1826
return () => {
1927
window.clearTimeout(timer);
28+
mql.removeEventListener('change', handleOrientationChange);
2029
window.removeEventListener('resize', check);
21-
window.removeEventListener('orientationchange', check);
30+
window.removeEventListener('orientationchange', handleOrientationChange);
2231
};
2332
}, []);
2433

0 commit comments

Comments
 (0)