@@ -21,6 +21,12 @@ export type UsePermissionName =
21
21
| 'push'
22
22
| 'speaker' ;
23
23
24
+ /** The use permission options type */
25
+ export interface UsePermissionOptions {
26
+ /** Whether the permission is enabled */
27
+ enabled : boolean ;
28
+ }
29
+
24
30
/** The use permission return type */
25
31
export interface UsePermissionReturn {
26
32
/** The permission state */
@@ -41,9 +47,13 @@ export interface UsePermissionReturn {
41
47
* @example
42
48
* const { state, supported, query } = usePermission('microphone');
43
49
*/
44
- export const usePermission = ( permissionDescriptorName : UsePermissionName ) => {
50
+ export const usePermission = (
51
+ permissionDescriptorName : UsePermissionName ,
52
+ options ?: UsePermissionOptions
53
+ ) => {
45
54
const [ state , setState ] = useState < PermissionState > ( 'prompt' ) ;
46
55
const supported = navigator && 'permissions' in navigator ;
56
+ const enabled = options ?. enabled ?? true ;
47
57
48
58
const permissionDescriptor = { name : permissionDescriptorName } ;
49
59
@@ -61,13 +71,13 @@ export const usePermission = (permissionDescriptorName: UsePermissionName) => {
61
71
} ) ;
62
72
63
73
useEffect ( ( ) => {
64
- if ( ! supported ) return ;
74
+ if ( ! supported || ! enabled ) return ;
65
75
query ( ) ;
66
76
window . addEventListener ( 'change' , query ) ;
67
77
return ( ) => {
68
78
window . removeEventListener ( 'change' , query ) ;
69
79
} ;
70
- } , [ permissionDescriptorName ] ) ;
80
+ } , [ permissionDescriptorName , enabled ] ) ;
71
81
72
82
return {
73
83
state,
0 commit comments