fix: handle frozen state (#1792)

pull/1575/head
Joaquín Sánchez 2023-02-25 12:09:24 +01:00 zatwierdzone przez GitHub
rodzic d810b2de3a
commit 3596d8bec3
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
2 zmienionych plików z 13 dodań i 3 usunięć

2
page-lifecycle.d.ts vendored
Wyświetl plik

@ -1,5 +1,5 @@
declare module 'page-lifecycle/dist/lifecycle.mjs' {
type PageLifecycleState = 'pageshow' | 'resume' | 'focus' | 'blur' | 'pagehide' | 'unload' | 'visibilitychange' | 'freeze'
type PageLifecycleState = 'active' | 'passive' | 'hidden' | 'frozen' | 'terminated'
interface PageLifecycleEvent extends Event {
newState: PageLifecycleState

Wyświetl plik

@ -5,12 +5,22 @@ import { closeDatabases } from '~/utils/elk-idb'
export default defineNuxtPlugin(() => {
const state = ref(lifecycle.state)
const frozenListeners: (() => void)[] = []
const frozenState = useLocalStorage(ELK_PAGE_LIFECYCLE_FROZEN, false)
lifecycle.addEventListener('statechange', (evt) => {
if (evt.newState === 'freeze')
if (evt.newState === 'hidden' && evt.oldState === 'frozen') {
frozenState.value = false
nextTick().then(() => window.location.reload())
return
}
if (evt.newState === 'frozen') {
frozenState.value = true
frozenListeners.forEach(listener => listener())
else
}
else {
state.value = evt.newState
}
})
const addFrozenListener = (listener: () => void) => {