Skip to content

Commit 63a22fa

Browse files
authored
fix(usePermission): fix memory leak (#4157)
1 parent a9b49f5 commit 63a22fa

File tree

1 file changed

+13
-9
lines changed

1 file changed

+13
-9
lines changed

packages/core/usePermission/index.ts

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { Ref } from 'vue-demi'
2-
import { ref } from 'vue-demi'
2+
import { shallowRef, toRaw } from 'vue-demi'
33
import { createSingletonPromise } from '@vueuse/shared'
44
import { useEventListener } from '../useEventListener'
55
import type { ConfigurableNavigator } from '../_configurable'
@@ -67,32 +67,36 @@ export function usePermission(
6767
} = options
6868

6969
const isSupported = useSupported(() => navigator && 'permissions' in navigator)
70-
let permissionStatus: PermissionStatus | undefined
70+
const permissionStatus = shallowRef<PermissionStatus>()
7171

7272
const desc = typeof permissionDesc === 'string'
7373
? { name: permissionDesc } as PermissionDescriptor
7474
: permissionDesc as PermissionDescriptor
75-
const state = ref<PermissionState | undefined>()
75+
const state = shallowRef<PermissionState | undefined>()
7676

7777
const onChange = () => {
78-
if (permissionStatus)
79-
state.value = permissionStatus.state
78+
if (permissionStatus.value)
79+
state.value = permissionStatus.value.state
8080
}
8181

82+
useEventListener(permissionStatus, 'change', onChange)
83+
8284
const query = createSingletonPromise(async () => {
8385
if (!isSupported.value)
8486
return
85-
if (!permissionStatus) {
87+
88+
if (!permissionStatus.value) {
8689
try {
87-
permissionStatus = await navigator!.permissions.query(desc)
88-
useEventListener(permissionStatus, 'change', onChange)
90+
permissionStatus.value = await navigator!.permissions.query(desc)
8991
onChange()
9092
}
9193
catch {
9294
state.value = 'prompt'
9395
}
9496
}
95-
return permissionStatus
97+
98+
if (controls)
99+
return toRaw(permissionStatus.value)
96100
})
97101

98102
query()

0 commit comments

Comments
 (0)