1- import type { MouseEvent , RefObject } from 'react' ;
1+ import type { MouseEvent } from 'react' ;
22
33import { useEffect , useState } from 'react' ;
44
5- type UsePointerLockTarget = RefObject < Element | null | undefined > ;
6-
5+ /** The use pointer lock return type */
76interface UsePointerLockReturn {
87 element ?: Element ;
98 supported : boolean ;
10- lock : ( event : Event | MouseEvent < Element > ) => void ;
9+ lock : ( event : MouseEvent ) => void ;
1110 unlock : ( ) => boolean ;
1211}
1312
@@ -16,16 +15,13 @@ interface UsePointerLockReturn {
1615 * @description - Hook that provides reactive pointer lock
1716 * @category Sensors
1817 *
19- * @param {UsePointerLockTarget } target The target element for the pointer lock
2018 * @returns {UsePointerLockReturn } An object containing the pointer lock element and functions to interact with the pointer lock
2119 *
2220 * @example
2321 * const { supported, lock, unlock, element } = usePointerLock();
2422 */
25-
26- export const usePointerLock = ( target ?: UsePointerLockTarget ) : UsePointerLockReturn => {
27- const supported = ! ! document && 'pointerLockElement' in document ;
28-
23+ export const usePointerLock = ( ) : UsePointerLockReturn => {
24+ const supported = typeof document !== 'undefined' && 'pointerLockElement' in document ;
2925 const [ element , setElement ] = useState < Element > ( ) ;
3026
3127 useEffect ( ( ) => {
@@ -59,25 +55,25 @@ export const usePointerLock = (target?: UsePointerLockTarget): UsePointerLockRet
5955 document . removeEventListener ( 'pointerlockchange' , handlePointerLockChange ) ;
6056 document . removeEventListener ( 'pointerlockerror' , handlePointerLockError ) ;
6157 } ;
62- } , [ supported , element ] ) ;
63-
64- const lock = ( event : Event | MouseEvent < Element > ) => {
65- if ( ! supported ) return ;
58+ } , [ ] ) ;
6659
67- const element = event instanceof Event ? target ?. current : event . currentTarget ;
60+ const lock = ( event : MouseEvent ) => {
61+ if ( ! supported ) return false ;
6862
69- if ( ! element ) return ;
63+ if ( event instanceof Event ) return false ;
7064
71- element . requestPointerLock ( ) ;
65+ event . currentTarget . requestPointerLock ( ) ;
7266
73- setElement ( element ) ;
67+ setElement ( event . currentTarget ) ;
68+ return true ;
7469 } ;
7570
7671 const unlock = ( ) => {
72+ if ( ! supported ) return false ;
73+
7774 if ( ! element ) return false ;
7875
7976 document . exitPointerLock ( ) ;
80-
8177 setElement ( undefined ) ;
8278
8379 return true ;
0 commit comments