Skip to content

Commit 635fad8

Browse files
committed
feat: wait before displaying disconnected state
1 parent 55abcc0 commit 635fad8

File tree

4 files changed

+32
-7
lines changed

4 files changed

+32
-7
lines changed

packages/app-frontend/src/features/App.vue

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export default defineComponent({
3737
},
3838
3939
setup() {
40-
const { isConnected, isInitializing } = useAppConnection()
40+
const { isConnected, isInitializing, showDisplayDisconnected } = useAppConnection()
4141
4242
function updateTheme(theme: string) {
4343
if (theme === 'dark' || theme === 'high-contrast' || (theme === 'auto' && chromeTheme === 'dark')) {
@@ -80,6 +80,7 @@ export default defineComponent({
8080
return {
8181
isConnected,
8282
isInitializing,
83+
showDisplayDisconnected,
8384
showAppsSelector,
8485
orientation,
8586
isChrome,
@@ -103,7 +104,7 @@ export default defineComponent({
103104
/>
104105

105106
<AppDisconnected
106-
v-else-if="!isConnected"
107+
v-else-if="showDisplayDisconnected"
107108
class="absolute inset-0"
108109
/>
109110

packages/app-frontend/src/features/connection/index.ts

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,40 @@
1-
import { ref } from 'vue'
1+
import { computed, ref } from 'vue'
2+
import { useNow } from '@vueuse/core'
23

34
const isConnected = ref(false)
45
const isInitializing = ref(true)
6+
const lastDisconnect = ref(0)
57

68
export function useAppConnection() {
9+
const now = useNow({
10+
interval: 1000,
11+
})
12+
const showDisplayDisconnected = computed(() => {
13+
if (isInitializing.value) {
14+
return false
15+
}
16+
if (lastDisconnect.value === 0) {
17+
return false
18+
}
19+
// Wait for 5 seconds before showing the disconnected message
20+
return !isConnected && now.value.getTime() - lastDisconnect.value > 5000
21+
})
22+
723
return {
824
isConnected,
925
isInitializing,
26+
lastDisconnect,
27+
showDisplayDisconnected,
1028
}
1129
}
1230

13-
export function setAppConnected(value: boolean) {
31+
export function setAppConnected(value: boolean, force = false) {
32+
if (force) {
33+
lastDisconnect.value = 0
34+
}
35+
else if (!value && isConnected.value) {
36+
lastDisconnect.value = Date.now()
37+
}
1438
isConnected.value = value
1539
}
1640

packages/app-frontend/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export async function initDevTools(shell: Shell) {
1919
app.mount('#app')
2020
connectApp(app, shell)
2121
shell.onReload(() => {
22-
setAppConnected(false)
22+
setAppConnected(false, true)
2323
getBridge()?.removeAllListeners()
2424
connectApp(app, shell)
2525
})

packages/shell-chrome/src/devtools.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ initDevTools({
3636
setAppConnected(false)
3737

3838
// Retry
39-
retryConnectTimer = setTimeout(connect, 1000)
39+
retryConnectTimer = setTimeout(connect, 500)
4040
})
4141

4242
if (connectCount > 1) {
@@ -49,7 +49,7 @@ initDevTools({
4949
setAppConnected(false)
5050

5151
// Retry
52-
retryConnectTimer = setTimeout(connect, 5000)
52+
retryConnectTimer = setTimeout(connect, 1000)
5353
}
5454
}
5555
connect()

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy